有時候,當我執行這樣的代碼:硒的webdriver - StaleElementReferenceException使用點擊()時
webDriver.findElement(By.xpath("//*[@class='classname']")).click();
我得到這個異常: org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 我知道我可以重試,但是有誰知道爲什麼會發生這種情況,以及我如何防止它發生?
有時候,當我執行這樣的代碼:硒的webdriver - StaleElementReferenceException使用點擊()時
webDriver.findElement(By.xpath("//*[@class='classname']")).click();
我得到這個異常: org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 我知道我可以重試,但是有誰知道爲什麼會發生這種情況,以及我如何防止它發生?
webDriver.findElement(By.xpath("//*[@class='classname']"))
返回一個WebElement對象。
WebElement對象始終將一個節點引用到HTML DOM樹(在您的Web瀏覽器的內存中)。
當DOM樹中的節點不再存在時,您會得到此異常。 WebElement對象仍然存在,因爲它位於JVM的內存中。這是一種「斷鏈」。您可以調用WebElement上的方法,但它們會失敗。
我有同樣的問題。
我的解決辦法是:
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();
}
希望它會幫助你。 ;)
這真的幫了我。非常感謝你。 – user1853840
似乎這個元素已從Document中刪除。也許有些JavaScript刪除它。也許你的代碼執行得太快,並且該元素不會出現在一些JavaScript邏輯之後? –
看看這個 - [陳舊元素引用異常](http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp) – Husam