![](/img/trans.png)
[英]Minitest + Capybara: how to check if options list does not contain an option?
[英]Check if all (hidden) elements contain a string with Minitest/Capybara
我在页面上有一个元素列表(带有漫画书的卡片),我想测试是否所有元素的标题都包含一个字符串(比如说“蜘蛛侠”)。
<%= @comics.each do |comic| %>
<div class="comic-card-text-box">
<p class="comic-card-title"><%= comic.title %></p>
</div>
<% end %>
使用Minitest/Capybara/Rails 7 ,我正在尝试做这样的事情:
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.
我有两个问题,我很困惑。
我正在尝试检查一个元素是否包含 substring。 如果这个元素隐藏在页面上(只有悬停它才会出现)怎么办?
如何在这些元素之间迭代以检查它们是否都具有 substring?
您的元素不匹配可见性或您传递给 assert_selector 的过滤器过程(不要将assert_match
与 Capybara 元素一起使用)。 如果那是因为需要将元素悬停在上面,那么你真的应该只在它们上方使用 hover。 同样assert_selector
只是验证至少有一个元素会匹配,而不是所有元素都会匹配。 根据您的问题,我假设comic-card-text-box
元素在页面上可见(占用一些空间),并且仅当您 hover over the comic-card-text-box
时, comic-card-title
元素才可见comic-card-text-box
元素。 如果是这种情况,那么你会想做类似的事情
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
如果我对您正在尝试做什么的假设以及您的网站行为是错误的,请在您的问题中澄清。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.