背景 最近在做UI自動化, UI自動化的元素定位繞不開XPath, 抽空學習了XPath相關知識, 這裡做下學習筆記. XPath簡介 XPath, 全稱 XML Path Language, 即XML路徑語言, 是一門在XML文檔中查找信息的語言. XPath是使用路徑表達式來選去XML文檔中的節 ...
背景
最近在做UI自動化, UI自動化的元素定位繞不開XPath, 抽空學習了XPath相關知識, 這裡做下學習筆記.
XPath簡介
XPath, 全稱 XML Path Language, 即XML路徑語言, 是一門在XML文檔中查找信息的語言.
XPath是使用路徑表達式來選去XML文檔中的節點或者節點集. 節點是通過沿著路徑(path)或者步(steps)來選取的.
XPath語法
路徑表達式:
表達式 | 描述 |
---|---|
nodename | 選取此節點的所有子節點 |
/ | 從當前節點選取直接子節點 |
// | 從匹配選擇的當前節點選擇所有子孫節點 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
@ | 選取屬性 |
謂語(Predicates)
謂語用來查找某個特定的節點或者包含某個指定的值的節點.
謂語被嵌在方括弧中
謂語 | 描述 |
---|---|
n | 第n個元素 |
last() | 最後一個元素 |
last()-n | 倒數第n+1個元素 |
position()<n | 選取前n-1個元素 |
@XXX | 可以嵌套表達式 |
選取未知節點
XPath通配符可以用於選取未知的XML元素.
通配符 | 描述 |
---|---|
* | 匹配任何元素節點 |
@* | 匹配任何屬性節點 |
node() | 匹配任何類型的節點 |
選取若幹路徑
通過在路徑表達式中使用“|”, 可以選取若幹個路徑.
eg:
路徑表達式 | 結果 |
---|---|
//* | 匹配文檔中的所有元素 |
//title[@*] | 匹配所有帶有屬性的title元素 |
//title | //price |
/bookstore/book[price>35.00] | 選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。 |
XPath標準函數
XPath包含有超過100個內建函數. 這些函數用於字元串值、數值、日期和時間比較、節點和QName處理、序列處理、邏輯值等.
函數 | 描述 |
---|---|
contains(@AA, "XXX") | 屬性AA是否包含XXX的元素 |
starts-with(string1,string2) | 如果 string1 以 string2 開始,則返回 true,否則返回 false。 |
ends-with(string1,string2) | 如果 string1 以 string2 結尾,則返回 true,否則返回 false。 |
matches(string,pattern) | 如果 string 參數匹配指定的模式,則返回 true,否則返回 false。 |
其他關鍵信息
1.支持的運算符
and、or、mod、+、-、*、div、=、!=、<、<=、>、>=
2.XPath Axes(軸)
- 軸可定義相對於當前節點的節點集.
- 語法: 軸::節點選擇器
錨點 | 描述 |
---|---|
ancestor::節點選擇器 | 選取當前節點的所有先輩(父、祖父等)。 |
ancestor-or-self | 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。 |
attribute::節點選擇器 | 選取當前節點的所有屬性值 |
child | 選取當前節點的所有直接子元素 |
descendant | 獲取當前節點的所有後代元素(子、孫等) |
following | 獲取當前節點的結束標簽之後的所有節點 |
following-sibling | 可以獲取當前節點之後的所有同級節點 |
namespace | 選取當前節點的所有命名空間節點。 |
preceding | 選取文檔中當前節點的開始標簽之前的所有節點。 |
self | 選取當前節點 |