【问题标题】:Java Selenium with Angular 5带有 Angular 5 的 Java Selenium
【发布时间】:2018-04-25 10:36:34
【问题描述】:

我正在尝试在基于 Angular 5 的网站上使用 Java 中的 Selenium。 Selenium 不直接支持,但JavascriptExecutor 可以帮助验证页面组件是否已完成加载。

问题是,我不知道如何实现 JavaScript 来验证这一点。

我正在使用:

return window.getAngularTestability === undefined

要验证当前页面中是否存在 Angular 5,但实现的下一部分对我来说是个谜。

我知道我必须以某种方式使用return window.getAngularTestability

【问题讨论】:

  • 您能否用如何您目前使用return window.getAngularTestability === undefined 以及您希望它有何不同来更新问题?
  • @JeffC 这与我的问题无关,与您链接的问题无关。感谢您的意见

标签: java angular selenium


【解决方案1】:

您可以创建一个通用的 java 方法来在您的 Java 代码中运行任何 javascript。请参阅下面的代码块:-

 public void executeJavascript(String script) {
        ((JavascriptExecutor) driver).executeScript(script);
    }

您可以将return javascript 语句作为参数 传递给此方法。

【讨论】:

    【解决方案2】:

    经过大量研究和网络搜索,我找到了答案。

    解决方案不是我的,所以我不值得称赞。

    ExpectedCondition<Boolean> expectation = driver -> ((JavascriptExecutor) driver).executeAsyncScript(
                "var callback = arguments[arguments.length - 1];" +
                        "if (document.readyState !== 'complete') {" +
                        "  callback('document not ready');" +
                        "} else {" +
                        "  try {" +
                        "    var testabilities = window.getAllAngularTestabilities();" +
                        "    var count = testabilities.length;" +
                        "    var decrement = function() {" +
                        "      count--;" +
                        "      if (count === 0) {" +
                        "        callback('complete');" +
                        "      }" +
                        "    };" +
                        "    testabilities.forEach(function(testability) {" +
                        "      testability.whenStable(decrement);" +
                        "    });" +
                        "  } catch (err) {" +
                        "    callback(err.message);" +
                        "  }" +
                        "}"
        ).toString().equals("complete");
        try {
            WebDriverWait wait = new WebDriverWait(webDriver(), 15);
            wait.until(expectation);
        } catch (Throwable error) {
            new Exception("Timeout waiting for Page Load Request to complete.");
        }
    

    【讨论】:

    • 如果解决方案不是您的,您至少应该链接到您获得解决方案的位置以表扬他们。
    • 不幸的是,这是一个深夜和漫长的研究,所以我现在找不到它。
    • 这很可能是来源:stackoverflow.com/a/49410819
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2018-07-09
    相关资源
    最近更新 更多