Protractor 如何使用量角器在JS中创建isVisible函数?

Protractor 如何使用量角器在JS中创建isVisible函数?,protractor,Protractor,我想这样做,但它不起作用,因为isPresent返回一个承诺,而不是布尔值 this.isVisible = function(){ return browser.isElementPresent(_this.username) && browser.isElementPresent(_this.password) && browser.isElementPresent(_this.submit) } 我也试过了 this

我想这样做,但它不起作用,因为isPresent返回一个承诺,而不是布尔值

this.isVisible = function(){
  return browser.isElementPresent(_this.username) &&
         browser.isElementPresent(_this.password) &&
         browser.isElementPresent(_this.submit)
}
我也试过了

this.isVisible = function(){
  return _this.username.isPresent() &&
         _this.password.isPresent() &&
         _this.submit.isPresent()
}

有办法解决这个问题吗?也许可以使用all,然后将其与单个布尔承诺或其他东西结合起来?

您可以使用
量角器.promise.all()

如果您想添加一个:

这将使事情更加明确:

this.isVisible = function() {
    return protractor.promise.all([
        browser.isElementPresent(_this.username),
        browser.isElementPresent(_this.password),
        browser.isElementPresent(_this.submit)
    ]).then(spread(function (isUsernamePresent, isPasswordPresent, isSubmitPresent) {
        return isUsernamePresent && isPasswordPresent && isSubmitPresent;
    }));
}

很酷,这将返回一个带有单个布尔值的承诺right@Jackie是的,我还添加了一个更具可读性的版本,请查看。谢谢
function spread (callback) {
    // and returns a new function which will be used by `then()`
    return function (array) {
        // with a result of calling callback via apply to spread array values
        return callback.apply(null, array);
    };
};
this.isVisible = function() {
    return protractor.promise.all([
        browser.isElementPresent(_this.username),
        browser.isElementPresent(_this.password),
        browser.isElementPresent(_this.submit)
    ]).then(spread(function (isUsernamePresent, isPasswordPresent, isSubmitPresent) {
        return isUsernamePresent && isPasswordPresent && isSubmitPresent;
    }));
}