0

我有一个函数可以检查页面上的所有元素是否实际上都在页面上。

 /**
 * Elements are Displayed
 */
elementsDisplayed() {

    let elements = [
        this.emailTextField,
        this.pwordTextField,
        this.signInBtn,
        this.forgotLink,
    ];

    let elementsDisplayed = elements.map(function(element) {
        return element.isDisplayed();
    });

    let bundledPromise =  protractor.promise.all(elementsDisplayed)
    return bundledPromise
}

当我调用这个函数时,它返回一个包含四个真值的数组。现在我正在调用这个函数并期待它.toEqual([true, true, true, true])

有没有办法验证数组中的每个项目是.toBe(true)?我尝试了以下方法,但失败了。我必须检查的功能是:

describe('Login Tests', () => {

it('Validate Login Page Elements', () => {
    let elementsVisible = loginPage.elementsDisplayed();
    _.forEach(elementsVisible, function(value) {
        expect(value).toBe(true);
    })
  });
});

输出检查方式超过 4 项;它是一大堆expected null to be true, expected undefined to be true, expected 'pending' to be true, 等等。

我在这里做错了什么?

4

2 回答 2

0

let elementsVisible = loginPage.elementsDisplayed();

elementsDisplayes()分配一个从to返回的承诺elementsVisible

还有这个

_.forEach(elementsVisible ...

枚举该承诺的属性。

要获得承诺的价值,您必须使用then

loginPage.elementsDisplayed().then(elementsVisible => {
    _.forEach(elementsVisible, function(value) {
        expect(value).toBe(true);
    })
})

但是你的测试需要知道expect在异步回调中被调用 - 我不知道如何在量角器中进行异步测试,对不起。

于 2016-10-06T20:39:19.870 回答
0

所以这是我们修复它的方法,我们将elementsDisplayed方法更改为如下所示:

 /**
 * Elements are Displayed
 */
elementsDisplayed() {

    let elements = [
        this.emailTextField,
        this.pwordTextField,
        this.signInBtn,
        this.forgotLink,
    ];

    let elementsDisplayed = elements.map(function(element) {
        return element.isDisplayed();
    });

    return protractor.promise.all(elementsDisplayed).then(result => {
        console.log(result);
        return _.every(result)
    });
}
于 2016-10-06T21:02:35.980 回答