我如何在 Capybara 的许多元素的第一个元素内断言?

How do I assert within the first element of many in Capybara?

我想做这样的事情:

within '.Collection .Thing:first-child' do
  page.must_have_content 'lorem ipsum'
end

其中 .Thing 只是 Collection 中的许多其他事物之一。我试过上面的代码,但它说它不明确。有没有办法解决歧义?

如果您真的只想要页面上的第一个匹配元素,您可以这样做

within first('.Collection .Thing:first-child', minimum: 1) do
  page.must_have_content 'lorem ipsum'
end

如果页面已经完全加载,则不一定需要 minimum: 1 选项,但是如果页面尚未完全加载,它会让 Capybara 等待至少一个匹配元素显示在页面上 (或通过 ajax 等方式填充列表)。如果没有它,如果页面上没有匹配的元素,#first 通常会 return 立即返回 nil