selenium元素定位之xpath定位詳解


 

selenium提供的xpath定位方法名:

driver.find_element_by_xpath(xpath表達式)

xpath定位是將整個HTML看成一個樹形結構。HTML節點為根節點。頁面當中節點與其他節點可以有祖先、父輩、兄弟、后代這樣的關系存在,類似於我們人類的家庭關系。

xpath基本定位語法

 

 

 

 

 

一、絕對定位

特點:1.以單斜杠/開頭;2.從頁面根元素(HTML標簽)開始,嚴格按照元素在HTML頁面中的位置和順序向下查找

如:

driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input")

二、相對定位

特點:1.以雙斜杠//開頭;2.不考慮元素在頁面當中的絕對路徑和位置;3.只考慮是否存在符合表達式的元素即可。

我們一般都使用相對定位來定位元素。下面來介紹下常用的相對定位表達式。

 

2.1使用標簽名+節點屬性定位

語法://標簽名[@屬性名=屬性值]

如:

現在要引用id為“J_password”的input元素,可以像下面這樣寫:

ele_password= driver.find_element_by_xpath("//*[@id='J_login_form']/dl/dt/input[@id='J_password']")

另外一種寫法:

ele_password = driver.find_element_by_xpath("//*[@id='J_login_form']/*/*/input[@id='J_password']")

2.2.組合元素索引(下標)定位

  如:

ele_password = driver.find_element_by_xpath("//*[@id='J_login_form']/*/*/input[2]”)

  

2.3.通過部分屬性值匹配

語法://標簽名[contains(@屬性名,部分屬性值)]、//標簽名[starts-with(@屬性名,部分屬性值)]、//標簽名[ends-with(@屬性名,部分屬性值)]

a.starts-with      例子: //input[starts-with(@id,'ctrl')]              解析:匹配以 ctrl開始的屬性值

b.ends-with        例子://input[ends-with(@id,'_userName')]     解析:匹配以 userName 結尾的屬性值

c.contains()        例子://input[contains(@id,'userName')]         解析:匹配含有 userName 屬性值

如下:

driver.find_element_by_xpath(“//a[contains(@href, ‘logout’)]”)
driver.find_element_by_xpath(“//a[ends-with(@href, ‘logout’)]”)
driver.find_element_by_xpath(“//a[starts-with(text(), ‘退’)]”)

2.4.使用文本內容匹配

函數:text()

語法:文本全部匹配://標簽名[text()=文本內容]

   文本部分匹配-包含://標簽名[contains(text(),部分文本內容)]

示例代碼如下:

driver.find_element_by_xpath("//a[text(),"退出"]")#文本全部匹配
driver.find_element_by_xpath("//a[contains(text(),"出")])#文本部分匹配

2.5、使用軸定位表達式

軸運算名稱:

ancestor:祖先節點,包括父節點

parent:節點

preceding:當前元素節點標簽之的所有節點(HTML頁面之前的)

preceding-sibling:當前元素節點標簽之的所有兄弟節點(同級)

following:當前元素節點標簽之的所有節點

following-sibling:當前元素節點標簽之的所有兄弟節點(同級)

使用語法:軸名稱::節點名稱

前后的定位與之前一致,用/隔開即可。

例如:

//div//table/td/preceding::td/following-sibling::a//[contains(text(),"課程”)]
#表示//div//table/td/路徑前所有節點中找到節點名稱為td的節點,向下同級下的一個兄弟節點包含文本課程

  

 


免責聲明!

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



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