如何查看capybara中的复选框?

时间:2011-11-28 14:52:03

标签: ruby-on-rails ruby testing rspec capybara

我正在使用Rspec和Capybara。

如何编写检查checkbox的步骤?我已按价值尝试check,但找不到我的checkbox。我不知道该怎么做,因为我实际上有相同的ID具有不同的值

以下是代码:

 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">

13 个答案:

答案 0 :(得分:149)

我发现以下内容对我有用:

# Check
find(:css, "#cityID[value='62']").set(true)

# Uncheck
find(:css, "#cityID[value='62']").set(false)

答案 1 :(得分:126)

最好不要使用相同的 id 创建多个元素,这样(而且不仅如此)您可以轻松地选中/取消选中优雅的复选框

check 'cityID'
uncheck 'cityID'

如果无法避免具有相同ID的多个元素,并且仍需要选中具有特定值的复选框,则可以使用

find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)

有关 capybara 输入操作的更多信息,请here

答案 2 :(得分:54)

运行capybara测试时,你得到了page个对象。您可以使用它来选中/取消选中任何复选框。正如@buruzaemon已经提到的那样:

  

按名称,ID或标签文本查找并选中复选框。

所以我们假设你的html中有一个复选框,如:

<label>  
  <input type="checkbox" value="myvalue" name="myname" id="myid">
  MyLabel
</label>

你可以用以下方式检查:

page.check('myid')
page.check('MyLabel')
page.check('myname')

取消选中只使用page.uncheck方法。

答案 3 :(得分:26)

我认为你可能必须give unique ids to your form elements,首先。

但是关于Capybara和复选框,Capybara::Node::Actions#check instance method将允许您按名称,ID或标签文本查找并选中复选框。

答案 4 :(得分:6)

我知道这是一个较老的问题,但我自己一直在研究这个问题,并且尝试了以上所有内容,这最终对我有用:

find("input[type='checkbox'][value='#{cityID.id}']").set(true)

希望这对某人有帮助。我正在使用Capybara 2.4.4。

答案 5 :(得分:5)

如果该框与文本相关联,例如“选项3”,那么从capybara 3.0.3开始,您就可以这样做

check 'Option 3'

答案 6 :(得分:2)

隐藏在标签元素后面的自定义复选框存在一些问题。需要allow_label_click: true

参考此blog post

check 'checkbox[name]', allow_label_click: true

在标签中有“我同意terms and conditions”之类的链接的情况下,上述代码将打开页面,这不是您想要的。

执行此操作。

find(:css, "#checkbox_id", visible: false).execute_script('this.checked = true')

答案 7 :(得分:1)

如果您在查找时遇到问题,也可以使用:xpath代替:css。

  

find(:xpath,'// * [@ id =“example”]')。set(true)

在Chrome(当然还有其他浏览器)上,您可以“检查元素”,然后通过右键单击您感兴趣的元素,如果您不知道xpath是什么,就会有'copy xpath',现在你做了

答案 8 :(得分:1)

您还可以检查是否未使用此示例选中所有复选框。

全部(&#39;输入[type =复选框]&#39;)。每个都执行|复选框|     checkbox.should_not be_checked 端

答案 9 :(得分:1)

.set(true)对我没用,所以我不得不打电话给.click:

find(...).click

答案 10 :(得分:0)

check find(".whenever input")[:id]

我认为这会使capybara等待附加到该输入的任何事件监听器,如果它不等待,有时候这是一个痛苦的屁股.... 如果该输入没有ID,请选择另一个属性(必须有一个)......

答案 11 :(得分:0)

一个古老的话题但另一个解决方案是:

check('Option 3', allow_label_click: true)

答案 12 :(得分:0)

选择复选框

  check 'name_of_checkbox'