2016-11-14 60 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));' –