检查是否所有(隐藏的)元素都包含一个带Minitest/Capibara的字符串



我有一个页面上的元素列表(漫画书卡片(,我想测试是否所有元素的标题都包含一个字符串(比如说"蜘蛛侠"(。

<%= @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.

我有两个问题感到困惑。

  1. 我正在尝试检查元素是否包含子字符串。如果这个元素隐藏在页面上(只有悬停它才会出现(,该怎么办?

  2. 如何在这些元素之间迭代,以检查它们是否都有子字符串?

您的元素与可见性或传递给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

如果我对你到底想做什么以及你的网站行为的假设是错误的,请在你的问题中澄清。

相关内容

  • 没有找到相关文章

最新更新