如果元素在屏幕上不可见,则WebElement getText()在Firefox中是空字符串

如果元素在屏幕上不可见,则WebElement getText()在Firefox中是空字符串,firefox,selenium,webdriver,selenium-webdriver,Firefox,Selenium,Webdriver,Selenium Webdriver,我的Selenium Webdriver测试最近在将Firefox升级到版本19后失败。在我的一些测试中,我需要检索页面上但在浏览器窗口上不可见的元素,即我必须向右滚动才能看到它们。由于升级到Firefox 19(我从15升级到16,所以这可能是一个问题),我只能检索在浏览器窗口中看到的元素的文本。我的XPath正确地检索所有元素,例如在我的以下代码中: private void buildColumnsMap(){ allColumnHeaders = new HashMap&

我的Selenium Webdriver测试最近在将Firefox升级到版本19后失败。在我的一些测试中,我需要检索页面上但在浏览器窗口上不可见的元素,即我必须向右滚动才能看到它们。由于升级到Firefox 19(我从15升级到16,所以这可能是一个问题),我只能检索在浏览器窗口中看到的元素的文本。我的XPath正确地检索所有元素,例如在我的以下代码中:

    private void buildColumnsMap(){
    allColumnHeaders = new HashMap<String,Integer>();
    positionToColumnName = new ArrayList<String>();

    WebElement columnsRoot = driver.findElement(By.xpath(COLUMNS_ROOT_XPATH));
    List <WebElement> columns = columnsRoot.findElements(By.xpath("./td/div/span"));
    System.out.println("Number of columns found: " + columns.size());

    for(int i = 0; i < columns.size(); ++i){
        String columnName = columns.get(i).getText();
        System.out.println("Column been inserted: " + columnName);
        allColumnHeaders.put(columnName, i);
        positionToColumnName.add(columnName);
    }
}

这在Firefox 15中对我来说非常好,但现在坏了。有人遇到过类似的事情并找到了工作吗?或者有没有一种方法可以“滚动到一个元素”来强制滚动,从而使其在屏幕上可见?

通过禁用下面的本机事件来尝试同样的方法

FirefoxProfile profile=new FirefoxProfile();
profile.setEnableNativeEvents(false);
DesiredCapabilities dc = DesiredCapabilities.firefox(); 
dc.setCapability(FirefoxDriver.PROFILE, profile); 
driver = new FirefoxDriver(dc);
这是一些做下一页的工作

driver.findElement(By.tagName("body")).sendKeys(Keys.PAGE_DOWN);

您是否已升级到selenium-server-standalone-2.31.0?

通过禁用本机事件来尝试同样的方法,如下所示

FirefoxProfile profile=new FirefoxProfile();
profile.setEnableNativeEvents(false);
DesiredCapabilities dc = DesiredCapabilities.firefox(); 
dc.setCapability(FirefoxDriver.PROFILE, profile); 
driver = new FirefoxDriver(dc);
这是一些做下一页的工作

driver.findElement(By.tagName("body")).sendKeys(Keys.PAGE_DOWN);

您是否已升级到selenium-server-standalone-2.31.0?

我无法找到WebDriver和/或Firefox为何会这样做的答案。在我的AUT中,我有一个网格,显示一个报告和任何在屏幕上我在Html中看不到的单元格/WebElement,它们看起来不隐藏,WebDriver会承认它可以看到它们,但我无法检索元素的任何值,即getText、getAttribute等,因此要克服这个限制(不确定这是一个bug还是它的行为方式)我使用了下面的一点JavaScript,它似乎已经为我解决了这个问题:

private void scrollToElement(WebElement element){

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}

这无疑是对Firefox行为的一次改变,与v16+相比。希望其他人也能发现这一点。我无法找到WebDriver和/或Firefox为什么会这样的答案。在我的AUT中,我有一个网格,显示一个报告以及在Html中无法在屏幕上看到的任何单元格/WebElements,它们会o不显示为隐藏,WebDriver会承认它可以看到它们,但是我无法检索元素的任何值,即getText、getAttribute等。因此,为了解决此限制(不确定这是错误还是它的行为方式),我使用了以下一点JavaScript,这似乎为我解决了问题:

private void scrollToElement(WebElement element){

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}

这无疑是对Firefox行为的改变,与v16+相比。希望其他人也能发现这一点有所帮助。

是的,我今天也升级到了2.31.0,但我确信问题在于浏览器。Firefox 15与selenium 2.28-2.31配合使用效果良好,Firefox v16+与任何库都不起作用。我会尝试一下配置文件,希望它能起作用。实际上,我需要向右滚动,而不是向下滚动,我尝试了一些JavaScript选项,但我认为它们运行得不太好是的,我今天也升级到了2.31.0,但我确定问题出在浏览器上。Firefox 15和selenium 2.28-2.31可以正常工作,Firefox v16+和任何库都不能正常工作。我会给配置文件一个机会,希望它能正常工作。我实际上需要向右滚动,而不是向下滚动,我尝试了一些JavaScript选项,但我认为效果不太好l、 然后尝试使用sendKeys(key.RIGHT)不知道我可以用Javascript传递DomeElements。这会变得非常简单。谢谢!不知道我可以用Javascript传递DomeElements。这会变得非常简单。谢谢!