Исключение 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, язык вы используете или рамки. –