Selenium-使用量角器javascript代码进行页面等待
我正在测试angularjs页面,并使用selenium(java)为其编写自动化脚本 下面是我在继续下一个屏幕操作之前用于页面同步等待的代码Selenium-使用量角器javascript代码进行页面等待,java,angularjs,selenium,protractor,Java,Angularjs,Selenium,Protractor,我正在测试angularjs页面,并使用selenium(java)为其编写自动化脚本 下面是我在继续下一个屏幕操作之前用于页面同步等待的代码 public static boolean angularHasFinishedProcessing() { ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() { @Override
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;
}
public静态布尔angularHasFinishedProcessing(){
ExpectedCondition pageLoadCondition=新的ExpectedCondition(){
@凌驾
公共布尔应用(WebDriver驱动程序){
driver=GetDriver();//这是为了获取当前操作中的驱动程序。
字符串hasAngularFinishedScript=“var callback=arguments[arguments.length-1];\n”+
“var el=document.querySelector('html');\n”+
“如果(!window.angular){\n”+
“console.log('1');\n”+
“回调('false')\n”+
“}\n”+
“如果(角度.可获取性){\n”+
“angular.getestability(el).whenStable(函数(){callback('true')});\n”+
“}其他{\n”+
“console.log('hello3');\n”+
“如果(!angular.element(el.injector()){\n”+
“回调('false')\n”+
“}\n”+
“var browser=angular.element(el.injector().get(“$browser”);\n”+
“browser.notifyWhenNoOutstandingRequests(函数(){callback('true')});\n”+
"}";
JavascriptExecutor JavascriptExecutor=(JavascriptExecutor)驱动程序;
字符串isProcessingFinished=javascriptExecutor.executeAsyncScript(hasAngularFinishedScript.toString();
返回布尔值.valueOf(isProcessingFinished);
}
};
WebDriverWait wait=新的WebDriverWait(驱动程序,60);
布尔值bRet=(wait.until(pageLoadCondition));
如果(bRet){
返回布雷特;
}否则
返回false;
}
问题是isProcessingFinished始终为false,控制台始终写入1(表示window.angular始终返回false)
此外,由于在执行过程中无法调试javascript代码段,因此我不知道是否还有其他问题。有人能帮忙吗?1)了解如何调试javascript在此等待函数之前添加一个断点,运行脚本直到在该断点处停止,打开浏览器的DevTool并在控制台选项卡中执行
window.angular
,查看是否正确
您可以在控制台选项卡中继续执行javascript代码片段的其余代码行,以检查任何代码问题或按预期工作。1)了解如何调试javascript在此等待函数之前添加一个断点,运行脚本直到在该断点处停止,打开浏览器的DevTool并在控制台选项卡中执行
window.angular
,查看是否正确
您可以继续在console选项卡中执行javascript代码片段的其余代码行,以检查任何代码问题或按预期工作。您可以使用条件语句来处理可疑代码和量角器屏幕截图功能,而不是登录errorsSelenium太低级库,因此您应该使用它的一些包装器。看一看,在那里你可以使用智能等待,它会解决你所有的问题。变量
窗口。当你在控制台中检查时,角度会出现?你可以使用条件语句来显示可疑代码和量角器屏幕截图功能,而不是登录错误Selenium太低级库,所以你应该用一些包装纸。看一看,您可以在那里使用智能等待,它将解决您的所有问题。当您在控制台中检查时,变量窗口是否存在?