如何解决如何还原量角器中的override browser.waitforAngular
我有一个使用Protractor&Jasmine自动化的回归套件。受测应用程序最近变成了混合应用程序,以NgUpgrade
引导。
升级后,脚本在访问某些元素时会超时。我添加了以下脚本来覆盖waitforAngular
函数,该函数可解决超时问题。但是,这对于登录(非角度页面)将不起作用我需要为非角度页面恢复此替代。想知道是否有人可以为此提供任何帮助
**var script = "var callback = arguments[arguments.length - 1];" +
"angular.element(document.querySelector(\"body\")).injector()" +
".get(\"$browser\").notifyWhenNoOutstandingRequests(callback)";
browser.waitForAngular = ()=> {
return browser.executeAsyncScript(script);
}**
解决方法
要覆盖量角器等待Angular调用的默认行为,可以通过以下方式禁用Angular等待:
browser.waitForAngularEnabled(false)
但是,量角器文档建议直接使用包装的驱动程序,而不要切换waitForAngularEnabled
属性,这会导致脚本不稳定。
一种替代方法是使用browser.driver.<whatever>
而不是browser.<whatever>
:
示例:
-
browser.get
当网页包含Angular组件时 -
browser.driver.get
当网页没有Angular组件时
我在下面的非角度页面上尝试了解决方案browser.waitForAngularEnabled(false),但仍在进入browser.executeAsyncScript(script)并抛出错误“角度未定义”
this.specStarted = function (result) {
browser.executeScript("return !!(window.angular || window.ng);")
.then(function(isAngular){
if(isAngular) {
console.log('angular page ');
var script = "var callback = arguments[arguments.length - 1];" +
"angular.element(document.querySelector(\"body\")).injector()" +
".get(\"$browser\").notifyWhenNoOutstandingRequests(callback)";
browser.waitForAngular = (test)=> {
if(test){
return browser.executeAsyncScript(script);
}
}
}
else {
browser.waitForAngularEnabled(false);
console.log('not an angular page');
}
});
};
,
一种解决方案是修改默认的angularEnabled行为。默认情况下,waitForAngularEnabled
是true
。您需要使用waitForAngularEnabled(false)
修改此默认行为。但是请记住,它完全取决于运行脚本的顺序。即,如果您已登录应用程序,现在要导航到登录页面(非角度页面),则需要禁用此默认行为,并且无论何时输入其他页面(即角度页面),都应默认启用它行为。
让我知道是否有帮助!
,谢谢大家,以下代码已解决了该问题
browser.waitForAngular = function(){var script = "var callback = arguments[arguments.length -1]" +"angular.element(document.querySelector(\"body\")).injector()" +".get(\"$browser\").notifyWhenNoOutstandingRequests(callback)";
if (!this.ignoreSynchronization) {
return browser.executeAsyncScript(script);
}
else
{
return this.driver.controlFlow().execute(() => {
return true;
},
'Ignore Synchronization Protractor.waitForAngular()')
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。