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])

しかし、次のように2番目を選択することはできません:

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

106 / 107 id の使用を避けて、2 番目のチェックボックスを選択するにはどうすればよいですか (これは繰り返しテストに使用されています)。

4

3 に答える 3

4

使用():

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

正直なところ、最初2番目のXPathで両方のチェックボックスが選択されています。

于 2012-12-05T04:42:49.993 に答える
4

これは XPath に関する最もよくある FAQ の 1 つです

注意: 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

ID がなく、n 番目の位置/順序ではなく値に基づいて識別したい場合:

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