1. 絕對定位:
此方法最爲簡單,具體格式爲
xxx.find_element_by_xpath("絕對路徑")
具體例子:
xxx.find_element_by_xpath("/html/body/div[x]/form/input") x 表明第x個 div標籤,注意,索引從1開始而不是0
此方法缺點顯而易見,當頁面元素位置發生改變時,都須要修改,所以,並不推薦使用。
2.相對路徑:
相對路徑,以‘//’開頭,具體格式爲
xxx.find_element_by_xpath("//標籤")
具體例子:
xxx.find_element_by_xpath("//input[x]") 定位第x個input標籤,[x]能夠省略,默認爲第一個
相對路徑的長度和開始位置並不受限制,也能夠採起如下方法
xxx.find_element_by_xpath("//div[x]/form[x]/input[x]"), [x]依然是能夠省略的
("//*[@id='J_login_form']/dl/dt/input[@id='J_password']"
3.標籤屬性定位:
3.1標籤屬性定位,相對比較簡單,也要求屬性可以定位到惟一一個元素,若是存在多個相同條件的標籤,默認只是第一個,具體格式
xxx.find_element_by_xpath("//標籤[@屬性==‘屬性值’]")
屬性判斷條件:最多見爲id,name,class等等,目前屬性的類別沒有特殊限制,只要可以惟一標識一個元素都是能夠的
具體例子
xxx.find_element_by_xpath("//a[@href='/industryMall/hall/industryIndex.ht']")
xxx.find_element_by_xpath("//input[@value='肯定']")
xxx.find_element_by_xpath("//div[@class = 'submit']/input")
當某個屬性不足以惟一區別某一個元素時,也能夠採起多個條件組合的方式,具體例子
xxx..find_element_by_xpath("//input[@type='name' and @name='kw1']")
3.2 當標籤屬性不多,不足以惟一區別元素時,可是標籤中間中間存在惟一的文本值,也能夠定位,其具體格式
xxx.find_element_by_xpath("//標籤[contains(text(),'文本值')]")
具體例子:
xxx.find_element_by_xpath("//iunpt[contains(text(),'型號:')]")
注意:儘可能在html中複製此段文本,避免由於肉眼沒法分辨的字符致使定位失敗
3.3 其餘的屬性值若是太長,也能夠採起模糊方法定位,直接上示例
xxx.find_element_by_xpath(「//a[contains(@href, ‘logout’)]」)
3.4 XPath 關於網頁中的動態屬性的定位,例如,ASP.NET應用程序中動態生成id屬性值,能夠有如下四種方法:
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屬性值
固然,若是上面的單一方法不能完成定位,也能夠採起組合式定位 相似("//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3])
以上是普通的狀況,存在能夠定位的屬性,當某個元素的各個屬性及其組合都不足以定位時,咱們能夠利用其兄弟節點或者父節點等各類能夠定位的元素進行定位,先看看xpath中支持的方法:
一、child 選取當前節點的全部子元素
二、parent 選取當前節點的父節點
三、descendant選取當前節點的全部後代元素(子、孫等)
四、ancestor 選取當前節點的全部先輩(父、祖父等)
五、descendant-or-self選取當前節點的全部後代元素(子、孫等)以及當前節點自己
六、ancestor-or-self 選取當前節點的全部先輩(父、祖父等)以及當前節點自己
七、preceding-sibling選取當前節點以前的全部同級節點
八、following-sibling選取當前節點以後的全部同級節點
九、preceding 選取文檔中當前節點的開始標籤以前的全部節點
十、following 選取文檔中當前節點的結束標籤以後的全部節點
十一、self 選取當前節點
十二、attribute 選取當前節點的全部屬性
1三、namespace選取當前節點的全部命名空間節點
上圖實例,須要點擊訂單號爲17051915200001的發貨按鈕,這時候不能直接定位到發貨按鈕,而是先要定位到訂單號元素,再定位他的兄弟節點。參照上圖,咱們首先定位到td標籤中包含訂單號的td元素,而後選擇其以後的同級節點,following-sibling,咱們要找的元素在後面的第8個td標籤下,所以定位能夠寫名爲下面的格式
Xxx.find_element_by_xpath("//td[contains(text(),’17051915200001’)]/following-sibling::td[8]/a[@class='link']")
preceding-sibling 狀況相似,可是全部元素的排列順序是相反的(和following-sibling相反),如圖:
---------------------
原文:https://blog.csdn.net/huiseqiutian/article/details/73739707