这不是一个问题,而是一个信息共享(我想很多人会使用它)
几天来试图做出一个最好的解决方案(没有恶作剧:-D)来等待新页面加载,点击后等。Ofc 没有过去的日子 Thread.sleep 或隐式等待
有些人建议等到新页面加载的最后一个元素,有些人建议使用有时不起作用的 JS 执行器(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"));
}
希望有些人会使用这个防弹解决方案:-)