Capybara可以选择特定字段范围内的复选框或单选按钮

时间:2013-07-11 20:05:32

标签: ruby capybara

我在一个包含多个复选框字段和“其他”选项的表单上使用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。我错过了什么吗?有没有办法在不诉诸丑陋的解决方法的情况下做到这一点?

2 个答案:

答案 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");')