我通常使用的获取复选框的方法在这里似乎不起作用...基本上,我有一个包含一些数据的表,但是第一个td
是一个复选框。我想做的是单击该复选框,但是我没有做任何事情,它似乎没有出现在屏幕上,或者至少它不可单击。我尝试将xpath与td[1]
,td[1]/input
,td[1]/input[@data-role="checkbox"]
和许多其他排列一起使用,但是没有运气...我正在使用SitePrism,并且已经在行内,因此我应该能够正确使用这些元素。例如,将td[2]
与.text
一起使用给我Foo
没问题……但这几乎就像复选框不存在一样。
另外,如果我尝试执行all('input').size
或all('label').size
,则会得到0,这表示尽管显示在页面上并已通过chrome开发工具进行了检查,但它们仍未呈现。
<tr data-uid="123" role="row" class="state-selected" tabindex="1008">
<td aria-describedby="75e50a2e-9354-43aa-90af-231170f41b4f" role="gridcell">
<input class="k-checkbox" data-role="checkbox" id="3a3d214a-9e48-4c3e-869d-9821b42ded19" aria-label="Select row" aria-checked="false" type="checkbox" tabindex="-1">
<label for="3a3d214a-9e48-4c3e-869d-9821b42ded19" class="k-checkbox-label k-no-text">​</label>
</td>
<td class="gridDataString" tabindex="-1" aria-describedby="6e767f1c-78a3-4988-9633-17bcab112766" role="gridcell">
<span>Foo</span>
</td>
<td class="gridDataString" tabindex="-1" aria-describedby="2f654308-1ddb-4f54-a3bf-2d6c36980378" role="gridcell">
<span>Bar</span>
</td>
<td class="gridDataString" tabindex="-1" aria-describedby="3ae4ac0a-e16d-4892-b8ad-a821adeb55ee" role="gridcell">
<span></span>
</td>
<td class="gridDataString" tabindex="-1" aria-describedby="f443994b-3e0f-4e8e-a658-f5efe839bb5e" role="gridcell">
<span>Foo Barrr</span></td>
<td class="gridDataString" tabindex="-1" style="display:none" aria-describedby="0f49ae1e-765e-4f99-83b1-46aa3067ac5f" role="gridcell">
<span ng-bind="dataItem.modelId">0x0000000000004701,0x00000000000811f9,</span>
</td>
</tr>
答案 0 :(得分:1)
我猜测实际的复选框元素在页面上不可见,并且出于样式原因已通过CSS隐藏以替换为图像。检查display: none
,opacity: 0
等应用于实际复选框元素的样式。
要对此进行处理,您可以单击与复选框关联的标签元素,或者将allow_label_click
元素传递给check
,以使当实际的复选框不可单击时,它单击关联的标签。如果没有可见的关联标签元素,则另一个可能的选择是单击td
元素-这将触发td
中间的点击,实际上应该点击复选框替换。假设您已经具有row元素(tr
),则可以使用以下其中一种方法
tr.check(class: 'k-checkbox', allow_label_click: true)
tr.find('label.k-checkbox-label').click
不是很容易理解,但在某些情况下可能有用/有必要
tr.find('td:first-child').click