Это не вопрос, а обмен информацией (я думаю, что многие будут использовать ее)
В течение нескольких дней пытались найти одно лучшее решение (без sheninigans :-D), чтобы дождаться загрузки новой страницы, после нажатия и т. Д. Ofc no old days Thread.sleep или неявное ожидание
Некоторые люди предлагали дождаться загрузки последнего элемента из новой страницы, некоторые предлагали использовать JS executor (решение document.readyState), которое иногда не будет работать (в моем случае, оно всегда давало полный ответ)
Нашел другое решение, чтобы проверить, когда ссылка на элемент на текущей странице вызовет исключение StaleElementReferenceException. Но ... в этом случае страницу не удалось загрузить после этого исключения.
Что я сделал? объединили оба решения вместе, и это всегда помогает мне ... Один следит за тем, чтобы документ не был в состоянии готовности (причина вызывает исключение staleElementReferenceException), а другой сразу после этого проверяет, пока страница полностью не загружается, и выдает readyState == complete
while(true) {
try {
//it's just an interaction (can be any) with element on current page
anyElementFromCurrentPage.getText();
} catch (StaleElementReferenceException e) {
break;
}
waitForLoad(driver);
return this;
}
void waitForLoad(WebDriver driver) {
new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd ->
((JavascriptExecutor) wd).executeScript("return
document.readyState").equals("complete"));
}
надеюсь, что некоторые люди будут использовать это пуленепробиваемое решение :-)