Selenium 水豚:按属性查找元素,该属性包含不包含的内容

Selenium 水豚:按属性查找元素,该属性包含不包含的内容,selenium,cucumber,capybara,Selenium,Cucumber,Capybara,我在水豚环境中遇到以下问题: 我需要搜索一个元素。此元素包含一个唯一的属性。该属性是异步更改的。 我需要这个属性的内容,但是当我搜索这个属性时,我得到了一个零 我可以等到属性具有该属性,但由于这是Capybaras作业,我认为可能会有一个选择器,它可以搜索以下内容: find('button[uniqueattribute] != nil') 有什么办法吗 已经谢谢你了 如果要添加到button元素的属性最初没有该属性,那么您可以只执行以下操作 find('button[attribute_n

我在水豚环境中遇到以下问题:

我需要搜索一个元素。此元素包含一个唯一的属性。该属性是异步更改的。 我需要这个属性的内容,但是当我搜索这个属性时,我得到了一个零

我可以等到属性具有该属性,但由于这是Capybaras作业,我认为可能会有一个选择器,它可以搜索以下内容:

find('button[uniqueattribute] != nil')
有什么办法吗


已经谢谢你了

如果要添加到button元素的属性最初没有该属性,那么您可以只执行以下操作

find('button[attribute_name]')
它将等待多达Capybara.max\u default\u wait\u时间秒,以使具有该属性的按钮元素位于页面-。等待,然后获取该属性的内容/值

find('button[attribute_name]')['attribute_name']
如果您只想等待属性不存在或不为空,那么您可以这样做

find('button:not([attribute_name=""])')
如果您需要确保属性在那里,但不是空的,那么它将是空的

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

我找到了一个可能的解决方案: 您可以通过Xpath检查元素的长度,Xpath与字符串长度非常匹配。 因此,在我的案例中,解决方案是:

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

现在,水豚会等待属性有值。如果有更好的解决方案,请告诉我。

它看起来不错,但不幸的是,在我的例子中,属性在加载时似乎已经附加到元素上,但为空。然后异步地用我不知道的内容更新它,因此,我不能搜索内容,除非它不应该是empty@MJohnyJ更新了如何在属性已经存在但为空的情况下通过CSS执行此操作。您显示的XPath不是有效的XPath属性名称前面有XPath中的@,因此不确定这对您有何作用。另外,在Capybara中使用XPath时,您应该始终以//而不是//-开始XPath,否则会破坏所有作用域-。So.//button[string-length@unique_attribute_name!=0]`如果我没有复制和粘贴,那将是一个更好、合法的XPath,我感到羞耻,谢谢你。我更正了我的答案。感谢xpath陷阱的提示!