一.概述
xpath是一種選擇器,是一種xml路徑語言,在自動化測試過程中能夠準確的定位頁面的元素,可以說xpath
能解決99%的元素定位的問題;
二.xpath常用符號說明
/ 表示絕對路徑,絕對路徑是指從根目錄開始
//表示相對路徑
.表示當前層
..表示上一層
*表示通配符
@表示屬性
[]屬性的判斷條件表達式
三.常用的xpath的寫法
/html/div
/html//div 表示選擇根目錄下的所有的子孫后代節(jié)點中的div節(jié)點,//表示相對路徑
//div 表示選擇所有的div節(jié)點
//div/div 表示選擇所有的div節(jié)點的子節(jié)點中含有div的節(jié)點
//div/div/. 表示選擇//div/div節(jié)點的當前層的節(jié)點,與//div/div的結果相同
//div/div/.. 表示選擇//div/div節(jié)點的上一層節(jié)點,也就是選擇一個div節(jié)點,該div節(jié)點的子節(jié)點有div節(jié)點
//div/div/* ,表示選擇//div/div的所有子節(jié)點,//div/div會有兩個匹配出來的節(jié)點
//div[@id='input'] 表示選擇一個id為’input’的div節(jié)點
//div[@id='input']/input 表示選擇一個id為’input’的div節(jié)點的input子節(jié)點
//table//input[@id='user'] 表示選擇table的子孫后代中id為user的input節(jié)點
//input[@name='identity' and @class='Volvo'] 選擇一個name為identity并且class為Volvo的input節(jié)點
//input[@name='identity' or @class='Volvo'] 選擇一個name為identity,或者class為Volvo的節(jié)點
//input[@name='identity' or @class='Volvo'][1] 選擇第一個name為identity,或者class為Volvo的節(jié)點
//input[@name='identity' or @class='Volvo'][last()] 選擇最后一個name為identity,或者class為Volvo的節(jié)點
四.xpath的幾個常用函數
1.contains()://div[contains(@id,'in')] ,表示選擇id中包含有’in’的div節(jié)點
2.text()://a[text()='baidu']表示文本值
3.last()
4.starts-with()://div[starts-with(@id,'in')] ,表示選擇以’in’開頭的id屬性的div節(jié)點
5.not():表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))],表示匹配出name為identity并且class的值中不包含a的input節(jié)點。
五.xpath的軸的概念
ancestor 選取當前節(jié)點的所有先輩(父,祖父等)
ancestor-or-self 選取當前節(jié)點的所有先輩(父,祖父等)以及當前節(jié)點本身
attribute 選取當前節(jié)點的所有屬性
child 選取當前節(jié)點的所有子元素
descendant 選取當前節(jié)點的所有后代元素(子,孫等)
descendant-or-self 選取當前節(jié)點的所有后代元素(子,孫等)及當前節(jié)點本身
following 選取當前節(jié)點的結束標簽時候的所有節(jié)點
following-sibling 選取當前節(jié)點之后的所有同級節(jié)點
namespace 選取當前節(jié)點的所有命名空間節(jié)點
parent 選取當前節(jié)點的父節(jié)點
preceding 選取當前節(jié)點開始標簽之前的所有節(jié)點
priceding-sibling 選取當前節(jié)點之前的所有同級節(jié)點
self 選取當前節(jié)點
六.xpath軸的用法
//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1] 選擇label的text為Saab的節(jié)點之前的同級節(jié)點中為input節(jié)點的第一個
用xpath軸時應注意的幾個問題:
1.調用軸時最好用'/';
2.軸后面要加上符號"::"
3.“::”后面可以接節(jié)點名稱,也可以接”*”
軸的另一種寫法:
//input[following-sibling::label[1][text()=‘Saab’]], 這個的作用與//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1]的作用是一樣的!