【发布时间】:2015-03-24 18:51:11
【问题描述】:
我无法使用 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 分别访问它们:
("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 标记内没有“可见性”选项。
应该如何处理 Geb 中这种不寻常的复选框? “禁用”选项有问题吗?
编辑 这是周围表单的 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>
【问题讨论】:
-
您可能需要向我们展示更多的 HTML,因为“yui-gen136”的气味是随机生成的,并且可能是每次渲染时元素 id 都会发生变化。向我们展示更多的 HTML 上下文可能会更容易选择封装标签,然后再选择输入。
-
@BillJames 你是对的,它是随机生成的,但是在第一次尝试时,我只想让它运行并标记复选框。我会尽快添加更多 HTML。
标签: groovy geb html-input