如果条件永远不变,Protractor browser.wait会返回什么?

时间:2015-06-17 15:08:21

标签: promise protractor wait

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

detailsButton.isPresent()
    .then(function(present){
        if(!present) {
            callback();
        } else {
             callback(new Error('The details button was not present.'));
        }
    });

我想帮助修复此代码,因为我不确定wait函数如何处理falure / timeout。基本上我在问下面代码的'.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.'));
            }
        });
});

谢谢!

3 个答案:

答案 0 :(得分:9)

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

browser.driver.wait(function(){
    return //condition
}, timeout, 'Error message string')
    .then(function(){
        callback();
    });

或者其次使用.then的第二个参数:

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

答案 1 :(得分:1)

等待功能在超时时拒绝。也就是说 - 它返回一个promise,当达到超时时,它会拒绝它。

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.'));
});

答案 2 :(得分:1)

因为Protractor提供了同步写异步操作的能力,所以也可以以更加同步的方式处理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();