html
  • xhtml
  • xpath
  • 2010-07-12 55 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

    相關問題