1. 程式人生 > >Selenium自動化測試之Xpath網頁元素定位

Selenium自動化測試之Xpath網頁元素定位

XPath 是一門在 XML 文件中查詢資訊的語言。XPath 可用來在 XML 文件中對元素和屬性進行遍歷。XPath雖然是被設計用來搜尋XML文件的,不過它也能很好的在HTML文件中工作,並且大部分瀏覽器也支援通過XPath來查詢節點。

xpath的作用就是兩個字“定位”,運用各種方法進行快速準確的定位,推薦兩個非常有用的的firefox工具:firebug和xpath checker。

xpath基礎

最常用的歸納幾點:
1. /(絕對路徑,從根節點選取)
2. //(相對路徑,所有子代節點,不用考慮是否直接子節點)
3. @ 選取屬性
4. “.”選取當前節點
5. “..”選取當前節點的父節點

例項:

  • /bookstore/book[last()-1] 選取屬於 bookstore 子元素的倒數第二個 book 元素

  • /bookstore/book[position()<3] 選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素

  • //title[@lang=’eng’] 選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性

  • xpath=(//input[@value=text])[8] 索引,第8個input的value=text

  • //div[contains(@class,’xxx’)] class包含xxx的div

  • //div[@class=’xxx’ and @type=’xxx’] 用and連線,以2個屬性確定唯一元素,也是可以寫成//span[@name=’xxx’][text()=’xxx’]

xpath拓展

  • following-sibling: 選擇當前節點之後的所有同級節點,那麼沒有加上“sibling”關鍵字的,搜尋的就是之上/之下的所有節點,忽略同級概念,例如:
<div>
<input id="123">
<input>    
</div>

要定位第二個input://input[@id=’123’]/following-sibling::input

  • preceding-sibling: 選取當前節點之前的所有同級節點

  • starts-with: 以某某開頭,例如://input[starts-with(@class,’xxx’)]

  • 絕對路徑 html/body/div/span[2]/input[2] 中間結構變化,就失效

  • 相對路徑 //開始,在整個html source裡找,不管在什麼位置

  • 索引[x] //div/input[2] div下面第二個input

  • 完全匹配 xpath=//*[text()=”Join”]

  • not關鍵字 就是否定的意思
    比如找一個id不為123的input:input[not[id=’123’]]
    又如找一個文字中不包含xxx欄位的span://span[not(contains(text(),’xxx’))]

  • 萬用字元 *
    比如//span[@*=”xxx”]指定位span中任意屬性包含xxx的
    比如//[@=”xxx”]指定位頁面中任意屬性保護xxx的標籤

實戰積累

xpath=((//table[@class="dashboard-data-table"])[2]//td[contains(@style,"#8dd889")]//..//td[1]/a)[1]

xpath=(//a[@class='dijitStretch link'])[contains(@href,".zip&forceView=true")]

#實戰積累# 持續更新中。。。

想要學習CSS Selector進行元素定位的童鞋,請移步: