我无法使用Geb检查网页上的两个html输入字段类型复选框。
相关字段的html代码如下所示:
<input id="yui-gen136" style="width: 50px;" class="assemble-document" type="checkbox">
(另一个有id =“yui-gen133”)。
起初,我尝试过:$('input[type=checkbox]').click()
但它不起作用......对于我要检查的两个字段。
另一方面,它确实适用于另一个输入字段(此页面上有3个这样的字段),其中html为:<input id="riskCheckbox" value="false" onclick="onCheckBoxClick()" type="checkbox">
阅读了filling inputs and checkboxes上的Geb手册,以及有关Geb here和there的Stack关于复选框的一些讨论,我尝试了这样的导航器:
$("div[id*='assoc_packageItems-cntrl-currentValueDisplay'] input")
它返回了我感兴趣的两个输入对象。然后,我用id's分别访问它们:
("div[id*='assoc_packageItems-cntrl-currentValueDisplay']").find("input[id='yui-gen136']")
和
("div[id*='assoc_packageItems-cntrl-currentValueDisplay']").find("input[id='yui-gen133']")
不幸的是,按照Geb手册和Stack讨论中的建议,应用.value(true)
,.value("true")
或.value('true')
会导致错误:
TypeError: $(...).find(...).value is not a function
这两个字段和任何周围元素都没有Javascript代码。
作为用户,当我勾选这两个框时,我在控制台上收到“未找到元素”的消息。所以我遵循了这条路线,我观察到的唯一一个古怪的事情就是disabled=""
在<input>
字段中弹出一秒钟,当我打开方框时。
因此<input>
字段如下所示:
<input id="yui-gen136" style="width: 50px;" class="assemble-document" type="checkbox" disabled="">
通常情况下,我感兴趣的html标签中没有'visibility'选项。
如何在Geb中处理这种不寻常的复选框?这是“禁用”选项的问题吗?
EDIT 这是周围表单的html部分。问题是,所有这些元素都是随机生成的。
<div id="page_x002e_data-form_x002e_task-edit_x0023_default_assoc_packageItems-cntrl-currentValueDisplay" class="current-values object-finder-list yui-dt form-element-border form-element-background-color">
<div class="yui-dt-mask" style="display: none; padding: 0em 0.5em;"></div>
<table id="yuievtautoid-0" summary="">
<colgroup></colgroup>
<thead></thead>
<tr id="yui-rec128" class="yui-dt-rec yui-dt-first yui-dt-even" style="">
<td class="yui-dt116-col-nodeRef yui-dt-col-nodeRef yui-dt-first" headers="yui-dt116-th-nodeRef " style="width: 50px;"></td>
<td class="yui-dt116-col-metadata yui-dt-col-metadata" headers="yui-dt116-th-metadata "></td>
<td class="yui-dt116-col-update yui-dt-col-update" headers="yui-dt116-th-update "></td>
<td id="yui-gen134" class="yui-dt116-col-download yui-dt-col-download" headers="yui-dt116-th-download "></td>
<td id="yui-gen136" class="yui-dt116-col-check yui-dt-col-check yui-dt-last" headers="yui-dt116-th-check ">
<div id="yui-gen138" class="yui-dt-liner" style="padding: 0em 0.5em;">
<input id="yui-gen137" class="assemble-document" type="checkbox" style="width: 50px;"></input>
</div>
</td>
</tr>
<tr id="yui-rec129" class="yui-dt-rec yui-dt-last yui-dt-odd" style=""></tr>
</tbody>
</table>
答案 0 :(得分:1)
按特定属性值选择时,必须将期望值作为String传递。由于整个CSS选择器也是一个String,因此您应该使用"
作为外部String,'
作为内部属性值。
要选中并取消选中复选框,请使用
$("input[type='checkbox']").click()
要查明当前是否已使用
$("input[type='checkbox']").value()
如果您能够在<input>
或类别周围找到更合适的ID,则应考虑将其包含在CSS选择器中,以避免在网站的其他部分选中复选框。
在您的情况下,由于您有一个id,您可以使用id:
的CSS选择器$("input#yui-gen136").click()
或
$("#yui-gen136").click()
========编辑========
如果站点使用Jquery,您可以打开控制台并查看
上返回的内容$("input[type='checkbox']")
如果您返回了多个元素,则您的选择器可能不够具体。您甚至可以在此方面进行尝试,它只会返回“社区维基”复选框,该复选框在编辑帖子时可见。
$("input[type='checkbox']").click()
在stackoverflow上成功选中此复选框:)
答案 1 :(得分:0)
如果要检查选择器返回的多个复选框,则可以使用Groovy的扩展运算符:
$("div[id*='assoc_packageItems-cntrl-currentValueDisplay'] input")*.value(true)
答案 2 :(得分:0)
感谢您的建议。我终于解决了这个问题。
我错了没有JS。复选框位于加载了AJAX的框架内。复选框被阻止,直到服务器添加变量。必须等待服务器然后执行复选框标记。
现在,一切正常。