如何用水豚验证 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> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </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 秒以考虑动态页面。您可以根据需要调整正则表达式以允许任何可接受的内容。
我已经尝试了所有这些命令,但 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> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr class="tvRowEmpty">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </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 秒以考虑动态页面。您可以根据需要调整正则表达式以允许任何可接受的内容。