Promise 如果条件从未变为真,那么Gradurator browser.wait将返回什么?

Promise 如果条件从未变为真,那么Gradurator browser.wait将返回什么?,promise,protractor,wait,Promise,Protractor,Wait,我想使用browser.wait函数反复检查按钮元素是否存在一段时间,然后使用相关回调。下面是不使用等待的代码 detailsButton.isPresent() .then(function(present){ if(!present) { callback(); } else { callback(new Error('The details button was not present.'));

我想使用browser.wait函数反复检查按钮元素是否存在一段时间,然后使用相关回调。下面是不使用等待的代码

detailsButton.isPresent()
    .then(function(present){
        if(!present) {
            callback();
        } else {
             callback(new Error('The details button was not present.'));
        }
    });
我需要一些帮助来修复这段代码,因为我不确定等待函数如何处理错误/超时。本质上,我是在问下面代码的“.then”部分应该是什么,它比我现在拥有的代码要简单一些

browser.driver.wait(function(){
    return pgTransactionHistory.transactionHistoryDetails.isPresent();
}, 60000).then(function(){
    pgTransactionHistory.transactionHistoryDetails.isPresent()
        .then(function(present){
            if(!present) {
                callback();
            } else {
                callback(new Error('The details button was not present.'));
            }
        });
});

谢谢大家!

等待函数拒绝超时。也就是说,它返回一个承诺,当达到超时时,它拒绝它

browser.driver.wait(function(){
    return pgTransactionHistory.transactionHistoryDetails.isPresent();
}, 60000).then(function(){
    callback(); // instead of doing this, you should return a promise
}).catch(function(){
    callback(new Error('The details button was not present.'));
});

有两种方法可以做到这一点: 首先,您可以使用browser.wait的第三个参数指定将作为错误消息发送的字符串。像这样:

browser.driver.wait(function(){
    return //condition
}, timeout, 'Error message string')
    .then(function(){
        callback();
    });
或者第二次使用第二个参数。然后像这样:

browser.driver.wait(function(){
    return //condition
}, timeout)
    .then(function(){
        callback();
    }, function(){
        //code to want to execute on failure.
    });

由于量角器提供了同步写入异步操作的功能,因此也可以以更同步的方式处理browser.wait超时

export class AppPage {

  public static isLoaded() {
    return browser
     .wait(until.presenceOf(by.id('myID')), 5000)
     .then(() => true, () => false);
  }
}
并在e2e.spec中使用它,如下所示:

expect(AppPage.isLoaded()).toBeTruthy();

谢谢你的回答!但是,由于某种原因,添加.catch()会导致错误:“undefined不是函数。”当我不使用catch时,它可以正常工作,而且显然不会“捕获”任何内容。好的,我如何让它工作是使用browser.wait的第三个参数,这是一个用作错误消息的字符串。似乎我应该更仔细地阅读文档…不知道为什么catch不起作用。为什么量角器不只是拒绝错误并将其放在.catch处理程序中?当这起作用时,我想知道
expect
在引擎盖下做什么,以及这是否会阻塞线程。