2016-11-08 38 views
1

所以我有一個頁面對象函數來驗證屏幕上是否出現了特定的錯誤。 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); 
    } 
} 

爲什麼這是行不通的,但是隻要有一個元素,我試圖識別它的效果很好?謝謝您的幫助!

回答

2

第一件事,量角器異步運行。這意味着量角器執行一條線併到達下一條線時,並不意味着該線已經完成執行。歡迎到異步編程的世界:P

下面的代碼是我的建議:

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

如果你不打算將索引用於任何東西,爲什麼將它包含在'.each()'函數中?只要保持'elem' – Gunderson

+0

你們搖滾,這個工作,一旦我改變它to.become(真)。非常感謝大家 – Tree55Topz

+0

我剛剛發現了一些東西..這個函數仍然不起作用,因爲如果計數爲零,那麼它仍然會通過。 – Tree55Topz

3

count()返回一個無極的方法。它不能用作循環的上界。而是使用$$(...).each遍歷每個元素:

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

它似乎沒有喜歡的語法E => {..這是一個JS語法是否正確? – Tree55Topz

+0

箭頭函數由ECMAScript 6引入,自節點4.4.5開始受支持。您可以用一個簡單的功能替換它。 –

0

您還可以使用類似下面,

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

,如果你有元素的數組,然後isDisplayed將返回你的顯示狀態的陣列狀[true,true,true]。因此,您需要驗證陣列中不包含false。第一