Xpath:通过父节点的多个属性定位节点

时间:2013-01-02 18:59:50

标签: xpath

以下是代码:

<li class="abc">
    <div class="abc">
         <input type="checkbox">
    </div>

    <div class="xyz">
        <div class="headline">Mongo like candy</div>
    <div>
</li>

<li class="abc">
    <div class="abc">
        <input type="checkbox">
    </div>

    <div class="xyz">
        <div class="headline">Candygram for mongo</div>
    <div>
</li>

Xpath挑战。我想找到包含标题“Mongo like candy”的li的复选框,以便我可以使用Selenium选择它。换句话说,您如何从此处找到复选框:

li//div[@class='abc']//input[@type='checkbox']

但在同一父节点中使用不同的属性对其进行限定:

li//div[@headline][contains(text(),"Mongo like candy")]

3 个答案:

答案 0 :(得分:1)

类似

  

的Li [DIV [@class =&#39; XYZ&#39;] // DIV [@class =&#39;标题&#39;并包含(text(),&#34; Mongo like candy&#34;))]] //输入[@type =&#39;复选框&#39;]

除非我搞砸了括号。 (也就是说,您不仅选择li,还选择正确的li)。

答案 1 :(得分:1)

基本思想是用谓词限定最终路径,即

li[/*predicate here*/]//div[@class='abc']//input[@type='checkbox']

谓词表达了你想要的li的条件:

.//div[@class='headline' and contains(text(), "Mongo like candy")]

将它们放在一起产生:

li[.//div[@class='headline' and contains(text(), "Mongo like candy")]]//div[@class='abc']//input[@type='checkbox']

答案 2 :(得分:0)

即便如此:

//li[1]/div[1]/input[@type='checkbox']

如果页面中引入了更多div标签,则可能会失败。