如何查看capybara中的复选框?

Joh*_*Dow 123 ruby testing rspec ruby-on-rails 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">
Run Code Online (Sandbox Code Playgroud)

Jon*_*n M 153

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

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

# Uncheck
find(:css, "#cityID[value='62']").set(false)
Run Code Online (Sandbox Code Playgroud)

  • 我可以将这个答案标记下来......我知道它有效,但它的直接反映标记的答案不是简单api的一部分:check('name,id or text here')(见下面的答案) (2认同)

ins*_*ero 128

最好不要创建具有相同ID的多个元素,这样(并且不仅仅是为了)您可以轻松地选中/取消选中优雅的复选框

check 'cityID'
uncheck 'cityID'
Run Code Online (Sandbox Code Playgroud)

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

find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)
Run Code Online (Sandbox Code Playgroud)

有关水豚输入操作的更多信息可以在这里找到

  • 最好不要创建具有相同id的多个元素,因为它不是有效的HTML.如果正确使用rails形成帮助器,那应该不是问题. (2认同)
  • 我想补充一点,复选框/取消选中仅接受以下值:id、名称或相关标签元素。[在这里](https://kolosek.com/rails-capybara-setup/)您可以阅读更多相关信息。 (2认同)

p11*_*00i 55

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

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

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

<label>  
  <input type="checkbox" value="myvalue" name="myname" id="myid">
  MyLabel
</label>
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式检查:

page.check('myid')
page.check('MyLabel')
page.check('myname')
Run Code Online (Sandbox Code Playgroud)

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


bur*_*mon 26

我认为你可能必须首先id你的表单元素赋予独特的东西.

但是对于Capybara和复选框,Capybara :: Node :: Actions#检查实例方法将允许您按名称,ID或标签文本查找和选中复选框.


Mic*_*ruz 6

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

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

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


Obr*_*ios 6

如果该框与文本关联,例如“选项3”,那么capybara 3.0.3您就可以

check 'Option 3'
Run Code Online (Sandbox Code Playgroud)


Sam*_*uel 6

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

check('Option 3', allow_label_click: true)


Vic*_*Vic 5

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

参考这篇博文

check 'checkbox[name]', allow_label_click: true
Run Code Online (Sandbox Code Playgroud)

对于标签中有链接的情况,例如“我同意 条款和条件情况,上面的代码将打开页面,这不是您想要的。

改为这样做。

find(:css, "#checkbox_id", visible: false).execute_script('this.checked = true')
Run Code Online (Sandbox Code Playgroud)