如何用水豚验证 table 是否为空?

How to validate if the table is empty with capybara?

我已经尝试了所有这些命令,但 none 有效。我什至使用了 Whosebug 的一些技巧,但我还不开心.. 我已经尝试了所有这些命令,但 none 有效。我什至使用了 Whosebug 的一些技巧,但我还不开心.. 我已经尝试了所有这些命令,但 none 有效。我什至使用了 Whosebug 的一些技巧,但我还是不开心..

expect(find('.tvGrid').has_no_content?).to be true
expect(find('.tvGrid')).to have_no_content
expect(find('.tvGrid > tbody', visible: false)).not_to have_css('td')
expect(find('.tvGrid > tbody')).to have_no_content
<table width="100%" class="tvGrid">
  <tbody>
    <tr>
      <th colspan="1" class="tvHeader">Id</th>
      <th colspan="1" class="tvHeader">Code</th>
      <th colspan="1" class="tvHeader">Description</th>
      <th colspan="1" class="tvHeader">Operational Center</th>
      <th colspan="1" class="tvHeader">Status</th>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr class="tvRowEmpty">
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
     </tr>
  </tbody>
</table> 

重点是您可以检查 td 节点内是否没有文本。有很多方法可以做到

例如

expect(all('.tvGrid td').any? { |td| td.text.present? }).to be false

expect(all('.tvGrid td').select { |td| td.text.present? }).to be_empty

expect(all('.tvGrid td').all? { |td| td.text.blank? }).to be true

.blank?.present? 是 ActiveSupport 方法。在原版 Ruby 中,您可以使用 .strip.empty? 而不是这些方法

这里的关键是告诉 Capybara 期望没有 td 包含内容的元素。您可以在此处使用 text 选项可以是正则表达式的事实来检查

expect(page).not_to have_css('.tvGrid td', text: /.+/)

这将使 Capybara 确保没有与 .tvGrid td 选择器匹配的元素与文本内容的 1 个或多个字符,并将重试最多 Capybara.default_max_wait_time 秒以考虑动态页面。您可以根据需要调整正则表达式以允许任何可接受的内容。