如何在Geb中标记复选框类型的html输入字段?

时间:2015-03-17 11:37:50

标签: groovy geb html-input

我无法使用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 herethere的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>

3 个答案:

答案 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的框架内。复选框被阻止,直到服务器添加变量。必须等待服务器然后执行复选框标记。

现在,一切正常。