使用Java硒……我必须滚动到页面最右侧的元素,
但问题是这个元素只出现在滚动之后的DOM中。
尝试了下面的代码…
WebElement scrollElement=driver. findElement(By.xpath("some_xpath"));列表元素=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)数以查看它滚动的程度。是的,命令参数[0]. scrollLet
是向右滚动。
如果"selenium首先尝试在DOM中搜索目标元素,else脚本失败"-然后将java脚本执行器保留在“IF”语句中,而不是当。喜欢:如果(元素不可见)执行java脚本执行器