![](/img/trans.png)
[英]How to wait for page to load completely using JavaScript in Selenium
[英]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.