【问题标题】:How can Selenium Java to wait for AngularJS v 1.6Selenium Java 如何等待 AngularJS v 1.6
【发布时间】:2021-07-04 12:58:45
【问题描述】:

我知道这个主题有几个线程,但我发现没有一个解决方案适用于 AngularJS v1.6

所以这是我尝试过的:

public void waitForAngularRequestsToFinish() {
    while ((boolean) jsExec.executeScript(
            "return (typeof angular !== 'undefined')? true : false;")) {
        jsExec.executeAsyncScript(
                        "var callback = arguments[arguments.length - 1];"
                                + "angular.element(document.body).injector().get('$browser').notifyWhenNoOutstandingRequests(callback);");
    }
}

这只是陷入了无限循环。

private void waitForAngularLoad() {
    String angularReadyScript = "return angular.element(document).injector().get('$http').pendingRequests.length === 0";
    angularLoads(angularReadyScript);
}

public void waitUntilAngularReady() {
    try {
        Boolean angularUnDefined = (Boolean) jsExec.executeScript("return window.angular === undefined");
        if (!angularUnDefined) {
            Boolean angularInjectorUnDefined = (Boolean) jsExec.executeScript("return angular.element(document).injector() === undefined");
            if (!angularInjectorUnDefined) {
                poll(20);

                waitForAngularLoad();

                poll(20);
            }
        }
    } catch (WebDriverException ignored) {
    }
}

这没有任何作用。

我真的被困在这个上了。似乎没有任何效果,因此非常感谢任何帮助。

【问题讨论】:

    标签: java angularjs selenium automated-tests


    【解决方案1】:

    将 JSWaiter 实用程序类添加到您的项目中。 然后,通过添加以下行将 WebDriver 对象发送到项目中方便的 JSWaiter 类:“JSWaiter.setDriver(driver);” 最后,您可以在测试代码中使用以下任何方法: JSWaiter.waitJQueryAngular(); –> 两者都等待 JQuery、Angular、JS

    您可以在https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/找到更多详细信息

    【讨论】:

    • 您链接的内容已经是我的问题的一部分。我从那个确切的站点偷了 waitUntilAngularReady :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2021-07-27
    • 2018-01-24
    相关资源
    最近更新 更多