Protractor For/While循环难以处理异步调用

Protractor For/While循环难以处理异步调用,protractor,Protractor,我尝试定期检查元素,并仅在元素存在时单击。有时,此元素会在2-3分钟内出现。若它不存在,我想等待几秒钟,然后刷新页面 以下是我尝试过的: for(var i = 1; i < 60; i++){ element(that.proposalByOrderPath(num)).isPresent().then(function(result){ if(result){ console.log(i); return elem

我尝试定期检查元素,并仅在元素存在时单击。有时,此元素会在2-3分钟内出现。若它不存在,我想等待几秒钟,然后刷新页面

以下是我尝试过的:

for(var i = 1; i < 60; i++){
    element(that.proposalByOrderPath(num)).isPresent().then(function(result){
        if(result){
            console.log(i);
            return element(that.proposalByOrderPath(num)).click();
        }
        else{
            browser.sleep(15000);
            browser.refresh();
       }
    });
}
for(变量i=1;i<60;i++){
元素(that.proposalByOrderPath(num)).isPresent().then(函数(结果){
如果(结果){
控制台日志(i);
返回元素(that.proposalByOrderPath(num)).click();
}
否则{
浏览器。睡眠(15000);
browser.refresh();
}
});
}

作为输出,它打印60次。它单击元素一次,但尝试再次查找该元素,并抛出“元素不可见”错误。

这是一个关闭问题。欲了解更多信息,请阅读以下内容-


我们可以通过以下三种方法之一解决异步for循环调用:

  • 回拨

    var a=函数(回调){ //代码
    回调(); }

    var b=函数(){ for(循环详细信息){ a(函数(){ }) } }

  • 通过递归调用函数而不是使用for循环

  • 自迭代

    for(循环详细信息){ (职能(一){ //你的代码 })(i) ); }


  • 在单击元素之前,可能需要将元素的
    可见
    字段设置为
    true
    ?主要问题是循环在进入检查元素之前完成