【发布时间】:2016-02-01 13:15:04
【问题描述】:
在 Capybara 集成测试中取消选中复选框的正确方法是什么?我有一个需要取消选中的复选框列表。我已经使用all 选择了它们:
checkboxes = all("input[type='checkbox']")
为了取消选中我使用的每个each。根据我在 StackOverflow 上找到的信息,应该有三种方法可以取消选中复选框:
uncheck(field)
field.click
field.set(false)
为了测试这些不同的方法是否我创建了以下测试(每个测试都在同一页面上的单独场景中):
使用uncheck成功了:
checkboxes = all("input[type='checkbox']")
checkboxes.each { |field| expect(field.checked?).to eq("checked") }
checkboxes.each { |field| uncheck(field[:id]) }
checkboxes.each { |field| expect(field.checked?).to eq(nil) }
puts page.body
save_and_open_page
使用click 失败了,所以我认为这是取消选中该字段的不正确方法:
checkboxes = all("input[type='checkbox']")
checkboxes.each { |field| expect(field.checked?).to eq("checked") }
checkboxes.each { |field| field.click }
checkboxes.each { |field| expect(field.checked?).to eq(nil) }
puts page.body
save_and_open_page
使用set(false) 成功了:
checkboxes = all("input[type='checkbox']")
checkboxes.each { |field| expect(field.checked?).to eq("checked") }
checkboxes.each { |field| field.set(false) }
checkboxes.each { |field| expect(field.checked?).to eq(nil) }
puts page.body
save_and_open_page
我想我应该只使用uncheck,但后来我注意到一些奇怪的事情:page.body 仍然显示复选框为选中状态,即使我在测试中断言checked? 为 nil。 save_and_open_page 显示了同样的事情。自页面加载以来,复选框似乎没有更改。
问题:
- 为什么
uncheck和set(false)不改变HTML 表单?在 订购表格我的测试以通过与field相关的一些元素 未选中。page.body和uncheck处理什么? - 取消选中复选框的规范方法是什么?由于
uncheck是 API 的一部分并且易于使用,因此它似乎是调用此类事情的正确函数,但它并没有改变page.body的事实让我感到担忧。
相关问题:
提前致谢!
【问题讨论】:
标签: ruby-on-rails ruby checkbox capybara simple-form