Pages - Menu

2019年11月8日 星期五

[Xpath]Xpath節點定位方式

前言

前面好幾篇文章一直用到xpath的定位,但都是建立再不斷的嘗試,
要來好好把這些整理一遍了。
等等會用到的有 following,following-sibling,child,parent



正文

下面所有的測試資料都是根據 讀冊生活

1.沒有加上節點之前(Fig. 1)


(Fig. 1)

$x("//div[@id='listView']/div[@class='bookGridByListView']")


2.加上 /following-sibling::*(Fig. 2),

首先 / 中文的意思是:搜尋目前節點底下的節點(只有一層),
再來是 following-sibling::* ,選取當前節點之後的兄弟節點(只會找你這一輩的人e.g. 哥、妹、弟)

$x("//div[@id='listView']/div[@class='bookGridByListView']/following-sibling::*")

(Fig. 2)


3.加上 /following::*  (Fig. 3),

following::*,選取當前節點之後的所有節點(只要是你的親戚通通來),
當然也可以限定只找其中一項,把 * 改標籤,
看是要取得底下的所有ul 或是 li 還是要div 或是a,
(不論你是二伯的堂哥,還是三伯的堂哥,通通來)(Fig. 4)

$x("//div[@id='listView']/div[@class='bookGridByListView']/following::*")

(Fig. 3)

$x("//div[@id='listView']/div[@class='bookGridByListView']/following::li")

(Fig. 4)


4.加上 //following-sibling::*,(Fig. 5)


$x("//div[@id='listView']/div[@class='bookGridByListView']//following-sibling::*")

首先 //中文的意思是 :搜尋目前節點底下的所有節點(不管幾層通通來)
following-sibling的意思跟上面一樣,但配上// 後,就變成不管底下幾層只要是你有兄弟姊妹通通出來,
等等可以跟下面的//following比較,兩個之間差了ul,因為ul只有一個(Fig. 6)

(Fig. 5)

(Fig. 6)


5.加上//following::* ,(Fig. 7)


$x("//div[@id='listView']/div[@class='bookGridByListView']//following::*")

following的意思跟上面一樣,但配上//後,就變成,只要是親戚通通出來。
這邊就看的到ul的元素了。

(Fig. 7)

p.s 4跟5的意思如果不對,還請告知,這部分我想了很久也測了很多次,覺得應該是這樣。


6.加上/child::*,(Fig. 8)


$x("//div[@id='listView']/div[@class='bookGridByListView']/child::*")

child的意思配上 /變成,找下面的兒子們出來(跟following不同的是,child是包含本身)

(Fig. 8)


7.加上//child::*,(Fig. 9)


$x("//div[@id='listView']/div[@class='bookGridByListView']//child::*")

找出所有親戚的兒子 或 孫子 出來

(Fig. 9)


8.加上/parent::*,(Fig. 10)


$x("//div[@id='listView']/div[@class='bookGridByListView']/parent::*")

這個字面上的意思,找出現在節點的父親

(Fig. 10)


9.加上//parent::*,(Fig. 11)


$x("//div[@id='listView']/div[@class='bookGridByListView']//parent::*")

找出所有具有父親身份的人

(Fig. 11)

ref.
Python爬蟲:Xpath語法筆記
Selenium自動化測試之Xpath網頁元素定位
絕對路徑表達式,相對路徑表達式
XPath學習:following-sibling
Python selenium —— 父子、兄弟、相鄰節點定位方式詳解

沒有留言:

張貼留言