xpath - 如何找到第二个复选框?

时间:2012-12-05 03:29:41

标签: xml xpath

鉴于此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(这用于重复测试)。

3 个答案:

答案 0 :(得分:4)

使用()

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

老实说,你的1 st 以及2 nd XPath选中这两个复选框。

答案 1 :(得分:3)

这是关于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]

答案 2 :(得分:0)

如果您没有ID,并且您想根据值而不是第n个位置/顺序识别它:

//input[@name='topic[role_ids][]' and @value='107']