Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
量角器中ajax请求的通用解决方案_Ajax_Async Await_Protractor - Fatal编程技术网

量角器中ajax请求的通用解决方案

量角器中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);

我想等到ajax调用完成。下面是我写的一般方法。但这似乎不是工作

当我在每次Ajax请求之后运行call函数时,isLoaded总是正确的

在量角器中,有什么解决方案吗?或者我在哪里犯了错误

多谢各位

    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