gpt4 book ai didi

java - Selenium - 确定 Angular 2+ 中网页是否已完成加载

转载 作者:行者123 更新时间:2023-11-30 05:43:20 26 4
gpt4 key购买 nike

我有一个 Selenium 测试套件,它针对许多 Web 应用程序运行 Selenium 集成测试,其中一些应用程序是用 Angular 2+ 编写的,还有一些是用 AngularJS 编写的。

我们使用自定义的 ExpectedConditionWebDriverWait 来使测试用例等到 AngularJS 应用程序加载完成,以避免等待任意时间:

private static ExpectedCondition<Boolean> angularIsFinished() {
return new ExpectedCondition<Boolean>() {
public Boolean apply(final WebDriver driver) {
Object result = null;

while(result == null || result.toString().equals("undefined")) {
result = ((JavascriptExecutor)driver).executeScript("return typeof angular;");

try {
Thread.sleep(200L);
} catch (final InterruptedException ex) {
logger.error("Error while trying to sleep", ex);
}
}

final String script = " var el = document.querySelector(\"body\");\n" +
" var callback = arguments[arguments.length - 1];\n" +
" angular.element(el).injector().get('$browser').notifyWhenNoOutstandingRequests(callback);";
((JavascriptExecutor)driver).executeAsyncScript(script);
return true;
}

public String toString() {
return "Wait for AngularJS";
}
};
}

但是,对于 Angular 2+ 应用程序,return typeof angular; 将始终返回 undefined。有没有类似AngularJS的notifyWhenNoOutstandingRequests的方法您可以使用它来确定 Angular 2+ 应用程序何时完成加载?

This question提到使用 NgZone 作为可能的解决方案,但是如何通过 JavascriptExecutor 执行的脚本来处理它?<​​/p>

最佳答案

您可以通过调用例如document.querySelector('app-root')?或任意组件选择器...

或者调用document.readyState怎么样?完全加载网页后,它应该有结果'complete',并且网页是否基于 Angular 并不重要。

关于java - Selenium - 确定 Angular 2+ 中网页是否已完成加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com