如何使用红宝石水豚/硒访问复选框

时间:2018-07-16 18:31:27

标签: ruby selenium capybara site-prism

我通常使用的获取复选框的方法在这里似乎不起作用...基本上,我有一个包含一些数据的表,但是第一个td是一个复选框。我想做的是单击该复选框,但是我没有做任何事情,它似乎没有出现在屏幕上,或者至少它不可单击。我尝试将xpath与td[1]td[1]/inputtd[1]/input[@data-role="checkbox"]和许多其他排列一起使用,但是没有运气...我正在使用SitePrism,并且已经在行内,因此我应该能够正确使用这些元素。例如,将td[2].text一起使用给我Foo没问题……但这几乎就像复选框不存在一样。

另外,如果我尝试执行all('input').sizeall('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">&#8203;</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>

1 个答案:

答案 0 :(得分:1)

我猜测实际的复选框元素在页面上不可见,并且出于样式原因已通过CSS隐藏以替换为图像。检查display: noneopacity: 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