繁体   English   中英

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

[英]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.

我有两个问题,我很困惑。

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

  2. 如何在这些元素之间迭代以检查它们是否都具有 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM