Selenium Web驱动程序的执行由于javascript等待条件而陷入停滞
Selenium webdriver execution gets stuck due to a javascript wait condition
我一直在使用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()
本来会做的事情了。
相关文章:
- 通过js在新选项卡中有条件地打开url
- 单击按钮以等待单击按钮
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 噩梦条件等待()
- 如何使EXPECT条件等待promise被解析(代码封装在方法中)
- CasperJS 等待不等待条件完成
- 如何使javascript FOR LOOP在循环之前等待某些条件
- 等待多个条件,然后执行函数
- 我如何执行等待操作作为while条件或等效条件
- Selenium Web驱动程序的执行由于javascript等待条件而陷入停滞
- 等待从javascript函数返回,直到满足条件
- 角度一次性绑定无法等待布尔条件
- 如何让PhantomJS等待页面上的特定条件
- Javascript:承诺在多次尝试后等待条件或中止
- 如何触发两个承诺并有条件地等待一个
- 等待条件成立
- 我如何明确地使用Angular加载条来处理各种等待条件?
- AngularJs或JavaScript等待某些条件
- 在多个条件中等待异步函数
- 使用Promise等待,直到满足轮询条件