StaleElementReferenceException произвольно возникает при поиске элементаJAVA

Программисты JAVA общаются здесь
Anonymous
StaleElementReferenceException произвольно возникает при поиске элемента

Сообщение Anonymous »

Бывает такая ситуация, когда я нахожу внутренний элемент div, но с переменным успехом из-за исключения StaleElementReferenceException. Сначала я нахожу диалог div, а затем пытаюсь избежать StaleElementReferenceException при поиске внутреннего div

Код: Выделить всё

WebElement dialog = null;
try {
dialog = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[role='dialog']")));
} catch (TimeoutException e) {
logger.log(Level.SEVERE, e.getMessage(), e);
logger.severe("no dialog banner after login");
}
logger.info("dialog found");
waitForChat(30);

try {
WebElement div = retryingFind(By.tagName("div"), dialog);
logger.info(div.getAttribute("class")); //null because the div is null
logger.info("inner div found");
} catch (TimeoutException e) {
ExceptionUtils.getStackTrace(e);
}
где повторяется метод Find:

Код: Выделить всё

public WebElement retryingFind(By by, WebElement el) {
WebElement result = null;
int attempts = 0;
while(attempts < 20) {
try {
result = el.findElement(by);
break;
} catch(StaleElementReferenceException e) {
System.out.println("StaleElementReferenceException");
}
attempts++;
}
return result;
}
Иногда внутренний div находится без проблем, но StaleElementReferenceException произвольно возникает при поиске элемента.
Насколько я понимаю, StaleElementReferenceException указывает, что ссылка на элемент теперь устарела, т. е. элемент больше не отображается в HTML DOM страницы, но элемент виден в момент его обнаружения.
Также рекомендуется проверять элемент на elementToBeClickable(), но во-первых имеет ли это смысл для div, а во-вторых я нахожу этот div через другой элемент, а не через вебдрайвер, поэтому конструктор new WebDriverWait(WebElement el, Продолжительность) не определена.
Как решить эту ситуацию?

Подробнее здесь: https://stackoverflow.com/questions/790 ... an-element

Вернуться в «JAVA»