如何在水豚中选中复选框?

我用的是 Rspec 和水豚。

如何编写一个步骤来检查 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">
105713 次浏览

我认为你可能必须 为表单元素赋予唯一的 id,首先。

但是对于水豚和复选框,动作 # 检查实例方法允许您根据名称、 ID 或标签文本查找和选中复选框。

我发现以下几点很适合我:

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


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

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

Find (: xpath,’//* [@id = “ example”]’) . set (true)

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

在运行水豚测试时,您得到了 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方法是一样的。

最好不要使用相同的 身份证创建多个元素,这样(不仅仅是为了这个目的)您可以轻松地选中/取消选中 复选框

check 'cityID'
uncheck 'cityID'

如果无法避免具有相同 id 的多个元素,并且仍然需要选中 有一定价值复选框,那么可以使用

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

关于 水豚输入操作的更多信息可以找到 给你

我知道这是一个古老的问题,但是我一直在自己解决这个问题,并且尝试了以上所有的方法,这是最终对我有效的方法:

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

希望这对某些人有帮助。我正在使用水豚2.4。

您还可以在此示例中选中未选中所有复选框。

All (‘ input [ type = checkbox ]’) . each do | checkbox | Should _ not be _ check 结束

. set (true)对我不起作用,所以我不得不打电话。点击:

find(...).click

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

我认为这将使水豚等待任何事件监听器连接到该输入,有时是一个痛苦的屁股,如果它不等待..。 如果该输入没有 ID,请选择其他属性(必须有一个) ..。

如果框与文本关联,例如“选项3”,那么从 capybara 3.0.3开始,你可以直接做

check 'Option 3'

这是一个老话题,但另一种解决方案是:

check('Option 3', allow_label_click: true)

选择复选框

  check 'name_of_checkbox'

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

关于这个 博客文章,

check 'checkbox[name]', allow_label_click: true

如果您的标签中有一个链接,如“我同意 条款及细则”,上面的代码将打开页面,这不是你想要的。

不如这样。

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

我认为这看起来更优雅:

find_by_id("cityID").set(true)

在 Rails7上测试,运行良好。