Selenium Web驱动程序的执行由于javascript等待条件而陷入停滞

Selenium webdriver execution gets stuck due to a javascript wait condition

本文关键字:条件 等待 停滞 javascript 驱动程序 Web 执行 Selenium      更新时间:2023-09-26

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