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