為Web元素創(chuàng)建最終XPath的20種最佳方法

原文地址:

https://www.softwaretestinghelp.com/xpath-writing-cheat-sheet-tutorial-examples/

作者:桃子


Web應(yīng)用程序由不同類型的Web元素組成,例如用于單擊按鈕Web元素,輸入以鍵入文本的Web元素,下拉列表专肪,單選按鈕等拇厢。


這些Web元素也稱為標(biāo)記或節(jié)點椭岩。


在自動化Web應(yīng)用程序時竟趾,首先要編寫一個自動化腳本冯事,該腳本將找到Web元素宿接,對其執(zhí)行操作赘淮,例如,單擊按鈕睦霎,在輸入框中輸入文本梢卸,選擇復(fù)選框,選擇單選按鈕副女,向上或向下滾動蛤高,最后驗證操作的預(yù)期行為


找到一個元素就像在地圖上找到某人的房子一樣。我們在沒有任何外部幫助的情況下找到朋友家的唯一方法就是我們應(yīng)該有一張地圖并知道要找什么(房子)碑幅。


在我們的案例中戴陡,地圖就好像DOM(HTML標(biāo)簽,JavaScript等)沟涨,其中存在所有Web元素恤批,以及我們想要查找的特定Web元素都在地圖里


找到元素的唯一地址或路徑后,自動化腳本將根據(jù)測試場景對其執(zhí)行某些操作裹赴。例如喜庞,您要驗證單擊按鈕后打開的頁面的URL地址是否正確


但是,找到Web元素的唯一地址/路徑并不能成功驗證棋返,因為可能存在類似的標(biāo)記延都,相同的屬性值,相同的路徑睛竣,因為很難為稱為“XPATH”的Web元素創(chuàng)建精確的唯一地址晰房。


在這里,我們將深入探討一些非常有效的技術(shù)射沟,為任何類型的Web元素生成有效且獨特的XPATH


有時您可以使用瀏覽器擴(kuò)展輕松創(chuàng)建XPath嫉你,但在我的自動化測試職業(yè)生涯中,我遇到了無數(shù)傳統(tǒng)瀏覽器擴(kuò)展無法工作的情況躏惋,您必須使用自己的創(chuàng)造力來提出自己的自定義XPath。我確信你已經(jīng)或?qū)⒚媾R類似的情況嚷辅。


在本教程中簿姨,我們將介紹如何為Web元素創(chuàng)建最終XPath的20種最佳方法,即使代碼更改后,XPath將始終保持有效(除非開發(fā)人員重寫整個特征/模塊)扁位。


通過了解所有這些技術(shù)准潭,您將成為編寫自己的XPath的大師,并且能夠編寫殺手級XPath域仇,幾乎沒有機(jī)會變得無效刑然。

首先,讓我們首先理解XPath語法并定義其每個部分


XPath的外觀以及每個部分的描述

//選擇當(dāng)前節(jié)點暇务,例如input泼掠,div等。

標(biāo)記名:Web元素/節(jié)點的標(biāo)記名

@選擇屬性

屬性:節(jié)點/特定Web元素的屬性名稱

值:屬性的值


在這里分享一些技巧垦细,80%的時間我的自動化測試腳本因XPath而失敗择镇。這是由于提供的XPath或XPath有多個Web元素?zé)o效或頁面尚未加載。


因此括改,只要您的測試用例失斈逋恪:

復(fù)制你的XPath。

在DOM中的瀏覽器(F12或開發(fā)人員工具窗口)中搜索它以驗證它是否有效(參見下圖)嘱能。


專業(yè)提示1確保路徑是唯一的吝梅,在DOM中搜索兩次時,不會出現(xiàn)其他網(wǎng)絡(luò)元素惹骂。

專業(yè)提示2有時會出現(xiàn)計時問題苏携,這意味著在腳本查找時您的網(wǎng)頁元素/頁面尚未加載,因此會增加一些等待時間并重新測試析苫。

專業(yè)提示3可以在搜索Web元素之前打印整個DOM兜叨,這樣,可以通過查看控制臺來判斷您的Web元素是否存在于DOM中衩侥。


在我們深入研究XPath之前国旷,,如果您可以直接訪問開發(fā)團(tuán)隊茫死,或者您的團(tuán)隊位于您所在的位置跪但,那么請您的開發(fā)團(tuán)隊為您提供唯一的ID每個web元素或至少是您要用于Automation的元素,這將節(jié)省您的大量時間峦萎。

如果這種可能性無法實現(xiàn)屡久,那么您可能需要使用您的創(chuàng)造力并提出自己的定制XPath,這就是我們現(xiàn)在要學(xué)習(xí)的內(nèi)容爱榔。




#1)反向查找

假設(shè)你想點擊一個按鈕被环,就會有一個類似的按鈕。兩個按鈕都具有id屬性详幽,但它們是動態(tài)的筛欢,并且兩個按鈕元素中的屬性都不是唯一的浸锨。

在下面的場景中,我們要點擊“Test Interactive”“Setting”按鈕版姑。

如果查看“設(shè)置”按鈕柱搜,則兩個代碼都相似。通過使用傳統(tǒng)方式剥险,例如id聪蘸,name,value表制,contains等健爬,它們都不會起作用。

// * [contains(text()夫凸,'Setting')]浑劳,這將產(chǎn)生兩個web元素。因此它并不是唯一的夭拌。

所以這是最終戰(zhàn)略魔熏,

>>首先,找到最接近的唯一標(biāo)簽鸽扁,在這種情況下蒜绽,它是<widget id ='rcTest'.........>

>>其次,找到最接近預(yù)期的Web元素的Web元素桶现,在本例中包含(text()躲雅,'TEST Interactive')。現(xiàn)在我們在<DIV>中存在'Setting'按鈕但是要點擊它骡和,我們首先需要使用雙點轉(zhuǎn)到主<DIV>相赁,如下所示。

>>如您所見慰于,我們處于<DIV>級別钮科,其中第二個Web元素為“設(shè)置”按鈕。這個<DIV>有兩個按鈕婆赠,我們想要轉(zhuǎn)到第二個按鈕绵脯,即“設(shè)置”按鈕。通過在末尾添加'/ button [2]'休里,我們可以為“設(shè)置”按鈕獲取我們獨特的XPATH蛆挫,如下所示



最終XPATH

如果您認(rèn)為他們可能會將Web元素類型從“按鈕”更改為其他內(nèi)容,那么這是另一種生成方式妙黍。


“// * [@ id ='rcTEST'] // * [contains(text()悴侵,'TEST Interactive')] /..//* [contains(text(),'Setting')]”


或使用“跟隨兄弟”




#2)使用變量和自定義值

假設(shè)有一個Web應(yīng)用程序具有上傳/下載文件的FTP(“文件傳輸協(xié)議”)功能拭嫁,您可以通過單擊下載鏈接下載特定文件的測試用例可免。

首先筒繁,我們可以將我們要查找的文件名定義為變量。

String expectedfileName =“Test1”;


現(xiàn)在使用XPATH我們可以找到實際的文件名

在上面的XPath中巴元,...'/ tr / td [1] .getAttribute(“title”)'將轉(zhuǎn)到特定的行和第一列,并獲取title屬性的值驮宴。我們可以將實際文件名存儲到另一個變量中逮刨。

一旦我們同時擁有預(yù)期文件名和實際文件名,我們就可以比較兩者堵泽,如果兩者都匹配,我們只需單擊其下載鏈接即可



我們還可以在每行中創(chuàng)建一個循環(huán)并繼續(xù)驗證文件名,直到找到它為止彪笼。



#3)使用“XML”標(biāo)簽句伶,“AND”等

我們可以使用自定義標(biāo)簽生成唯一的XPATH并添加其他條件。

例如纹安,假設(shè)我們的主要Web元素存在于主<address>標(biāo)記中尤辱,并且有多個地址標(biāo)記,但您只想查找特定的地址標(biāo)記厢岂。所有地址標(biāo)簽都有一個類屬性光督,因此我們可以從中開始。



#4)使用屬性和表XPATH

假設(shè)我們想要鍵入放置在表中的Web元素塔粒,并將表放在表單元素中结借。

我們可以在DOM中找到名為“myForm”的所有表單。



#5)使用屬性卒茬,表和文本

假設(shè)您的Web元素位于Panel Table中船老,并且有一些常用文本。

首先從具有唯一屬性的面板開始圃酵,在這種情況下是'TITLE'柳畔。

#6)使用嵌套屬性生成XPATH

也可以使用嵌套屬性生成目標(biāo)Web元素的XPath。例如辜昵,在這種情況下荸镊,它將在DOM中查找特定屬性,然后在其中查找另一個屬性堪置。


#7)通過組合屬性躬存,分區(qū)和按鈕生成XPath

例如,在下面的XPath中舀锨,我能夠通過使用id(相對XPath)岭洲,一些div標(biāo)簽和一個按鈕來找到目標(biāo)web元素。


#8)XPATH使用CONTAINS坎匿,REVERSE LOOKUP等生成

一旦我有一個沒有直接識別的下拉菜單盾剩。我不得不使用CONTAINS雷激,REVERSE,DIVs屬性來提出最終的XPATH告私,如下所示屎暇。


#9)使用Relative,CONTAINS驻粟,REVERSE根悼,F(xiàn)OLLOWING SIBLING等生成XPath。

我遇到了應(yīng)用程序顯示圖形的情況蜀撑,每個圖形值都必須經(jīng)過驗證挤巡。但是,遺憾的是酷麦,每個值都沒有任何唯一標(biāo)識矿卑,因此我提出了最終的XPATH,如下圖所示沃饶,其中包含一個圖形值母廷,它結(jié)合了相對,包含绍坝,反向徘意,跟隨兄弟和div標(biāo)記


#10)使用Attributes,Contains轩褐,Reverse椎咧,Preceding-Sibling,Divs和Span生成XPath


#11)使用屬性把介,XML標(biāo)簽等勤讽。

在下面的XPATH,屬性和XML標(biāo)記中拗踢,序列用于提供Web元素的最終唯一地址脚牍。


#12)通過不查看整個頁面而是查看所有鏈接并包含而生成XPath

下面的XPath將僅查找整個頁面中包含“參數(shù)數(shù)據(jù)手動輸入”文本的鏈接。


#13)使用包含和屬性

#14)使用屬性巢墅,遵循兄弟姐妹和后代

#15)使用屬性诸狭,遵循兄弟,后代和文本

#16)使用標(biāo)題和文本

如果web元素是包含某些特定文本的標(biāo)題君纫,則XPath可能如下所示:


結(jié)論

在編寫殺手級XPATH時驯遇,它實際上取決于您對代碼的理解和分析。您對代碼的理解越多蓄髓,您在編寫有效XPATH時可以找到的方式就越多叉庐。

編寫XPath的第一步是找到與您的目標(biāo)Web元素最接近的唯一Web元素,并使用上面討論的不同技術(shù)(如屬性会喝,DIV陡叠,跟隨玩郊,包含等)保持接近。

最后枉阵,我們再次這樣說译红,如果您要求開發(fā)團(tuán)隊在您感興趣的所有Web元素中添加唯一ID,那么它將真正讓您的生活更輕松兴溜。

每當(dāng)sprint周期或新需求開始工作并且團(tuán)隊與新模型共享時临庇,我總是會經(jīng)歷所有模擬并考慮潛在的自動化測試案例,準(zhǔn)備一份將使用的所有潛在Web元素的列表在自動化測試和準(zhǔn)備我自己的ID昵慌。

一旦完成了所有Web元素的列表以及我建議的ID,我將事先將其分享給開發(fā)人員以用于開發(fā)代碼淮蜈。通過這種方式斋攀,我可以通過簡化XPATH編寫戰(zhàn)斗來獲得唯一的ID。



下面是編寫XPATH的不同方法的組合列表:



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梧田,一起剝皮案震驚了整個濱河市淳蔼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裁眯,老刑警劉巖鹉梨,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異穿稳,居然都是意外死亡存皂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門逢艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旦袋,“玉大人,你說我怎么就攤上這事它改“淘校” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵央拖,是天一觀的道長祭阀。 經(jīng)常有香客問我,道長鲜戒,這世上最難降的妖魔是什么专控? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮袍啡,結(jié)果婚禮上踩官,老公的妹妹穿的比我還像新娘。我一直安慰自己境输,他們只是感情好蔗牡,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布颖系。 她就那樣靜靜地躺著,像睡著了一般辩越。 火紅的嫁衣襯著肌膚如雪嘁扼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天黔攒,我揣著相機(jī)與錄音趁啸,去河邊找鬼。 笑死督惰,一個胖子當(dāng)著我的面吹牛不傅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赏胚,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼访娶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了觉阅?” 一聲冷哼從身側(cè)響起崖疤,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎典勇,沒想到半個月后劫哼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡割笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年权烧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伤溉。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡豪嚎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谈火,到底是詐尸還是另有隱情侈询,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布糯耍,位于F島的核電站扔字,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏温技。R本人自食惡果不足惜革为,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舵鳞。 院中可真熱鬧震檩,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迂猴,卻和暖如春慕淡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沸毁。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工峰髓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人息尺。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓携兵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搂誉。 傳聞我的和親對象是個殘疾皇子眉孩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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

  • HTML 5 HTML5概述 因特網(wǎng)上的信息是以網(wǎng)頁的形式展示給用戶的,因此網(wǎng)頁是網(wǎng)絡(luò)信息傳遞的載體勒葱。網(wǎng)頁文件是用...
    阿啊阿吖丁閱讀 3,887評論 0 0
  • 在使用selenium webdriver進(jìn)行元素定位時,通常使用findElement或findElements...
    不勤奮閱讀 1,577評論 1 3
  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎(chǔ) 第4章 從Scrapy到移動應(yīng)用第5...
    SeanCheney閱讀 11,148評論 5 67
  • 今天聽時間管理第48講-風(fēng)靡全球的人生導(dǎo)航系統(tǒng)巴柿,要點如下: 在全中國各地講課的近4年時間里凛虽,在擁有了大量學(xué)員后,在...
    晨first閱讀 146評論 0 1
  • 20190524第二天广恢,上午釋放自己一生對自己的不滿各種凯旋,剛開始自己是沒感覺的,總是進(jìn)入不了狀態(tài)钉迷,后面強(qiáng)迫自己哭至非,...
    書坊閱讀 85評論 0 0