通过索引验证元素的存在

时间:2016-11-08 22:04:57

标签: javascript protractor

所以我有一个页面对象功能,可以验证屏幕上是否出现特定错误。 errorMsg是一个已经在var

中定义的选择器
this.isErrorMessageDisplayed = function() {
        expect(errorMsg.isDisplayed()).to.become(true);
}

此功能效果很好。但是,在处理具有多个元素的元素时,我一直遇到问题。例如,如果将其定义为$$并且我想验证它们的所有实例,我尝试了这样的事情。

this.isErrorMessageDisplayed = function() {
        for(i = 0; i < errorMsg.count(); i++){
            expect(errorMsg.get(i).isDisplayed()).to.become(true);
    }
}

为什么这不起作用,但是只要有一个元素我试图识别它效果很好?谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

方法count()返回Promise。它不能用作循环的上限。而是使用$$(...).each迭代每个元素:

this.isErrorMessageDisplayed = function() {
  errorMsg.each(e => {
    expect(e.isDisplayed()).to.become(true);
  });
};

答案 1 :(得分:2)

首先,量角器以异步方式运行。这意味着当量角器执行一行并进入下一行时,并不意味着该行已完成执行。欢迎来到异步编程世界:P

以下代码是我的建议:

this.isErrorMessageDisplayed = function () {
    errorMsg.each(function (elem,index) {
       expect(elem.isDisplayed()).toBe(true) 
    });
};

答案 2 :(得分:0)

您也可以使用以下内容,

this.isErrorMessageDisplayed = function() {
   expect(errorMsg.isDisplayed()).not.to.include(false);
};

如果你有一个元素数组,那么isDisplayed将返回显示状态数组,如[true,true,true]。所以你需要验证数组中不包含false