我一直在使用java脚本等待条件来等待页面加载,我的代码如下:
public void untilPageIsLoaded() {
ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
};
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(condition);
}
最初这段代码运行得很好,但几天后我的测试开始陷入随机点。所以我调查了这个问题,发现罪魁祸首是 java 脚本等待条件之上的停止执行。
即使我没有遇到任何异常,也不会超时。我知道这很奇怪,但这不仅仅是我的问题,看看这里;
https://code.google.com/p/selenium/issues/detail?id=6955
我尝试使用升级/降级版本的selenium和浏览器,更改了系统配置,但没有一个起作用。
现在我想用其他代码替换上面的java脚本等待条件。我不想使用thread.sleep();
请给我推荐一些好东西。
最佳答案
无论如何,在文档准备好之前,这段代码永远不会执行。
所以不需要从 selenium 执行这个 JS - 因为它只能返回一个结果 - “完整”。
这是因为在进入页面之前你无法从 SE 执行 JS。进入页面的唯一方法是调用 Selenium 的 .get()
,它会阻止任何后续执行,直到 DOM 完全加载。因此 .get()
已经执行了 .untilPageIsLoaded()
原本会执行的操作。
关于javascript - Selenium Webdriver 执行由于 javascript 等待条件而卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25718133/