RSpec Capybara定位器未找到链接文本

时间:2018-02-15 00:30:22

标签: ruby-on-rails rspec capybara

我的网页上有一个简单的<a>标记,文字为Upload Video。我在我的rspec测试中设置了一个断点并执行此操作:

Capybara.current_session.find('.primary')
#<Capybara::Node::Element tag="a" path="/html/body/div[3]/div[1]/div[2]/div/div[1]/div[4]/label/a">

Capybara.current_session.find('.primary').text
"Upload Video"

Capybara.current_session.find('.primary').visible?
true

因此,我们确信网页上有Upload Video文字的链接。

但是当我做的时候

Capybara.current_session.has_link?('Upload Video')
false

我得到falsedocs似乎locator可以是元素文本。那么为什么这不起作用呢?

这种替代方案似乎有效:

Capybara.current_session.has_selector?(:css, 'a.primary', text: 'Upload Video')

1 个答案:

答案 0 :(得分:2)

HTML将a元素定义为链接,当它具有&#39; href&#39;属性,没有它,它被视为链接的占位符 - https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element。因此,Capybara在查找链接时默认需要href属性。我猜猜你的&#34;链接&#34;实际上没有href属性。您可以通过传递href: nil作为选项让Capybara找到它

 Capybara.current_session.has_link?('Upload Video', href: nil)