2017-10-04 53 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