3

鉴于此 HTML

<ol>
  <li id="topic_roles_input">
    <fieldset class="choices">
      <input id="topic_roles_none" name="topic[role_ids][]" type="hidden" value="" />
      <ol class="choices-group">
        <li class="choice">
          <label for="topic_role_ids_107">
            <input id="topic_role_ids_107" name="topic[role_ids][]" type="checkbox" value="107" />Language Therapist
          </label>
        </li>
        <li class="choice">
          <label for="topic_role_ids_106">
            <input id="topic_role_ids_106" name="topic[role_ids][]" type="checkbox" value="106" />Speech Therapist
          </label>
        </li>
      </ol>
    </fieldset>
  </li>
</ol>

我可以选择第一个复选框:

xpath=(//li[contains(@id,'topic_roles_input')]//input[@type="checkbox"][1])

但我不能选择第二个:

xpath=(//li[contains(@id,'topic_roles_input')]//input[@type="checkbox"][2])

如何选择第二个复选框,避免使用 106 / 107 id(这用于重复测试)。

4

3 回答 3

4

使用()

(//li[contains(@id,'topic_roles_input')]//input[@type="checkbox"])[2]

老实说,您的一个和第二个XPath 都选中了这两个复选框。

于 2012-12-05T04:42:49.993 回答
4

这是有关 XPath 的最常见问题解答之一

请记住:XPath 运算符[]的优先级(优先级)高于//伪运算符。

与要覆盖默认优先级时一样,解决方案是使用括号:

使用

    (//input[@type='checkbox'])[1]

    (//input[@type='checkbox'])[2]

当然,您也可以使用以下方法获得相同的结果:

    (//li[contains(@id,'topic_roles_input')]//input[@type='checkbox'])[1]

    (//li[contains(@id,'topic_roles_input')]//input[@type='checkbox'])[2]
于 2012-12-05T05:09:15.050 回答
0

If you have no ID and you want to identify it based on the value rather than the nth position/order:

//input[@name='topic[role_ids][]' and @value='107']
于 2014-06-25T11:40:00.873 回答