Ruby on rails 水豚(poltergeist)在表单中找不到复选框

Ruby on rails 水豚(poltergeist)在表单中找不到复选框,ruby-on-rails,checkbox,capybara,poltergeist,Ruby On Rails,Checkbox,Capybara,Poltergeist,我无法获取用于查找复选框元素的水豚 我已经尝试了所有常用的方法: find_field check find click_on 就好像元素不在那里。如果我选择父元素,并查看它的innerHTML,则复选框包括: (byebug) all(:css, '.checkbox.form-group').last['innerHTML'] \n <input type=\"checkbox\" id=\"google_agreed_to_terms_at\" value=\"1\" req

我无法获取用于查找复选框元素的水豚

我已经尝试了所有常用的方法:

find_field
check
find
click_on
就好像元素不在那里。如果我选择父元素,并查看它的innerHTML,则复选框包括:

(byebug) all(:css, '.checkbox.form-group').last['innerHTML']
\n    <input type=\"checkbox\" id=\"google_agreed_to_terms_at\" value=\"1\" required=\"true\" ng-model=\"agreed_to_terms\" required-notification=\"Please agree to the terms and conditions\" class=\"ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required\" bs-validation=\"\">\
我想也许rails生成的HTML有点不符合标准,所以我开始手工编写复选框,但没有帮助


这是怎么回事?

由于CSS样式,复选框元素被隐藏,标签用来显示它。因此,该元素被水豚忽略隐藏元素的默认行为跳过

我用电脑解决了这个问题

find('#agreed_to_terms_at', :visible => false).trigger('click')

由于CSS样式,复选框元素被隐藏,标签被用来表示它。因此,该元素被水豚忽略隐藏元素的默认行为跳过

我用电脑解决了这个问题

find('#agreed_to_terms_at', :visible => false).trigger('click')

该复选框是隐藏的,以允许在所有浏览器中使用统一的样式。由于已正确关联标签元素,因此可以告诉check单击标签而不是实际复选框

check('agreed_to_terms_at', allow_label_click: true)
如果可见,将单击复选框;如果不可见,将单击标签。如果您希望它只单击标签,您可以这样做

find(:label, 'I have read and agree').click


该复选框是隐藏的,以允许在所有浏览器中使用统一的样式。由于已正确关联标签元素,因此可以告诉check单击标签而不是实际复选框

check('agreed_to_terms_at', allow_label_click: true)
如果可见,将单击复选框;如果不可见,将单击标签。如果您希望它只单击标签,您可以这样做

find(:label, 'I have read and agree').click


难道你不能添加你的spec\u助手:
Capybara.ignore\u hidden\u elements=false
?(为了避免每次需要时都使用您的解决方案)我已经考虑过这样做,因为这不是我第一次觉得这很麻烦,但我确实理解水豚的价值,它要求您说“是的,我知道用户看不到这一点,但我还是想改变它”,为了避免隐藏元素被规范意外操纵的用例提供了一个错误的过程。在测试应用程序时,使用触发器('click')或将Capybara.ignore\u hidden\u元素设置为false应该是最后的解决方案(如果刮取一个站点则可以)因为它们执行用户永远无法执行的操作,所以您不能只将它们添加到您的spec\u助手中:
Capybara.ignore\u hidden\u elements=false
?(为了避免每次需要时都使用您的解决方案)我已经考虑过这样做,因为这不是我第一次觉得这很麻烦,但我确实理解水豚的价值,它要求您说“是的,我知道用户看不到这一点,但我还是想改变它”,为了避免隐藏元素被规范意外操纵的用例提供错误的传递。在测试应用程序时,使用触发器('click')或将Capybara.ignore\u hidden\u元素设置为false应该是最后的解决方案(如果删除站点则可以),因为它们执行用户永远无法执行的操作