使用xpath查找元素

自學網站:http://www.runoob.com/xpath/xpath-axes.html

在appium中只是使用xpath技術查找元素,其他的不適用

什麼是xpath:XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。

一、選取節點

XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿着路徑或者 step 來選取的。

下面列出了最有用的路徑表達式:

表達式

描述

/

從根節點選取。(絕對路徑)

//

從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。(相對路徑)

.

選取當前節點。(表示當前的)

..

選取當前節點的父節點。(當前目錄或路徑的上一級)

@

選取屬性。

[ ]

索引,從1開始

*

表示所有,不限制元素的類型

實例

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:

路徑表達式

結果

/html

選取根元素 html。

註釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!

html/body

選取屬於 html 的子元素的所有 body 元素。

//div

選取所有 div子元素,而不管它們在文檔中的位置。

//body//div

選擇屬於 body 元素的後代的所有 div 元素,而不管它們位於 body 之下的什麼位置。

//@id

選取有 id 屬性的所有元素。

二、謂語(Predicates)

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中

實例

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:

路徑表達式

結果

/html/body/div[1]

選取屬於 body 子元素的第一個 div 元素。

/html/body/div[last()]

選取屬於 body子元素的最後一個 div元素。

/html/body/div[1]/div[last()-1]

選取屬於 body子元素的第一個div子元素的倒數第二個 div 元素。

/html/body/div[1]/div[position()<3]

選取屬於 body子元素的第一個div子元素的前兩個 div 元素。

Position表示的是一個位置

//a[@id]

選取所有具有id 的屬性的 a 元素。

//a[@id='nav_default']

選取所有 a 元素,且這些元素的id屬性值爲nav_default

//body//div[span>223]

選取 body 元素下的所有 div 元素,且其中的 span 元素的值須大於 223。

//body//div[span>22]/strong

選取 body子元素中的 div元素下的所有 strong元素,且其中的 span元素的值須大於 223。

//div[contains(@class’top’)]

查找class包括top的元素

//*[contains(@class’top’)]

查找包括top的元素,不限制類型

三、選取未知節點

XPath 通配符可用來選取未知的 XML 元素。

通配符

描述

*

匹配任何元素節點。

@*

匹配任何屬性節點。

node()

匹配任何類型的節點。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

//body/*

選取 body 元素的所有子元素。

//*

選取文檔中的所有元素。

//a[@*]

選取所有帶有屬性的 a 元素。

四、選取若干路徑

通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

//li | //ul

選取所有的 li元素和 ul元素。

五、XPath 軸

軸可定義相對於當前節點的節點集。

軸名稱

結果

ancestor

選取當前節點的所有先輩(父、祖父等)。不包自己

ancestor-or-self

選取當前節點的所有先輩(父、祖父等)以及當前節點本身。

attribute

選取當前節點的所有屬性。

child

選取當前節點的所有子元素。

descendant

選取當前節點的所有後代元素(子、孫等)。

descendant-or-self

選取當前節點的所有後代元素(子、孫等)以及當前節點本身。

following

選取文檔中當前節點的結束標籤之後的所有節點。

namespace

選取當前節點的所有命名空間節點。

parent

選取當前節點的父節點。

preceding

選取文檔中當前節點的開始標籤之前的所有節點。

preceding-sibling

選取當前節點之前的所有同級節點。兄弟節點

self

選取當前節點。

實例

例子

結果

//*[@id='course']/child::ul

選取id值爲course的元素的所有ul子元素。

//div/attribute::id

選取具有id屬性的所有div元素

//div[@id='course']/child::*

選取id值爲course的元素的所有子元素。

//div[@id='course']/descendant::li

選取id值爲course的元素的所有後代li元素

//*[@id='nav_default']/ancestor::li

選擇id爲nav_default節點的所有 li 先輩。

.//*[@id='nav_default']/parent::li

選擇id爲nav_default節點的所有 li父元素。

//div[@id='course']/preceding-sibling::*

選擇id爲course元素的之前的所有同級元素,哥哥姐姐們

//div[@id='course']/following-sibling::*

選擇id爲course元素的之後的所有同級元素,弟弟妹妹們

六、自我實用總結

  1.  <html> 標籤相當於uiautomator中的class屬性

Xpath中的根節點是<html>

Uiautomator根節點是class

2、Xpath下查找html下的body元素

Uiautomator中的選擇

/android.widget.FrameLayout/android.widget.LinearLayout

3、查找div標籤

1)絕對路徑:  /html/body/div[2]   或  html/body/div[2]

2)相對路徑:  //body/div[2]

 

4. 查找所有的div標籤

 

5. 查找統計所有的div標籤

 

6. 查找具備id屬性的div的標籤

7、查找id屬性等於global-navbar的div變遷

8、複製帶空格的class屬性,必須加兩個空格

9. 在div標籤中,查找class屬性,class屬性的值包含top的元素

10、查找最後一個div標籤

11、查找倒數第二個div標籤

12、選擇前三個,用position()

13、選擇倒數兩個div

14、選擇body下所有的子元素(不包含body本身),不包含body子元素的子元素

15、查找body下所有的子元素和子元素的子元素

16、查找div標籤或者a標籤——》結果:就是a和div都會被找到

17、通過用戶登錄找到立即註冊,找上級

先找到用戶登錄的上一級標籤,通過上一級標籤找到立即註冊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章