Selenium XPATH我在列中有一个复选框列表。我想选中第2行

时间:2015-10-09 14:01:46

标签: css selenium xpath selenium-webdriver

我在列中有一个复选框列表。我想从第2行选择复选框。我尝试了以下XPATH,但它选择了所有的checbox。

//table[@id="match_configuration_add_possible_tab_match_rules_tb_match_rules"]//input[@type = "checkbox"]

HTML是:

    <table id="match_configuration_add_possible_tab_match_rules_tb_match_rules" class="GOFU2OVJE border" cellspacing="0" __gwtcellbasedwidgetimpldispatchingfocus="true" __gwtcellbasedwidgetimpldispatchingblur="true">
<thead aria-hidden="false">
    <tr __gwt_header_row="0">
    <th class="GOFU2OVID GOFU2OVGD" __gwt_header="header-gwt-uid-311" __gwt_column="column-gwt-uid-310" colspan="1">
    <span style="">
        <input type="checkbox"/>
    </span>
    </th>
    <th class="GOFU2OVID GOFU2OVAE" __gwt_header="header-gwt-uid-313" __gwt_column="column-gwt-uid-312" colspan="1">Name</th>
    </tr>
</thead>
<colgroup>
<tbody style="">
    <tr class="GOFU2OVCD GOFU2OVMD" __gwt_subrow="0" __gwt_row="0">
    <td class="GOFU2OVBD GOFU2OVDD GOFU2OVED GOFU2OVND">
        <div __gwt_cell="cell-gwt-uid-299" style="outline-style:none;">
            <input type="checkbox" tabindex="-1"/>
        </div>
    </td>
    <td class="GOFU2OVBD GOFU2OVDD GOFU2OVOD GOFU2OVLD GOFU2OVND">
        <div __gwt_cell="cell-gwt-uid-300" style="outline-style:none;">
            <input id="" class="" type="text" style="color: blue;" value=""/>
        </div>
    </td>
    </tr>
        <tr class="GOFU2OVCE GOFU2OVJD" __gwt_subrow="0" __gwt_row="1">
    <td class="GOFU2OVBD GOFU2OVDE GOFU2OVED GOFU2OVKD">
        <div __gwt_cell="cell-gwt-uid-299" style="outline-style:none;">
            <input type="checkbox" tabindex="-1"/>
        </div>
    </td>
    <td class="GOFU2OVBD GOFU2OVDE GOFU2OVOD GOFU2OVKD">
    </tr>
</tbody>
<tbody style="display: none;">
<tfoot style="display: none;" aria-hidden="true"/>
</table>

我想选中具有cell-gwt-uid-299的复选框 我不能在XPATH中使用UID-299,因为这个值是动态的。访问该页面时,该号码会发生变化。

我还尝试使用祖先的以下XPATH:

//table[@id="match_configuration_add_possible_tab_match_rules_tb_match_rules"]/ancestor::tr[1]//input[@type = "checkbox"]

我试过使用前面的。在“开发人员工具”窗口中,正在突出显示一个复选框,但它来自另一个表:

//table[@id="match_configuration_add_possible_tab_match_rules_tb_match_rules"]/preceding::tr[1]//input[@type = "checkbox"]
使用前面的奇怪的是尝试从不同的表中选择一个复选框。以下是使用前面的开发工具中突出显示的HTML:

    <table id="data_configuration_feeds_ct_fields_body" cellspacing="0" style="table-layout: fixed; width: 100%;">
    <colgroup>
    <tbody>
        <tr class="GOFU2OVFG" __gwt_subrow="0" __gwt_row="0">
        <tr class="GOFU2OVEH" __gwt_subrow="0" __gwt_row="1">
        <tr class="GOFU2OVFG" __gwt_subrow="0" __gwt_row="2">
        <td class="GOFU2OVEG GOFU2OVGG GOFU2OVHG">
            <div __gwt_cell="cell-gwt-uid-111" style="outline-style:none;">
                <input type="checkbox" tabindex="-1"/>
            </div>
        </td>

我可以使用什么XPATH?

1 个答案:

答案 0 :(得分:2)

以下是如何从第二行获取复选框:

//table[@id='match_configuration_add_possible_tab_match_rules_tb_match_rules']//tbody/tr[2]//input[@type='checkbox']

关于&#34;前面的&#34;和&#34;祖先&#34;:

这是因为您搜索的复选框是 AFTER (在)table-element中。但使用&#34;前面&#34;就像你一样,你正在搜索一个复选框 BEFORE 你的表格元素(在HTML代码中)。 类似于&#34;祖先&#34;。你正在寻找一个元素&#34;上面&#34;你的表元素是tr。除非您的表是另一个表的一部分,否则将导致没有拟合元素。相反,你可以使用&#34;后代&#34;,它将搜索&#34; WITHIN&#34;你的元素。