【问题标题】:Input field hidden by title in selenium在 selenium 中被标题隐藏的输入字段
【发布时间】:2017-04-11 22:00:50
【问题描述】:

我正在做一个自动硒测试,它有一个固定位置的标题。

    div#floatingDiv {
        position: fixed;
        background-color: #000000;
        color:white;            
    }

当尝试使用 Firefox Web 驱动程序自动执行 selenium 测试时,此浮动标头会妨碍。

似乎正在发生的是,当 selenium 单击当前不在屏幕上的元素时,Firefox Web 驱动程序会滚动页面,使其正在访问的按钮位于页面顶部,然后单击该元素。但是,由于标题具有固定位置,因此元素隐藏在标题后面并且测试失败。

有没有办法直接控制 selenium 中的滚动条?

在对这个问题进行了更多实验后,我注意到这个问题只发生在访问页面底部的按钮时,而不是输入字段。

【问题讨论】:

    标签: java firefox selenium-webdriver


    【解决方案1】:

    尝试以下未经测试的 Java 代码,您需要对滚动的位置和滚动量进行一些调整

    WebElement input = (Locatable) driver.findElement(By.xpath("some path to your input"));
    int y = (Locatable)input .getCoordinates().getLocationOnScreen().getY();
    ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
    input.click();
    

    【讨论】:

    • getLocationOnScreen() 返回元素相对于屏幕的位置。在我的代码中,它返回 0,0,因为 Firefox Web 驱动程序强制元素在被访问后立即滚动到屏幕顶部。
    • @EsotericNonsense:然后再次向下滚动(不访问元素)并单击?
    • 我让 window.scrollBy(x,y) 方法至少为我工作了一次,但它的行为很奇怪。当页面被调用时,当页面滚动到页面中间时,该方法不起作用。
    【解决方案2】:

    你需要使用scrollTo方法而不是scroll by menthod。

    public void scrollToElement(By by) {
        Locatable element = (Locatable) selenium.findElement(by);
        Point p= element.getCoordinates().getLocationOnScreen();
        JavascriptExecutor js = (JavascriptExecutor) selenium;  
        js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");");
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2013-02-24
      • 2020-08-21
      • 2022-01-01
      • 2019-05-12
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多