量角器中ajax请求的通用解决方案
我想等到ajax调用完成。下面是我写的一般方法。但这似乎不是工作 当我在每次Ajax请求之后运行call函数时,isLoaded总是正确的 在量角器中,有什么解决方案吗?或者我在哪里犯了错误 多谢各位量角器中ajax请求的通用解决方案,ajax,async-await,protractor,Ajax,Async Await,Protractor,我想等到ajax调用完成。下面是我写的一般方法。但这似乎不是工作 当我在每次Ajax请求之后运行call函数时,isLoaded总是正确的 在量角器中,有什么解决方案吗?或者我在哪里犯了错误 多谢各位 module.waitUntilJqueryLoad = async function (timeout) { var isDone = false; timeout = timeout || 60; await browser.sleep(1000);
module.waitUntilJqueryLoad = async function (timeout) {
var isDone = false;
timeout = timeout || 60;
await browser.sleep(1000);
//Wait for jQuery to load
var isLoaded = await browser.driver.executeScript("return jQuery.active == 0;");
if(isLoaded) {
console.log("JQuery is Ready!");
return await browser;
}
//This loop will rotate for 60 times to check If page Is ready after every 1 second.
//You can replace your value with 60 If you wants to Increase or decrease wait time.
for (var i = 0; i < timeout; i++) {
try {
await browser.sleep(1000);
} catch (err) {}
//To check page ready state.
var isLoaded = await browser.driver.executeScript("return jQuery.active == 0;");
console.log(isLoaded);
if(isLoaded) {
console.log("JQuery is Ready");
isDone = true;
} else {
console.log("JQuery is NOT Ready !!");
}
if(isDone)
break;
}
return browser;
};
module.waitUntilJqueryLoad=异步函数(超时){
var isDone=假;
超时=超时| | 60;
等待浏览器。睡眠(1000);
//等待jQuery加载
var isLoaded=wait browser.driver.executeScript(“return jQuery.active==0;”);
如果(已加载){
log(“JQuery已经准备好了!”);
返回等待浏览器;
}
//该循环将每1秒旋转60次,以检查页面是否准备就绪。
//如果要增加或减少等待时间,可以将值替换为60。
对于(变量i=0;i
我有一个解决办法。如果您的加载弹出窗口添加了显示样式,它将正常工作
这不是一个通用的解决方案,但其他发布的解决方案甚至在代码下也不起作用
await browser.wait(until.invisibilityOf(element(by.id('loadingPanel'))), 60000);
用法示例:
element(by.id('selectPerson')).waitForInvisibilityOf(10000); // wait 10 seconds
这是我的解决方案
protractor.ElementFinder.prototype.waitForInvisibilityOf = async function (timeout) {
var _debug = true;
var isDone = false;
timeout = timeout || 60000;
var seconds = timeout / 1000;
if(await !this.isPresent())
return this;
//This loop will rotate for 60 times to check If page Is ready after every 1 second.
//You can replace your value with 60 If you wants to Increase or decrease wait time.
for (var i = 1; i <= seconds; i++) {
await browser.sleep(1000);
var style = await this.getAttribute('style');
var insibilityOf = await style.includes('display: none;');
var visibilityOf = await style.includes('display: block;');
if(insibilityOf) {
if(_debug)
console.log(i + " second: Element invisible!");
isDone = true;
}
else {
if(_debug)
console.log(i + " second: Element NOT invisible!");
}
if(seconds === i)
throw "Element invisibility timed out after "+ timeout +" milliseconds";
if(!insibilityOf && !visibilityOf && i > 10) // break for paging is loaded
break;
if(isDone) // If element is invisible
break;
}
return await this; };
dragrator.ElementFinder.prototype.waitForInvisibilityOf=异步函数(超时){
var_debug=true;
var isDone=假;
超时=超时| | 60000;
var秒=超时/1000;
if(wait!this.isPresent())
归还这个;
//该循环将每1秒旋转60次,以检查页面是否准备就绪。
//如果要增加或减少等待时间,可以将值替换为60。
for(vari=1;i10)//加载分页的中断
打破
if(isDone)//if元素不可见
打破
}
返回等待此;};
那么您是说这行控制台.log(isLoaded)
返回true
?可能缺少某些内容,但executeScript()
返回了一个承诺,而您似乎无法尽我所能处理该承诺see@gunderson不幸的是,我没有弄明白。我看到了java代码,但转换成了procractor。很抱歉,我写这篇文章的时候还早。未注册您正在使用处理承诺的wait