我的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);
}
}
列表“columns”的大小为38但是在我的浏览器窗口中我只能看到10列而不必滚动所以当我将列名放入我的对象时,我得到10个列名,然后是所有空白。
Number of columns found: 38
Column been inserted: Date/Time
Column been inserted: Endpoint1
Column been inserted: Endpoint2
Column been inserted: Duration
Column been inserted: Codec1
Column been inserted: Codec2
Column been inserted: Avg MOS1
Column been inserted: Avg MOS2
Column been inserted: Avg Latency1 (ms)
Column been inserted: Avg Latency2 (ms)
Column been inserted: Avg Jitter1 (ms)
Column been inserted:
Column been inserted:
...
...
这对我来说在Firefox 15中完全没问题,但现在已经破了。有没有人碰到类似的东西,找到了解决方法?或者有没有办法“滚动到一个元素”,以强制滚动,从而使它在屏幕上可见?
答案 0 :(得分:9)
我找不到WebDriver和/或Firefox为何如此行事的答案。在我的AUT中,我有一个显示报告的网格,以及在Html中我无法看到的任何单元格/ Web元素,它们似乎不会被隐藏,WebDriver会承认它可以看到它们但是我无法检索任何元素的值,即getText,getAttribute等。所以要解决这个限制(不确定它是一个错误还是它的行为方式)我使用了下面的一些JavaScript似乎已经解决了对我来说问题:
private void scrollToElement(WebElement element){
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}
这绝对是v16 +的Firefox行为的变化。希望其他人也能发现这有用。
答案 1 :(得分: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?