我想做类似的事情,但它不起作用,因为isPresent返回一个promise而不是一个布尔值......
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然后将它与一个布尔承诺或其他东西结合起来?
答案 0 :(得分:1)
您可以使用protractor.promise.all()
:
this.isVisible = function() {
return protractor.promise.all([
browser.isElementPresent(_this.username),
browser.isElementPresent(_this.password),
browser.isElementPresent(_this.submit)
]).then(function (isPresent) {
return isPresent[0] && isPresent[1] && isPresent[2];
});
}
并且,如果您要添加helper spread()
function:
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;
}));
}