Код: Выделить всё
Код: Выделить всё
WebElement dialog = null;
try {
dialog = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[role='dialog']")));
} catch (TimeoutException e) {
logger.severe("no dialog 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) {
logger.severe(ExceptionUtils.getStackTrace(e));
}
Код: Выделить всё
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;
}
Насколько я понимаю, StaleElementReferenceException указывает, что ссылка на элемент теперь устарела, т. е. элемент больше не отображается в HTML DOM страницы, но элемент виден в момент его обнаружения.
Также рекомендуется проверять элемент на elementToBeClickable(), но во-первых имеет ли это смысл для div, а во-вторых я нахожу этот div через другой элемент, а не через вебдрайвер, поэтому конструктор new WebDriverWait(WebElement el, Продолжительность) не определена.
Как решить эту ситуацию?
Подробнее здесь: https://stackoverflow.com/questions/790 ... an-element
Мобильная версия