例外StaleElementReferenceException
意味着位於的元素不再出現在頁面中。通常在目標元素位於頁面更改之前和剛剛使用時添加。 這裏是展示問題的示例:
// trigger the update of the page
driver.findElement(By.name("foo1")).click();
// at this step the page is not yet updated, so the located element is not from the updated page.
WebElement element = driver.findElement(By.name("foo2"));
// at this step, the page is updated, the element is now deleted
element.click(); // throws `StaleElementReferenceException`
爲了解決這個問題,你可以等待上一個元素變得陳舊:
fooElement1.click();
new WebDriverWait(driver, 10)
.until(ExpectedConditions.stalenessOf(fooElement1));
fooElement2.click();
您也可以等待新的元素變得可見:
new WebDriverWait(driver, 10)
.until(ExpectedConditions.visibilityOf(fooElement3));
fooElement2.click();
底線是,你需要等待這可能是異步更新的結果的特定狀態。
請注意,一個簡單的方法是重試,它會再次找到元素並給出新的參考。但我不會推薦它,因爲該命令可以在更新前執行:
try {
fooElement.click();
} catch (StaleElementReferenceException ex) {
fooElement.click();
}
請描述你的enviorement,語言你正在使用或框架。 –