我有一个页面上的元素列表(漫画书卡片(,我想测试是否所有元素的标题都包含一个字符串(比如说"蜘蛛侠"(。
<%= @comics.each do |comic| %>
<div class="comic-card-text-box">
<p class="comic-card-title"><%= comic.title %></p>
</div>
<% end %>
使用Minitest/Capibara/Rails7,我正在尝试做这样的事情:
test "displays search results" do
login_as users(:user1)
visit root_path
fill_in "Search...", with: "spiderman"
assert_selector ".comic-card-title" do |element|
assert_match element, /spiderman/
end
end
这就是我的失败:
expected to find visible css ".comic-card-title" but there were no matches. Also found "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", which matched the selector but not all filters.
我有两个问题感到困惑。
我正在尝试检查元素是否包含子字符串。如果这个元素隐藏在页面上(只有悬停它才会出现(,该怎么办?
如何在这些元素之间迭代,以检查它们是否都有子字符串?
您的元素与可见性或传递给assert_selector的过滤过程不匹配(不要将assert_match
与Capybara元素一起使用(。如果这是因为元素需要悬停在上面,那么你真的应该悬停在它们上面。此外,assert_selector
只是验证至少一个元素将匹配,而不是所有元素都匹配。根据您的问题,我假设comic-card-text-box
元素在页面上可见(占用一些空间(,并且只有当您将鼠标悬停在comic-card-text-box
元素上时,comic-card-title
元素才可见。如果是这样的话,那么你会想做一些类似的事情
cards = all('.comic-card-text-box', minimum: 1) # specifying count: <expected count> rather than minimum would be better
cards.each do |card|
card.hover
assert_css(card, '.comic-card-title', text: 'spiderman')
end
如果我对你到底想做什么以及你的网站行为的假设是错误的,请在你的问题中澄清。