2017-10-04 87 views
0

我在我的水豚環境中遇到以下問題:水豚:按屬性查找含有某物的元素不是

我需要搜索元素。該元素包含一個唯一的屬性。該屬性是異步更改的。 我需要這個屬性的內容,但是當我只搜索屬性時,我得到一個零。

我可以等到屬性具有屬性,但由於這是水豚的工作,我認爲有可能是一個可能的選擇,它可以搜索類似:

find('button[uniqueattribute] != nil') 

任何想法如何做到這一點?

已經謝謝了!

回答

0

如果屬性被添加到該按鈕元素(沒有原本的屬性),那麼你可以做

find('button[attribute_name]') 

將等待(最多Capybara.max_default_wait_time秒的按鈕元素與該屬性是在頁面上 - https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors等待,然後得到的內容是屬性/值,你可以做

find('button[attribute_name]')['attribute_name'] 

如果你只是想等到屬性或者不存在或不爲空,那麼你可以做

find('button:not([attribute_name=""])') 

如果您需要確保該屬性是存在的,但不爲空這將是

find('button[attribute_name]:not([attribute_name=""])') 
+0

它看起來不錯,但不幸的是,在我的情況下,該屬性已經似乎附加到元素時,它的加載,但空。然後異步地更新一個我不知道的內容,因此我無法搜索除了它以外的內容不應該爲空 – MJohnyJ

+0

@MJohnyJ更新瞭如何通過CSS來完成,如果該屬性已經存在但空白。 –

+0

它的工作很棒,最後一個爲我做了。真酷! – MJohnyJ

0

我發現了一個可能的解決方案: 可以與XPath查詢元素的長度(這是真棒)與字符串長度。 所以在我的情況的解決方案是:

find(:xpath, ".//button[@unique_attribute_name[string-length() != 0]]") 

現在水豚等待,直到該屬性具有價值。如果有更多漂亮的解決方案,請告訴我。

+0

你顯示的XPath不是有效的XPath(屬性名稱在XPath之前是@,所以不能確定它是如何工作的。另外,在Capybara中使用XPath時,你應該始終使用./而不是//- 否則你擊敗所有範圍 - https://github.com/teamcapybara/capybara#beware-the-xpath-trap。所以'.button [string-length(@unique_attribute_name)!= 0]'會一個更好的和合法的XPath –

+0

我沒有複製和粘貼,對我感到羞恥,也沒有向我致謝 我改正了我的回答 感謝提供xpath陷阱的提示! – MJohnyJ