Web UI自動化中XPath的使用


Web UI自動化中XPath的使用

XPath 是XML Path的簡稱缠导,是一門在xml文檔中查找信息的語言朴恳。由于HTML文檔本身就是一個標(biāo)準(zhǔn)的XML頁面窜骄。selenium支持八大定位方式蛾魄,其中xpath是非常強(qiáng)大的元素查找方式餐曹,特別是在以文本方式查找元素逛拱,父級,兄弟級節(jié)點(diǎn)元素查找中台猴。


在Chrome中檢查xpath是否正確

在說xpath使用之前朽合,先說一個在chrome中檢查xpath是否正確的方法

在chrome瀏覽器中,用F12打開devtools

進(jìn)入到Console tab

然后輸入$x("xpath")

當(dāng)xpath正確并在頁面中有符合的元素時饱狂,就會顯示出頁面上的元素曹步,如下圖

檢查xpath是否正確

當(dāng)頁面不包含此xpath的元素,顯示為[]休讳,如下圖

檢查xpath是否正確

當(dāng)寫入的xpath錯誤時讲婚,就報(bào)xpath不正確錯誤

例如如下圖報(bào)錯:“is not a valid XPath expression”

檢查xpath是否正確

$x("path")結(jié)果解析

檢查xpath是否正確

如上圖 xpath為.//a 即查找當(dāng)前頁面所有的a標(biāo)簽

紅箭頭指向個數(shù)14, 說明此頁面檢查出滿足此.//a xpath的元素有14個

? ? ? 點(diǎn)擊前面的三角箭頭,如下圖所示衍腥,顯示出所有的滿足xpath標(biāo)簽的元素磺樱,并且當(dāng)鼠標(biāo)移動到對應(yīng)的結(jié)果后,頁面的元素會有一個藍(lán)色的背景婆咸,說明此時鼠標(biāo)執(zhí)行的元素對應(yīng)頁面上的此元素竹捉。(當(dāng)鼠標(biāo)移動到對應(yīng)元素后,在頁面看不到對應(yīng)的元素的顯示尚骄,說明此時這個元素是在頁面不可見的)

檢查xpath是否正確

雙擊對應(yīng)的元素后块差,會跳轉(zhuǎn)到對應(yīng)的DOM頁面中

在web UI自動化中常用到的Xpath

以文本查找元素

text()

text

例如查找如上圖中span的文本為“發(fā)行申請”的元素

.//span[text()='發(fā)行申請']

text

從截圖結(jié)果看 查找到了兩個span元素,是因?yàn)轫撁嬷羞€有一個span元素的為不可見

注意text()查找元素的時候倔丈,只能查找到當(dāng)前標(biāo)簽中包含了文本信息的控件

例如如上圖憨闰,我們查找div中文本為“發(fā)行申請”的元素

.//div[text()='發(fā)行申請']

text

如上圖所示,可見符合要求的元素為空需五,是因?yàn)闆]有div中文本為發(fā)行申請的標(biāo)簽鹉动,只有span中文本為發(fā)行申請的標(biāo)簽,那么如果我們還是需要找到文本為發(fā)行申請的div呢宏邮?

string()

當(dāng)要查找不是標(biāo)簽中直接文本的控件此時需要用string()函數(shù)

string

如下查找包含文本為首頁發(fā)行申請的div

string
string

查找包含某個文本的控件

contains()

例如查找文本包含“發(fā)行”的label控件

contains

.//label[contains(text(),'市場')]

contains


查找不包含某個文本的控件

not(contains())

例如查找不包含“市場”的label控件

.//label[not(contains(text(),'市場'))]

not contains

去掉文本兩邊的空格和回車

normalize-space()

normalize-space

例如泽示,如上圖要找到button下文字為“新增”的span標(biāo)簽

如果直接用:.//button[text()='新增']這個進(jìn)行查找呢

如下圖所示可以看到查找結(jié)果為空缸血,這是因?yàn)镈OM結(jié)構(gòu)中的新增的末尾帶有空格和回車

normalize-space

.//button//span[normalize-space(text())='新增']

normalize-space

XPath軸

下面例子都以百度首頁為例

xpath


XPath軸的使用

XPath提供了如下的軸對稱節(jié)點(diǎn)

xpath

以下主要從我在UI自動化中經(jīng)常使用到的節(jié)點(diǎn)做一些具體說明

parent - 父級元素

查找“百度熱搜”的父級a標(biāo)簽

parent

ancestor - 祖先元素

查找“百度熱搜”的所有祖先元素

.//div[@aria-label='百度熱搜']//ancestor::*

ancestor

查找“百度熱搜”的class為s-hotsearch-title的祖先級div元素

.//div[@aria-label='百度熱搜']//ancestor::div[@class='s-hotsearch-title']

ancestor

下面的例子以下面DOM結(jié)構(gòu)為例(百度首頁的DOM片段)

DOM

following-sibling - 當(dāng)前元素節(jié)點(diǎn)標(biāo)簽之后的所有兄弟節(jié)點(diǎn)

例如查找id為s-hotsearch-wrapper的向下兄弟textarea節(jié)點(diǎn)

.//div[@id='s-hotsearch-wrapper']//following-sibling::textarea

following-sibling

preceding-sibling - 當(dāng)前元素節(jié)點(diǎn)標(biāo)簽之前的所有兄弟節(jié)點(diǎn)

例如查找id為s-hotsearch-wrapper的向上兄弟form節(jié)點(diǎn)

.//div[@id='s-hotsearch-wrapper']//preceding-sibling::form

preceding-sibling

preceding - 當(dāng)前元素節(jié)點(diǎn)標(biāo)簽之前的所有節(jié)點(diǎn)

例如查找id為s-hotsearch-wrapper的div標(biāo)簽,之前的id為lm-new的標(biāo)簽

preceding

.//div[@id='s-hotsearch-wrapper']//preceding::*[@id='lm-new']

preceding

following - 當(dāng)前元素節(jié)點(diǎn)標(biāo)簽之后的所有節(jié)點(diǎn)?

following

例如查找id為m的標(biāo)簽之后的class為hot-title的標(biāo)簽

.//div[@id='m']//following::*[@class='hot-title']

following

根據(jù)多個條件查找

and - 與條件

and

.//div[@aria-label='百度熱搜' and contains(@class,'title-text')]

and

or - 或條件

or

例如查找class為hot-title 或者class包含title-text的標(biāo)簽

.//*[@class='hot-title' or contains(@class,'title-text')]

or

查找多個控件 - 使用“|”連接

當(dāng)需要一次性查找多個不同xpath的元素時械筛,可以使用"|" 對xpath路徑進(jìn)行相連

連續(xù)

例如查找id為u和id為u1的控件

.//*[@id='u'] | .//*[@id='u1']

連續(xù)

starts-with 查找以XX開頭的元素

starts-with

例如查找class為head開頭的div

.//div[starts-with(@class,'head')]

starts-with

在用Selenium做Web UI自動化時捎泻,對元素的定位是最基礎(chǔ)的需要,在八中定位方式中Xpath是最強(qiáng)大的一種定位方式埋哟,但是有些同學(xué)在使用XPath時笆豁,會直接通過瀏覽器復(fù)制出DOM中的xpath,這個是不可取的,直接復(fù)制出來的xpath穩(wěn)定性不高(當(dāng)開發(fā)只是刪除或新增以個div這個小小的改動赤赊,就需要更改xpath)闯狱,所以在實(shí)際的使用中需要我們寫出穩(wěn)定性相對比較高的XPath. 以上是我在做UI自動化時常用的XPath,所以分享給大家砍鸠,希望可以幫助到大家扩氢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爷辱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朦肘,老刑警劉巖饭弓,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異媒抠,居然都是意外死亡弟断,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門趴生,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阀趴,“玉大人,你說我怎么就攤上這事苍匆×跫保” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵浸踩,是天一觀的道長叔汁。 經(jīng)常有香客問我,道長检碗,這世上最難降的妖魔是什么据块? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮折剃,結(jié)果婚禮上另假,老公的妹妹穿的比我還像新娘。我一直安慰自己怕犁,他們只是感情好边篮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布己莺。 她就那樣靜靜地躺著,像睡著了一般苟耻。 火紅的嫁衣襯著肌膚如雪篇恒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天凶杖,我揣著相機(jī)與錄音胁艰,去河邊找鬼。 笑死智蝠,一個胖子當(dāng)著我的面吹牛腾么,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杈湾,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼解虱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漆撞?” 一聲冷哼從身側(cè)響起殴泰,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浮驳,沒想到半個月后悍汛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡至会,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年离咐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奉件。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宵蛀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县貌,到底是詐尸還是另有隱情术陶,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布窃这,位于F島的核電站瞳别,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杭攻。R本人自食惡果不足惜祟敛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兆解。 院中可真熱鬧馆铁,春花似錦、人聲如沸锅睛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辣垒,卻和暖如春望侈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勋桶。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工脱衙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人例驹。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓捐韩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鹃锈。 傳聞我的和親對象是個殘疾皇子荤胁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

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

  • 為什么會形成跨域? 不是一個源的文件操作另一個源的文件就會形成跨域屎债。當(dāng)請求端的協(xié)議仅政、域名、端口號和服務(wù)器的協(xié)議盆驹、域...
    前端Z老師閱讀 181評論 0 0
  • python 爬蟲: srcrapy框架xpath和scc選擇器語法 Xpath基本語法 一已旧、常用的路徑表達(dá)式: ...
    太陽出來我爬山坡閱讀 1,185評論 0 0
  • Selenium的基本用法以及操作 1、測試對象:網(wǎng)頁Web自動化即通過代碼模擬人工操作的方式來執(zhí)行測試用例 2召娜、...
    努力鉆研測試的小陳閱讀 560評論 0 0
  • 一玖瘸、正則表達(dá)式 1. 提取數(shù)據(jù) 正則表達(dá)式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符檀咙、及這些特定...
    苜蓿a閱讀 343評論 0 0
  • Web抓取 Web站點(diǎn)使用HTML描述雅倒,這意味著每個web頁面是一個結(jié)構(gòu)化的文檔。有時從中 獲取數(shù)據(jù)同時保持它的結(jié)...
    SeanJX閱讀 426評論 0 0