2

我可以通过 Capybara 的内容找到一个元素(任何类型)吗?

理想情况下,我想编写这样的代码:

find('Copy from a paragraph')    # finds the p element
find('Copy from a link')         # finds a element
find('Copy from a button')       # finds button element

等等

4

4 回答 4

5

如果你知道元素的类型,你可以写:

find('p', text: 'text in paragraph')
find('a', text: 'text in link')
find('button', text: 'text in button')
于 2014-04-01T11:02:26.560 回答
1

所有人都可能会回答这个问题

desired_element = nil
all('p').each do |elem|
  if elem.text == 'Copy from a paragraph'
    desired_element = elem
  end
end

根据需要将 'p' 替换为 'a' 或 'input'。

希望这可以帮助

于 2013-11-13T17:31:51.250 回答
1

我不相信有你喜欢的解决方案。考虑这个 HTML:

<div>
  <p>
    <span>hello</span>
  </p>
</div>

所有这三个元素都“包含”文本hello。每个包含元素(body,html等)都会匹配。也许您可以帮助我们了解您为什么要这样做?

于 2013-11-14T00:57:51.400 回答
1

找到了一个非常相似的问题的答案,关于如何在不指定其类型的情况下查找元素,它现在对我有用。就我而言,我首先定义了一个父选择器,然后仅通过文本在此选择器中查找一个元素。

答案不是最终的,但它有效。这一步所需要做的就是比使用正则表达式更好地处理完全匹配。

search = find(:css, #{parent_selector}).find(:css, '*', :text => /\A#{element_text}\z/)
于 2015-05-07T16:11:32.910 回答