我一直在使用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()
本来会做的事情了。