如何使用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 开始