随着Chrome浏览器和chromedriver的最新更新,我开始在WebDriver中获得 staleElementReferenceException 。
这应该由我的自定义Wait方法处理,但在某些情况下(极少数情况下)它仍然会发生。
这是我的等待方法:
public static WebElement getLoadedElement(String selector){
final Wait<WebDriver> longWait =
new FluentWait<WebDriver>(Driver.getDriver()).withTimeout(15, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class);
final WebElement element = longWait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(final WebDriver driver) {
return driver.findElement(By.xpath(selector));
}
});
return element;
}
是否有其他方法可以在不必为所有基本WebDriver操作(例如.click(),. getText()等)添加包装器的情况下执行此操作?
我发现的唯一其他解决方案是创建一个计数器,并尝试以设定的间隔(0.5秒)反复找到该元素,但为此我在捕获多个异常时遇到问题。超时结束(计数器)。
检查.isClickable()也不是一个选项,因为我不想点击某些元素才能找到它们。
还有其他想法吗?我确定有人知道更好的解决方案!