在将Firefox升级到版本19之后,我的Selenium Webdriver测试最近失败了。在我的多个测试中,我需要检索页面上但在浏览器窗口中不可见的元素,即,我必须向右滚动才能看到它们。由于升级到Firefox 19(我从15升级到16,所以可能是一个问题),我只能检索在浏览器窗口中看到的元素的文本。我的xpaths正确检索了所有元素,例如在我的以下代码中:
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); } }
列表“列”的大小为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中完全正常,但现在已被破坏。是否有人遇到类似问题并找到解决方法?还是有办法“滚动到某个元素”以强制滚动并因此使其在屏幕上可见?
对于WebDriver和/或Firefox为何以这种方式运行,我找不到答案。在我的AUT中,我有一个网格,用于显示报告以及在Html中看不到的屏幕上不可见的任何单元格/ WebElement,它们似乎没有被隐藏,WebDriver会承认它可以看到它们,但是我无法检索任何元素的值,即getText,getAttribute等。因此,要解决此限制(不确定是错误还是行为方式),我使用了以下JavaScript似乎已解决了对我来说:
private void scrollToElement(WebElement element){ ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element); }
从v16 +开始,这绝对是Firefox行为的变化。希望其他人也能找到帮助。