RSpec 水豚定位器未找到 link 文本

RSpec Capybara locator not finding link text

我有一个带有简单 <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

所以我们肯定知道页面上有 link 和 Upload Video 文本。

但是当我这样做的时候

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

我得到 false。从 docs 看来 locator 可以是元素文本。那么为什么这不起作用?

这个替代方案似乎可行:

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

HTML 将一个 a 元素定义为一个 link 当它有一个 'href' 属性时,没有一个它被认为是 [=21= 的占位符] - https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element。出于这个原因,Capybara 默认要求在查找 link 时存在 href 属性。我猜你的 "link" 实际上没有 href 属性。您可以通过将 href: nil 作为选项

传递给水豚找到它
 Capybara.current_session.has_link?('Upload Video', href: nil)