寫在之前,每次自己通過xpath定位的時候,在網上找的不是很全,所以想自己寫一個相對比較全的,方便查閱;如果寫的不好或者不足的,請指正,謝謝!
xpath定位分為絕對路徑和相對路徑
一:絕對路徑
絕對路徑是指目錄下的絕對位置,直接到達目標位置,通常是從盤符開始的路徑,以百度首頁為例,查詢輸入框的定位,xpath=/html/body/div/div/div/div/div/form/span/input或者xpath=/html/body/div[2]/div[2]/div[5]/div/div/form/span/input,根據該位置在HTML底下的層級關系,一層一層找下來,如果遇到div等重復較多,可以數該標簽的順序,以便提高定位的精度

二:相對路徑
相對路徑就是指由這個文件所在的路徑引起的跟其它文件(或文件夾)的路徑關系,如xpath=//div[@class='main-logo'],相比絕對路徑,相對路徑更容易定位到對應的位置且寫法簡單,也不用擔心元素的位置變化而調整定位;
相對路徑定位方式有哪一些:
A.直接定位標簽
//input #//標識定位到某一個標簽,//*則代表所有標簽,//input則定位所有input標簽
B.標簽+屬性匹配
//input[@id='kw'] 或者//input[@type='text'] #由一個標簽+某一個屬性的組合 ,其中@代表匹配屬性名稱,相當於匹配所有的input標簽並匹配屬性id=kw的元素
C.標簽和多個屬性
//input[@id='kw' and @type='text'] #由一個標簽+多個屬性的組合,相當於匹配了所有的input標簽並匹配屬性id=kw且屬性type=text的元素
//input[@id='kw' or @type='text'] #由一個標簽+多個屬性的組合,相當於匹配了所有的input標簽,並匹配屬性id=kw或者屬性type=text的元素
D.父子定位
//form[@id="form"]/input #相當於先定位到了父節點,再找到對應的子節點,常用語當前元素不易定位而父節點較易定位的情況
E.contains
//input[contains(@id,'w')] #相當於匹配了所有的input標簽且id屬性包含字符串"w"的元素 (模糊定位)
//a[contains(text(),'新聞')] #相當於匹配了所有的input標簽且文本包含"新聞" (模糊定位)
F.start-with和ends-with
//input[starts-with(@id,'k')] #相當於匹配了所有的input標簽且屬性id以字母k開頭的元素 (模糊定位)
//input[ends-with(@id,'w')] #相當於匹配了所有的input標簽且屬性id以字母w結尾的元素 (模糊定位)
G.文本定位
//a[text()='新聞'] #精准定位到本文屬性,contains則是模糊定位
H.關系定位方式(通過子節點找父節點、爺節點;兄弟節點或者堂兄弟等等)

1.子節點找父節點
//input[@id="kw"]/.. #相當於我們精確定位到了查詢輸入框,然后找他的父節點,往回走一層(根據層級關系)
//input[@id="kw"]/parent::span
2.兄弟節點
//input[@id="kw"]/../span #相當於找到了父節點再往下找子節點(兄弟節點)
//input[@id="kw"]/following-sibling::a #往下找兄弟節點,也可以寫//input[@id="kw"]/following-sibling::a[1],定位到后面的第幾個a標簽
//input[@id="kw"]/preceding-sibling::span #往上找兄弟節點,也可以寫//input[@id="kw"]/preceding-sibling::span[1],定位到前面的第幾個span標簽
同理可以找到相關的爺爺節點,堂兄弟節點等等
