我有很多这样的行:
<input id="car_ids_" name="car_ids[]" value="142" type="checkbox"> Car 142
<input id="car_ids_" name="car_ids[]" value="143" type="checkbox"> Car 143
<input id="car_ids_" name="car_ids[]" value="144" type="checkbox"> Car 144
<input id="car_ids_" name="car_ids[]" value="145" type="checkbox"> Car 145
我想要这种行为,因为我在这个railscast中看到了它: http://railscasts.com/episodes/165-edit-multiple?view=asciicast
当我测试自己时,它有效,但当我尝试用Capybara选择一些元素时,我不知道怎么做?
before(:each) do
check "car_ids_:first"
check "car_ids_:last"
end
我总是
Capybara::ElementNotFound:
cannot check field, no checkbox with id, name, or label 'car_ids_:first' found
你能帮我解决这个问题吗? 我想选择f.e.第二个和第三个元素?
更新:
find(:css, "#car_ids_[value='#{@car1.id}']").set(true)
=> find(:css, "#car_ids_[value='#{@car1.id}']").checked?
==> "checked"
find(:css, "#car_ids_[value='#{@car2.id}']").set(nil)
=> find(:css, "#car_ids_[value='#{@car1.id}']").checked?
==> nil
find(:css, "#car_ids_[value='#{@car3.id}']").set(true)
=> find(:css, "#car_ids_[value='#{@car1.id}']").checked?
==> "checked"
select("Deactivate", :from => "car_action")
click_button "Submit"
page.body.should have_content "Updated cars!"
@user.cars[0].active?.should == true
@user.cars[1].active?.should == false
@user.cars[2].active?.should == true
但最后,复选框值不会传递给控制器!我不知道为什么.... 复选框似乎已选中(但如果我打开带有save_and_open_page的页面,它们也不会被选中?)
答案 0 :(得分:1)
最简单的方法是告诉capybara按标签检查方框。如果你有@cars系列,你可以这样做:
[@cars[1], @cars[2]].each do |car|
check("Car #{car.id}")
end
修改强>
根据您在下面的评论,如果您想要专门访问第二和第三个元素而不考虑它们所引用的集合项,您可以将输入包装在具有一些id的div中(以缩小选择范围),例如: car-checkboxes
,然后执行此操作:
find(:css, "#car-checkboxes input:nth-child(2)").click
或
find(:css, "#car-checkboxes input:nth-child(2)").set(true)