1

我在具有多个复选框字段和“其他”选项的表单上使用 Capybara。Capybara API 为我们提供

page.check('Other')

但没有办法(我能找到)将范围限制为给定的字段。您可以基于 CSS(或 XPath)选择器限制范围,但由于不存在有意义的选择器,因此我需要更改页面的(丑陋的旧版)标记以适应 Capybara,这似乎是错误的解决方案。(在一个完美的世界里,我有时间完全重构标记,最后得到一些语义上合理的东西,这也给了我为 Capybara 选择范围的方法,但这不是一个完美的世界,我不想要只是为了适应水豚而在所有的地方上课。)

这个

page.within('[name=FieldName]') do
  page.check('Other')
end

也不起作用,因为 Capybara 正在寻找一个可以用作范围的父节点,这提供了一组复选框。(如果 Capybara 支持它会很好,但它不支持。)这就像我正在传递一副卡片进行搜索,Capybara 想要卡片进入的盒子,但我没有任何盒子。

我希望能够做这样的事情

page.check('Other', :in => 'FieldName')

但我无论如何都找不到这样做。据我所知,唯一可以传入的选项是text,visibleexact. 我错过了什么吗?有没有办法在不采用丑陋的解决方法的情况下做到这一点?

4

2 回答 2

1

由于您有一个可以找到复选框的css-selector,您可以使用该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
于 2013-07-11T22:31:14.890 回答
0

这不是最优雅的解决方案,但由于没有人发布更好的解决方案(到目前为止),这是我想出的最好的解决方案。

只需执行一个脚本来做你需要的。就我而言,我使用的是 jQuery:

page.execute_script('$("[name=FieldName][value=Other]").trigger("click");')
于 2013-07-11T21:26:50.177 回答