繁体   English   中英

Selenium-页面使用量角器javascript代码等待Angular

[英]Selenium - Page Wait for Angular using Protractor javascript code

我正在测试angularjs页面,并使用selenium(java)为其编写自动化脚本。

以下是我用于页面同步的代码,然后继续执行下一个屏幕操作

public static boolean angularHasFinishedProcessing() {
    ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
            driver = GetDriver();//This is to get the driver in current action.
            String hasAngularFinishedScript = "var callback = arguments[arguments.length - 1];\n" +
                    "var el = document.querySelector('html');\n" +
                    "if (!window.angular) {\n" +
                     "console.log('1'); \n" +
                    "    callback('false')\n" +
                    "}\n" +
                    "if (angular.getTestability) {\n" +
                    "    angular.getTestability(el).whenStable(function(){callback('true')});\n" +
                    "} else {\n" +
                    "console.log('hello3'); \n" +
                    "    if (!angular.element(el).injector()) {\n" +
                    "        callback('false')\n" +
                    "    }\n" +
                    "    var browser = angular.element(el).injector().get('$browser');\n" +
                    "    browser.notifyWhenNoOutstandingRequests(function(){callback('true')});\n" +
                    "}";

            JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
            String isProcessingFinished = javascriptExecutor.executeAsyncScript(hasAngularFinishedScript).toString();

            return Boolean.valueOf(isProcessingFinished);
        }
    };

    WebDriverWait wait = new WebDriverWait(driver, 60);
    boolean bRet = (wait.until(pageLoadCondition));
    if (bRet) {
        return bRet;
    } else
        return false;
}

问题是isProcessingFinished始终为false,控制台始终写入1(意味着window.angular始终返回false)。

另外,由于无法在执行期间调试javascript代码段,因此我不知道是否还有其他问题。 有人可以帮忙吗?

1)关于如何调试JavaScript

在此等待功能之前添加一个断点,运行脚本直到在该断点处停止,打开浏览器的DevTool并在控制台选项卡中执行window.angular来查看它是对还是错。

而且,您可以继续在控制台选项卡中执行javascript代码段的其余代码行,以检查任何代码问题或按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM