当多个元素匹配时指定元素

  • 本文关键字:元素 rspec capybara
  • 更新时间 :
  • 英文 :


如何使用within选择水豚项目?

我有以下HTML

<div id ="projects"> 
...
<div class="card">lorem</div>
<div class="card">ipsum</div>
</div>

我需要用class='card'选择第二个div。

within(:css, '#attachments') do
within(:css, '.card') do
expect(page).to have_text('ipsum')
end
end

但不知道该怎么做。

您可以使用

within all(:css, ".card")[1] do
expect(page).to have_text('ipsum')
end

顺便说一句,如果你还没有在spec_helper.rb中设置不同的default_selector,比如

Capybara.default_selector = :xpath

你可以直接使用

within all(".card")[1] do
expect(page).to have_text('ipsum')
end

因为默认情况下Capybara将使用CCD_ 5作为CCD_。

有很多方法可以选择该元素,这取决于两个div之前的...文档结构(是否有其他div等(。@fabersky的答案中显示了一种不依赖于该结构的方法,即使用all并对结果进行索引(all('.card')[1](。如果页面是高度动态的,您可能需要指定一个最小值,比如(all('.card', minimum: 2)[1](。另一种选择是编写一个XPath来只匹配正确的元素(通常,更好的做法是选择返回单个元素的选择器,而不是使用all并尽可能索引到结果中(。

within(:css, '#attachments') do
within(:xpath, XPath.css('.card')[2]) do
expect(page).to have_text('ipsum')
end
end    

在这种情况下,[2]是XPath表达式(变为.//*[contains(concat(' ', normalize-space(@class), ' '), ' card ')][2](的一部分,因此索引确实从1 开始

相关内容

  • 没有找到相关文章

最新更新