使用 Java selenium...我必须滚动到页面最右侧的元素,
但问题是这个元素只有在滚动之后才会出现在 DOM 中。
尝试了以下代码...
WebElement scrollElement = driver.findElement(By.xpath("some_xpath"));
List elements=driver.findElements(By.xpath("some_xpath"));
for(WebElement el:elements)
{
System.out.println(el.getText());
if(!el.getText().equalsIgnoreCase("element to be clicked") )
{
((JavascriptExecutor)driver).executeScript("arguments[0].scrollLeft += 1000;", scrollElement);
Thread.sleep(5000);
elements=driver.findElements(By.xpath("some xpath"));
Thread.sleep(5000);
}
else
{
el.click();
Thread.sleep(5000);
break;
}
}
上面代码的问题是......它在第一个循环中获取所有表头,滚动发生后,表头列表被更新(这就是我再次为元素赋值的原因)但仍然出现陈旧元素异常.
场景:想象一个有 26 列 A 到 Z 的表...
我想访问“T”栏,
在第一个视图中...A 到 E 列显示并存在于 DOM 中
然后滚动 E 到 J 列后显示并出现在 DOM 中
我也再次重新分配了元素,
这样它就可以在滚动后获取元素列表...
但仍然出现陈旧元素异常...
更新: 当我使用 TAB 而不是滚动时,代码有效..
while ( !element(yourElement).isPresent()) {
js.executeScript("arguments[0].scrollLeft += 1000;", grid);
}
在代码之前,您将网格定义为
WebElement
滚动位置
您也可以尝试使用像素(1000)数,看看它滚动了多少。是的,命令
arguments[0].scrollLeft
是向右滚动。
如果“selenium 首先尝试在 DOM 中搜索目标元素,否则脚本失败” - 那么将 java 脚本执行器保留在 'IF' 语句中,而不是 while 中。 喜欢: 如果(该元素不可见) 执行java脚本执行器