我在一个包含多个复选框字段和“其他”选项的表单上使用Capybara。 Capybara API为我们提供了
page.check('Other')
但无法(我能找到)将范围限制为给定的 字段 。您可以根据CSS(或XPath)选择器限制范围,但由于没有任何有意义的存在,这要求我更改页面的(丑陋的遗留)标记只是为了适应Capybara,这似乎是错误的解决方案。 (在一个完美的世界中,我有时间完全重构标记,并结束一些语义上合理的东西,这也为我提供了一种为Capybara选择范围的方法,但这不是一个完美的世界,我不想要只是为了容纳Capybara而在所有地方上课。)
这个
page.within('[name=FieldName]') do
page.check('Other')
end
也不起作用,因为Capybara正在寻找可以用作范围的单个父节点,这给出了一组复选框。 (如果Capybara支持这一点会很好,但事实并非如此。)就像我正在通过一副牌来搜索,而Capybara想要卡片进入的盒子,但我没有任何盒子。
我希望能够做这样的事情
page.check('Other', :in => 'FieldName')
但无论如何我都找不到这样做。据我所知,唯一可以传递的选项是text
, visible
, and exact
。我错过了什么吗?有没有办法在不诉诸丑陋的解决方法的情况下做到这一点?
答案 0 :(得分:1)
由于您有一个可以找到该复选框的css选择器,您可以使用find
方法找到该复选框。
page.find(:css, '[name=FieldName][value=Other]')
然后要选中该复选框,请使用set
(由check
方法使用):
page.find(:css, '[name=FieldName][value=Other]').set(true)
您还可以使用click
方法:
page.find(:css, '[name=FieldName][value=Other]').click
答案 1 :(得分:0)
这不是最优雅的解决方案,但由于没有人发布更好的解决方案(到目前为止),这是我提出的最佳解决方案。
只需执行脚本即可完成所需操作。在我的情况下,我正在使用jQuery:
page.execute_script('$("[name=FieldName][value=Other]").trigger("click");')