我正在使用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">
答案 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 id
s 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'