xpath定位

xpath的作用就是兩個字“定位”,

運用各種方法進行快速準確的定位毁渗,推薦兩個非常有用的的firefox工具:firebug和xpath checker

在 XPath 中杨幼,

有七種類型的節(jié)點:元素粱腻、屬性蓖捶、文本马昨、命名空間把曼、處理指令胡岔、注釋以及文檔(根)節(jié)點

XML 文檔是被作為節(jié)點樹來對待的椿息。樹的根被稱為文檔節(jié)點或者根節(jié)點

節(jié)點關(guān)系

<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>

父節(jié)點:每個元素及屬性都有父節(jié)點歹袁。

子節(jié)點:元素節(jié)點可以有0個或1個或n個子節(jié)點。

同胞節(jié)點:擁有相同父節(jié)點的節(jié)點寝优。

先輩節(jié)點:某個節(jié)點的父節(jié)點条舔,祖父節(jié)點等等。

后代節(jié)點:某個節(jié)點的子節(jié)點乏矾,孫子節(jié)點等等孟抗。

book 元素是 title迁杨、author、year 以及 price 元素的父節(jié)點

title夸浅、author仑最、year 以及 price 元素都是 book 元素的子節(jié)點

title扔役、author帆喇、year 以及 price 元素都是同胞節(jié)點

title 元素的先輩是 book 元素和 bookstore 元素

bookstore 的后代是 book、title亿胸、author坯钦、year 以及 price 元素

bookstore 選取 bookstore 元素的所有子節(jié)點

/bookstore 選取根元素 bookstore

bookstore/book 選取屬于 bookstore 的子元素中的所有 book 元素

bookstore//book 選擇屬于 bookstore 的后代中的所有 book 元素,

而不管它們位于 bookstore 之下的什么位置

//book 選取所有 book 子元素侈玄,而不管它們在文檔中的位置

//@lang 選取名為 lang 的所有屬性

Predicates謂語用來查找某個特定的節(jié)點或者包含某個指定的值的節(jié)點

謂語被嵌在方括號中

/bookstore/book[1] 選取屬于 bookstore 子元素的第一個 book 元素

/bookstore/book[last()] 選取屬于 bookstore 子元素的最后一個 book 元素

/bookstore/book[last()-1] 選取屬于 bookstore 子元素的倒數(shù)第二個 book 元素

/bookstore/book[position()<3] 選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素

//title[@lang] 選取所有擁有名為 lang 的屬性的 title 元素

/bookstore/book[price>35.00] 選取 bookstore 元素的所有 book 元素婉刀,

且其中的 price 元素的值須大于 35.00

/bookstore/* 選取 bookstore 元素的所有子元素

//* 選取文檔中的所有元素

//title[@*] 選取所有帶有屬性的 title 元素

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

//book/title | //book/price 選取 book 元素的所有 title 和 price 子元素節(jié)點

//title | //price 選取文檔中的所有 title 和 price 元素節(jié)點

/bookstore/book/title | //price 選取屬于 bookstore 元素的 book 元素的所有 title 元素序仙,

以及文檔中所有的 price 元素

xpath語法

. 代表當前節(jié)點路徑

..代表當前節(jié)點路徑的父節(jié)點

  • 匹配任何標簽元素節(jié)點

@*匹配人和屬性節(jié)點

node()匹配任何類型的節(jié)點

/ 從根節(jié)點選取

// 從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點突颊,而不考慮它們的位置

@ 選取屬性

定位

1.依靠自己屬性,文本定位

//td[text()='xxx']

//div[contains(@class,'xxx')]

//div[@class='xxx' and @type='xxx']

2.依靠父節(jié)點定位

//div[@class='xxx']/div

//div[@id='xxx']/div

3.依靠子節(jié)點定位

//div[div[@id='xxx']]

//div[div[@name='xxx']]

4.混合型

//div[div[@name='xxx']]/img

//td[a/font[contains(text(),'xxx')]]//input[@type='xxx']


xpath的學習-拓展

1.following-sibling

following-sibling即為“選擇當前節(jié)點之后的所有同級節(jié)點”潘悼,那么沒有加上“sibling”關(guān)鍵字的律秃,搜索的就是之上/之下的所有節(jié)點,忽略同級概念治唤,例如:

<div>

<input id="123">

<input>

</div>

要定位第二個input://input[@id='123']/following-sibling::input

2.preceding-sibling

preceding-sibling的解釋是“選取當前節(jié)點之前的所有同級節(jié)點”棒动,那么沒有加上“sibling”關(guān)鍵字的,搜索的就是之上/之下的所有節(jié)點宾添,忽略同級概念船惨, preceding-sibling和following-sibling是剛好相反的

<div>

<span>text</span>

<input id="123">

</div>

要定位第二個input://input[@id='123']/preceding-sibling::span

3.contains

和字面意思一樣就是包含,例如://div[contains(@class,'xxx')]

4.starts-with

和字面意思一樣就是以某某開頭缕陕,例如://input[starts-with(@class,'xxx')]

5.not

就是否定的意思

比如找一個id不為123的input:input[not[id='123']]

又如找一個文本中不包含xxx字段的span://span[not(contains(text(),'xxx'))]

xpath的學習-補充

絕對路徑 html/body/div/span[2]/input[2] 中間結(jié)構(gòu)變化粱锐,就失效

相對路徑 //開始,在整個html source里找扛邑,不管在什么位置

索引[x] //div/input[2] div下面第二個input

position()=2

position()>3

position()<3

last()

last()-1

屬性定位 //div[@class] 有class屬性的div

屬性值定位卜范, //div[@class='xxx']

功能關(guān)鍵字

1.常用

and或者[][],

比如://span[@name='xxx' and text()='xxx']

也是可以寫成//span[@name='xxx'][text()='xxx']

or鹿榜,比如以上面html為例子海雪,定位文本為test position()5和test position()4的span://div[@id='positions']/span[text()='test position()5' or text()='test position()4']

not,

contains,

starts-with

ends-with 在xpath中是沒有這個的

通配符 *

比如//span[@*="xxx"]指定位span中任意屬性包含xxx的

比如//[@="xxx"]指定位頁面中任意屬性保護xxx的標簽

測試實例

By.xpath(".//a/span[contains(text(),'前端開發(fā)')]")

By.xpath("http://span[@name='username' and text()='用戶名']")

By.xpath("http://div[class='item']/li[3]")

By.xpath("http://*[@id="main"]/div[2]/div/div[9]/div[4]")

[圖片上傳失敗...(image-6bb2e9-1534856975794)]

xpath=/html/body/form[1] -絕對路徑(如果HTML只是稍微改變,會中斷)

//form[1] -HTML中的第一個表單元素

xpath=//form[@id='loginForm'] -屬性名為“id”和值為“l(fā)oginForm”的表單元素

xpath=//form[input/@name='username'] -具有輸入子元素的第一個表單元素舱殿,其屬性名為“name”奥裸,值為“username”

//input[@name='username'] -第一個輸入元素的屬性名為“名稱”和值“用戶名”

//form[@id='loginForm']/input[1] -首先輸入具有名為“id”的屬性和值“l(fā)oginForm”的表單元素的子元素

//input[@name='continue'][@type='button'] -輸入屬性名為'name',值為'continue'沪袭,屬性名為'type'湾宙,值'button'

//form[@id='loginForm']/input[4] -表單元素的第四個輸入子元素樟氢,其屬性名為“id”,值為“l(fā)oginForm”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侠鳄,一起剝皮案震驚了整個濱河市埠啃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伟恶,老刑警劉巖碴开,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異博秫,居然都是意外死亡潦牛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門挡育,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巴碗,“玉大人,你說我怎么就攤上這事即寒∠鹣” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵母赵,是天一觀的道長逸爵。 經(jīng)常有香客問我,道長市咽,這世上最難降的妖魔是什么痊银? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮施绎,結(jié)果婚禮上溯革,老公的妹妹穿的比我還像新娘。我一直安慰自己谷醉,他們只是感情好致稀,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俱尼,像睡著了一般抖单。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遇八,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天矛绘,我揣著相機與錄音,去河邊找鬼刃永。 笑死货矮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的斯够。 我是一名探鬼主播囚玫,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼喧锦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抓督?” 一聲冷哼從身側(cè)響起燃少,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铃在,沒想到半個月后阵具,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡涌穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年怔昨,在試婚紗的時候發(fā)現(xiàn)自己被綠了雀久。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宿稀。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赖捌,靈堂內(nèi)的尸體忽然破棺而出祝沸,到底是詐尸還是另有隱情,我是刑警寧澤越庇,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布罩锐,位于F島的核電站,受9級特大地震影響卤唉,放射性物質(zhì)發(fā)生泄漏涩惑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一桑驱、第九天 我趴在偏房一處隱蔽的房頂上張望竭恬。 院中可真熱鬧,春花似錦熬的、人聲如沸痊硕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岔绸。三九已至,卻和暖如春橡伞,著一層夾襖步出監(jiān)牢的瞬間盒揉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工兑徘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刚盈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓道媚,卻偏偏與公主長得像扁掸,于是被迫代替她去往敵國和親翘县。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容