用Selenium實現(xiàn)自動化測試的過程中,如果選擇頁面上的元素并且對之進行各種操作,是一個常見的任務(wù)。Selenium提供了多種定位方法:
- id:最有效、最方便的方法
- name:跟id類似的
- class name:對某些具有相同類的元素一網(wǎng)打盡的好方法
- link text 和 partial link text: 用在定位超鏈接上比較多
- tag name:與class name有點類似
- css selector:如果你試用jQuery,這個一定是你喜歡的方法
- xpath:。。。 /html/body/div/div[2]/div[2]/div[2]/div[5]/div/p[2]
網(wǎng)上很多Selenium的介紹文章,在講述如何利用XPath定 位元素的時候,通常都是這樣子說的“打開Firefox瀏覽器,安裝Firebug插件,然后就能方便地獲得該元素的XPath了”。由于不求甚解,在一 段時間內(nèi)我真以為這些看起來沒什么意義,中間穿插著各種數(shù)組操作,讀起來反人類反社會的所謂XPath就是真的XPath,同志們大家都被誤導(dǎo)了。
什么是XPath:http://www./TR/xpath/
XPath基礎(chǔ)教程:http://www./xpath/default.asp
XPath在Selenium測試中有好些缺點:1. 性能差,定位元素的性能比起大多數(shù)其他方法要差;2. 不夠健壯,XPath會隨著頁面元素布局的改變而改變;3. 兼容性不好,在不同的瀏覽器下對XPath的實現(xiàn)是不一樣的。如此多的弱點,為什么它還存在于Selenium中呢?Selenium提供了這7個元素定 位的工具,就好像工具箱里面有錘子有老虎鉗有螺絲刀,每個工具都能完成特定的任務(wù),前提是要在正確的前提下,正確地使用。
XPath通常會在如下場景:一個寫自動化測試的人,發(fā)現(xiàn)他想要操作的元素不能通過id, name, link text等比較方便有效的方法來進行定位,苦逼的他沒能說服開發(fā)這個頁面的人把他想要的id加上,他開始用所謂的XPath來定位元素,代碼中充滿了各種 讓人摸不著頭腦的XPath(/html/body/div/div[3]/div[2]/div[4]/p[2]),在我看來這樣的代碼跟錄制出來的腳 本沒有任何區(qū)別。可讀性差,幾乎不能維護。XPath理論上可以這樣使用,但是實際上應(yīng)該避免這樣的使用。
XPath的一些優(yōu)點是大家需要知道的,例如:1. XPath可以通過某個元素找到它的祖先(Ancestors);2. 可以做布爾邏輯判斷,例如/button[@value=’submit’ or @name=’tijiao’]
回到上面的場景,假如說那個苦逼的人想定位到頁面上的一個提交按鈕,這個按鈕不能通過id或者name來定位。這個時候他要做的事情不是打開
Firebug定位提交按鈕右擊鼠標(biāo)再點“Copy XPath”。而是應(yīng)該是找開發(fā)把id或者name加上。如果不行,解決思路可以是:1.
找到該按鈕的特征,例如按鈕的文字是 submit;2. 用XPath定位,可以這樣寫://button[@value='submit']。
我個人對使用XPath比較反感的,如果可能的話,盡可能使用id或者name。真的要用XPath,千萬千萬不要打開Firebug定位提交按鈕右擊鼠標(biāo)再點“Copy XPath”。
先認真學(xué)習(xí)XPath,后使用。在很長一段時間里面,我對XPath真的是恨之入骨,恨不得先殺之而后快,但是想到存在就是合理,那么多大牛們都沒有把
XPath摒棄與Selenium之外,XPath必然有它的價值。最近花了點時間學(xué)習(xí)了一下XPath,并且讀了一些關(guān)于如何在Selenium里面正
確使用XPath的文章,豁然開朗。
參考文章:
- http://www./tutorials/selenium/selenium_xpath.htm
- http://wiki./display/SEL/Help+With+XPath
- http:///questions/5808909/selecting-an-element-with-xpath-and-selenium
- https://community./community/wpm/blog/2009/04/30/test-your-selenium-xpath-easily-with-firebug
- http://automationtricks./2010/09/how-to-use-functions-in-xpath-in.html