2015-02-11 48 views
20

在我的測試之一,我使用的定位元素的CSS selector「超過一個元素找到定位」警告

element(by.css("ul.nav button")) 

有一個以上的元素相匹配的查詢,但是,因爲我只需要第一個,我對選擇器沒問題。

問題是,protractor拋出一個警告:

警告 - 找到定位器 By.cssSelector( 「ul.nav鍵」)多於一個的元件 - 該第一結果將被用於

是否可以抑制警告?換句話說,我怎麼能讓protractor知道我已經知道這個問題,並且不想再顯示警告了?


使用protractor開發版(直接從主分支安裝)。

回答

37

試試這個:

element.all(by.css("ul.nav button")).first() 

基本上,這告訴量角器,你已經知道有一個以上的元素,只是想和你的第一個(就像你在你的問題說的)。

+0

這一工程!作爲一種獎勵,出於好奇,然而,知道是否有可能使警告消失,有什麼想法是有用的?謝謝。 – alecxe 2015-02-11 21:27:18

+2

如果有,它會[在這裏](https://github.com/angular/protractor/blob/master/docs/referenceConf.js)。雖然我沒有看到類似的東西,但我認爲這是因爲非特定的定位器會導致非常脆弱的測試。 – 2015-02-11 21:33:59

+0

是的,恐怕我只能通過設置一個合適的logLevel來關閉它,這會通過擴展關閉其他不好的警告。但我完全同意你的最後一點,對我有意義。再次感謝您的幫助。 – alecxe 2015-02-11 21:37:08

6

警告是有原因的。你已經將你的測試與你的數據緊密聯繫在一起。選擇器太籠統了&你應該更具體。或者通過說element(by.css("ul.nav button:nth-child(1)"))或以不同的方式確定搜索範圍。量角器測試不應該是測試風格或dom,他們應該測試業務邏輯。

+0

好點,感謝參與! – alecxe 2015-04-15 18:32:06

+0

經過長時間的考慮,我低估了這個答案,因爲:1)由於問題的簡單性,它對OP的指責是完全沒有根據的; 2)給定的解決方案雖然可行,但依賴於問題中未提及的推測DOM結構; 3)答案認爲,給定的解決方案比OP的代碼具有特定的優勢,但實際上它沒有這些優勢;和4)代碼樣本之外,答案只不過是非sequiturs和說教。 – 2017-05-23 21:54:24

0

更少的代碼:

$$("ul.nav button").first() 
相關問題