Selenium Java(正确等待新页面加载)



这不是一个问题,而是一个信息共享(我想很多人会使用它(

几天来,试图制定一个最佳解决方案(没有 sheninigans :-D(等待新页面加载,点击等。 Ofc 没有旧的日子 线程睡眠或隐式等待

有些人建议等到新页面加载的最后一个元素,有些人建议使用 JS 执行器(document.readyState 解决方案(,这有时不起作用(就我而言,它总是给出完整的响应(

找到了另一种解决方案,以检查对当前页面上元素的引用何时会抛出 StaleElementReferenceException。但。。。在这种情况下,页面在此异常后无法加载。

我做了什么? 将两种解决方案结合在一起,这对我来说总是一个技巧......一个确保文档未处于就绪状态(原因抛出 staleElementReferenceException(,另一个紧接着检查直到页面完全加载并提供 readyState == 完成

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"));
}

希望有些人会使用这个防弹解决方案:-(

所以我用C#工作,但Java是类似的。这是我目前使用的,即使它被标记为"过时"。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.Name("elementNameHere")));

最新更新