2016-11-14 61 views
2

我正在使用过滤器功能后将读取元素的文本的函数。我已经打印出返回的文本,它获取的元素,但我不认为我理解js承诺.. activeFilters是我已经确定的变种。承诺和for循环 - 试图验证多个元素文本

this.verifyColorFilterFunctional = function(color) { 
    var bool = true; 
    activeFilters.count().then(function (count) { 
     var amt = count - 1; 
     for (var i = 0; i < amt; i++){ 
      activeFilters.get(i).getText().then(function(text) { 
       bool = (color === text); 
       console.log(bool); 
      }); 
      if (!bool) { 
       break; 
      } 
     } 
    }); 
    return expect(bool).to.become(true); 
}; 

console.log根据需要输出true和false,但有两件事我已经注意到了。如果是假的,它不会像我在if语句中告诉它的那样突破。此外,我得到一个typeError:真不是一个可接受的错误..我相信逻辑听起来不错,在我的头,但没有JS。任何帮助将不胜感激。

+0

2个问题在这里,首先你不能在一个异步方法上使用标准for循环,其次你!bool在你承诺甚至完成之前得到执行。 – Keith

+0

我的javascript非常弱...我试图初始化promise中的变量,然后使用for循环但变量没有初始化 – Tree55Topz

+0

@Nico,可以有多个元素进行验证。过滤器更新了我需要确保所有这些结果,但是很多显示器(比如9或更多)都有我想要的过滤器。 – Tree55Topz

回答

3

量角器的element.all()支持getText()方法,它将返回元素中显示的文本作为数组。然后,您可以使用expect方法轻松地比较结果数组。

this.verifyColorFilterFunctional = function(color) { 
    activeFilters.getText().then(function (textArray) { 
    expect(textArray).to.equal(Array(textArray.length-1).fill(color)); 
    }); 
} 
+0

不是getText()也返回一个承诺?这个代码并没有工作:( – Tree55Topz

+0

是的,getText()会返回你的承诺,但'expect'方法将等待解决的承诺,然后将结果用于断言。试试上面的解决方案? –

+1

不确定'.toEqual'是否会等待分辨率,先解决'activeFilters.getText()。then(function(texts){'然后断言期望的数组' expect(texts).toEqual(Array(texts.length - 1).fill(color));' –