如何使用 Rails Capybara 检查行为类似于按钮的已禁用 div?

How to check for a disabled div that behaves like a button using Rails Capybara?

我有一个用作按钮的 div:

<div class="dropdown">
<div class="btn dropdown-toggle" data-toggle="dropdown" disabled="">Export to file</div>
   <div class="dropdown-menu">
      <a class="dropdown-item" fref="/1">1</a>
      <a class="dropdown-item" href="/2">2</a>
      <a class="dropdown-item" href="/3">3</a>
   </div>
</div>
</div>

我需要使用 Capybara 检查它是否不可点击,我试试这个:

scenario 'do not allow export if tracking time empty' do
  have_css(".dropdown>.btn[disabled].dropdown-toggle")
end
# and this 
expect(page).to have_button("Export to", :disabled => true)

但这行不通,有什么建议吗?谢谢)

我建议:不要测试元素属性。尝试单击它然后测试没有任何反应。

对于您展示的 HTML

expect(page).to have_css('.btn.dropdown-toggle[disabled]', text: 'Export to file')

应该验证您显示的 HTML 在页面上并且可见。它实际上不会测试按钮是否被禁用 - 只是元素具有指定的 classes/attributes。如果您使用 3rd 方库来处理这些具有您信任的测试的按钮,这可能是可以接受的。如果您使用自己的 JS 处理按钮的禁用,尽管您可能想要实际验证它是否被禁用,例如

page.find('div.btn.dropdown-toggle[disabled]', text: 'Export to file').click
expect(page).not_to have_link('2', class: 'dropdown-item')

您不能使用 have_button,因为它会找到 HTML 个标准按钮元素(按钮、输入类型=按钮等)。

注意:如果您在应用中大量使用这些按钮,您可能需要考虑编写一个自定义 Capybara 选择器来处理它们。