Selenium自動化測試(三)之xpath元素定位


Selenium自動化測試(三)之xpath元素定位

xpath元素定位

節點(Node)

在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔節點(或稱為根節點)。

選取節點

XPath 使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿着路徑 (path) 或者步 (steps) 來選取的。

謂語(Predicates)

謂語用來查找某個特定的節點或者包含某個指定的值的節點。
謂語被嵌在方括號中。

路徑表達式:

表達式 描述
/ 從根節點選取
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
@ 選取屬性。

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

通配符 描述
* 匹配任何元素節點。
@* 匹配任何屬性節點。

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

//div | //a

在python中使用xpath定位元素:

browser.find_element_by_xpath("//input[@id='kw']")

1、通過id屬性進行定位元素(如果不知道具體的標簽名可以用通配符*代替)
//*[@id='kw']
//input[@id='kw']

//a[@id='quickdelete']
2、通過name屬性進行定位元素
//input[@name='wd']
3、通過class屬性進行定位元素
//input[@class='s_ipt']

//a[@class='quickdelete']
4、通過id和class屬性進行定位元素(多個屬性一起定位的時候用and隔開)
//input[@id='kw' and @class='s_ipt']

//a[@id='quickdelete' and @class='quickdelete']

contains()函數,xpath其他函數

上面這個div中的class中的屬性值為's-skin-hasbg white-logo s-opacity-0',屬性中有空格,這個時候就沒辦法使用[@class='s-skin-hasbg white-logo s-opacity-0'],
這個時候就需要使用xpath中的contains函數進行操作,只需要屬性值中的一部分就可以實現元素定位。

//div[contains(@class,'white-logo')]

text文本定位

text 文本在 web 自動化測試當中,不是元素屬性,
不能使用 @符號去表示。

通過text()進行定位元素
//*[contains(text(),'新')]

索引

  • xpath中索引是以1開始的。
  • 一般來說,我們不會去使用 索引進行元素定位
  • 索引的優先級非常高,手工提升其他部分的優先級,最后才使用索引。
//*[contains(text(),'新')][1]

組合上下級的關系

  • /表示父子關系
  • //表示子孫關系
# 通過父級元素定位到下面的所有的img元素
//div[@id='lg']//img
# 精確到某一個img
//div[@id='lg']//img[@id='s_lg_img']

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

# ancestor--選取當前節點的所有先輩(父、祖父等)。
//div[@class='show-weather']//ancestor::*

# ancestor-or-self--選取當前節點的所有先輩(父、祖父等)以及當前節點本身。
//div[@class='show-weather']//ancestor-or-self::*

# attribute--選取當前節點的所有屬性。
//div[@class='show-weather']//attribute::*

# child--選取當前節點的所有子元素。
//div[@class='show-weather']//child::*

# descendant--選取當前節點的所有后代元素(子、孫等)。
//div[@class='show-weather']//descendant::*

# descendant-or-self--選取當前節點的所有后代元素(子、孫等)以及當前節點本身。
//div[@class='show-weather']//descendant-or-self::*

# following--選取文檔中當前節點的結束標簽之后的所有節點。
//div[@class='show-weather']//following::*

# parent--選取當前節點的父節點。
//div[@class='show-weather']//parent::*

# preceding--選取文檔中當前節點的開始標簽之前的所有節點。
//div[@class='show-weather']//preceding::*

# preceding-sibling--選取當前節點之前的所有同級節點。
//div[@class='show-weather']//preceding-sibling::*

# self--選取當前節點。
//div[@class='show-weather']//self::*

什么時候使用 xpath

沒有明顯特征(id, name, class_name)的元素
name、class_name能找到多個元素

css 和 xpath 的區別

1、css 更加簡潔
2、xpath 的功能更強大。對於簡單的元素定位可以使用css, 復雜的元素使用xpath.
3、xpath 可以使用 text 文本定位, css 不行。
4、效率。通常來說,xpath 的解析效率會低。css 要快一些。

【完】



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM