如何轻松取消选中Capybara的所有复选框

时间:2014-10-28 08:48:45

标签: ruby-on-rails capybara

我有一个使用collection_check_boxes创建的复选框列表。

在功能/集成测试中测试时,使用Capybara,并希望"规范化"通过取消选中所有页面,然后检查我想要检查的页面:

within_fieldset('Product') do
  # Reset all checkboxes for a level playingfield.
  # What to do?

  # Mark checkboxes for products enabled
  products.each do |product|
    check products
  end
end

这是一个所谓的PageObject,因此我想要一些通用:如果在实际测试中,我会知道哪些字段被检查并取消选中它们。但是这个更通用的助手没有这样的知识。

我已经尝试了find('input[type=checkbox]').all {|checkbox| uncheck(checkbox) }的某些内容,它应该有效,但对于手头的任务似乎相当复杂,不是吗?

在Capybara,我错过了一些uncheck_all()?吗?这是"重置"的常见模式。在开始填写表格之前,在水豚的形式到空白状态?

2 个答案:

答案 0 :(得分:7)

试试这个:

all('input[type=checkbox]').each do |checkbox|
 if checkbox.checked? then 
  checkbox.click
 end
end

答案 1 :(得分:3)

这几乎与您的解决方案完全相同,但可能稍微清晰一些,我认为也适用于自定义JS复选框。据我所知,没有像uncheck_all方法那样的东西。

all("input[type='checkbox']").each{|box| box.set('false')}