有时当我执行这样的代码时:
webDriver.findElement(By.xpath("//*[@class='classname']")).click();
我得到这个例外: org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 我知道我可以重试,但有谁知道为什么会发生这种情况以及如何阻止它?
答案 0 :(得分:2)
我遇到了同样的问题。
我的解决方案是:
webDriver.clickOnStableElement(By.xpath("//*[@class='classname']"));
...
public void clickOnStableElement(final By locator) {
WebElement e = new WebDriverWait(driver, 10).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d) {
try {
return d.findElement(locator);
} catch (StaleElementReferenceException ex) {
return null;
}
}
});
e.click();
}
希望它会对你有所帮助。 ;)
答案 1 :(得分:0)
webDriver.findElement(By.xpath("//*[@class='classname']"))
返回一个WebElement对象。
WebElement对象始终将节点引用到HTML DOM树中(在Web浏览器的内存中)。
当DOM树中的节点不再存在时,您遇到此异常。 WebElement对象仍然存在,因为它位于JVM的内存中。这是一种“断链”。您可以在WebElement上调用方法,但它们会失败。