html
  • xhtml
  • xpath
  • 2010-07-12 147 views 1 likes 
    1

    我试图找出找到最后一个匹配使用last()函数的给定xpath的节点的方法。问题是路径的最后一个元素也有一个指定的约束。从匹配列表中选择最后一个节点

    "//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']" 
    

    如果我使用

    "//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']' and last()]" 
    

    它仍然匹配多个节点。也许其中一个原因是路径中的最后一个div标签包含2个span元素。请帮助我选择与上述路径匹配的最后一个节点。

    感谢和问候,
    Vamyip

    +0

    问得好(+1)。查看我的答案以获得完整的解释和正确的解决方案。 – 2010-07-12 13:43:58

    +0

    我只是有兴趣选择最后一个节点。是一个xpath或css选择器。所以请帮助我与他们中的任何人。谢谢 – vamyip 2010-07-13 05:15:21

    回答

    1

    如果你的XML是XHTML,为什么不使用CSS选择器? 如果我没有记错的话,在选择应该是

    #someId > ul > li > div.class1.class2 > span.someType2 
    
    #someId > ul > li > div.class1.class2 > span.someType2:last 
    

    我使用的HTML页面的XPath过,但是当CSS选择器变得普遍,我发现他们更跨浏览器比XPath的支持。

    +0

    您指定的第一个选择器正常工作,并匹配第一个元素。但是,关键字'last'似乎打破了选择者。这个关键字是否有其他语法?谢谢 – vamyip 2010-07-13 05:03:18

    +0

    我测试过它,它工作。你用什么来运行选择器查询,以及在什么平台/浏览器中? – 2010-07-13 15:51:16

    +0

    我在selenium-rc脚本中使用它。您可以通过添加Firefox的selenium IDE插件来尝试。在使用它之前,你需要参考一个小教程。 http://seleniumhq.org无论如何感谢您的帮助。真的很感激它。 – vamyip 2010-07-14 07:35:13

    1

    使用

    (//div[@id='someId']/ul/li/div[@class='class1 class2 '] 
                /span[@class='someType2 ']) 
                  [last()] 
    

    请注意:周围开始//表达括号。这是一个常见问题。 []绑定强于//,这就是为什么括号用于指示不同的优先级。

    +0

    感谢您的回复。我目前使用硒的Xpath和圆括号打破硒的Xpath。否则,你的答案是完美的,它在xpath查看器以及fire xPath中都能很好地工作。再次感谢 – vamyip 2010-07-13 05:01:07

    +0

    @vamyip:对不起。在这种情况下,您的问题不是XPath问题,必须归类为“selenium-xpath”。 – 2010-07-13 13:04:24

    0

    在硒中,您也可以使用javascript来检索元素。这样的事情呢?

    dom=var list1 = 
        document.getElementById('someId'). 
        getElementsByTagName('li'); 
    var finallist = new Array(); 
    for (var i=0; i<list1.length; i++) { 
        var list2 = list1[i].getElementsByClassName("class1 class2"); 
        for (var j=0; j<list2.length; j++) { 
        var list3 = list2[j].getElementsByClassName("someType2"); 
        for (var k=0; k<list3.length; k++) { 
         finallist.push(list3[k]; 
        } 
        } 
    } 
    finallist.pop() 
    

    http://seleniumhq.org/docs/04_selenese_commands.html#locating-by-dom

    相关问题