javascript - Selenium Webdriver 执行由于 javascript 等待条件而卡住

标签 javascript selenium selenium-webdriver

我一直在使用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/

相关文章:

javascript - ElementNotVisibleException : Message: Element is not currently visible. .. Selenium ( python )

java - 如何在页面工厂模式中使用WebDriver事件监听器

javascript - 允许两个客户端在没有服务器的情况下进行交互

javascript - 在 Cypress 中检查输入值是否小于 x 的正确方法是什么?

windows - 线程 "main"com.jacob.com.ComFailException : Can't co-create object 中的异常

selenium - 您如何在 Selenium 库/机器人框架中发送特殊 key ?

javascript - 在javascript中使用像美元符号这样的下划线

javascript - Vue.js 下拉嵌套菜单(当子事件时保持父打开)

events - Selenium RC 和输入控制事件

java - 如何在某些测试端点 "application_id"中注入(inject) "/v1/random-session/{id}/submit"?