代码之家  ›  专栏  ›  技术社区  ›  ItsMeGokul

Selenium-使用量角器javascript代码分页等待角度

  •  0
  • ItsMeGokul  · 技术社区  · 8 年前

    我正在测试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 回复  |  直到 8 年前
        1
  •  2
  •   yong    8 年前

    1) 了解如何调试javascript

    在此等待函数之前添加一个断点,运行脚本直到在该断点处停止,打开浏览器的DevTool并执行 window.angular 在控制台选项卡中,查看其是否正确。

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