Javascript 通过索引验证元素的存在性

Javascript 通过索引验证元素的存在性,javascript,protractor,Javascript,Protractor,因此,我有一个页面对象函数,用于验证屏幕上是否出现特定错误。errorMsg是已在变量中定义的选择器 this.isErrorMessageDisplayed = function() { expect(errorMsg.isDisplayed()).to.become(true); } 这个功能非常有效。但是,在处理具有多个..的元素时,我不断遇到问题。。例如,如果这被定义为$$,并且我想验证它们的所有出现,我会这样尝试 this.isErrorMessageDisplaye

因此,我有一个页面对象函数,用于验证屏幕上是否出现特定错误。errorMsg是已在变量中定义的选择器

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);
    }
}
this.isErrorMessageDisplayed=function(){
对于(i=0;i
然而,当我试图识别的只有一个元素时,为什么这不起作用呢?谢谢你的帮助

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

this.isErrorMessageDisplayed = function() {
  errorMsg.each(e => {
    expect(e.isDisplayed()).to.become(true);
  });
};
方法
count()
返回一个承诺。它不能用作循环的上限。而是使用
$$(…)。每个
迭代每个元素:

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

您也可以使用下面的内容

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

如果您有一个元素数组,那么isDisplayd将返回显示状态的数组,如
[true,true,true]
。因此您需要验证数组中是否不包含
false

您也可以使用以下内容

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

如果您有一个元素数组,那么isDisplayd将返回显示状态的数组,如
[true,true,true]
。因此您需要验证数组中是否不包含
false

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

以下代码是我的建议:

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

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

以下代码是我的建议:

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

它似乎不喜欢语法e=>{..这是JS的正确语法吗?arrow函数是由ECMAScript 6引入的,从节点4.4.5开始就受到支持。您可以用一个简单的函数替换它。它似乎不喜欢语法e=>{..这是JS的正确语法吗?arrow函数是由ECMAScript 6引入的,从node 4.4.5开始就受支持。您可以用一个简单的函数替换它。如果您不打算对任何内容使用索引,为什么要将其包含在
.each()中
函数?只要保留
elem
你们这些家伙太棒了,一旦我将它改为.been(true)。谢谢大家,我刚刚发现了一些东西。这个函数仍然不起作用,因为如果计数为零,那么它仍然会通过。如果你们不打算对任何东西使用索引,为什么要将它包括在
中。each()
function?保留
elem
你们这些家伙太棒了,我把它改成了。变成(true)。谢谢大家。我刚刚发现了一些东西。这个函数仍然不起作用,因为如果计数为零,它仍然会通过。