用Selenium實現自動化測試的過程中,如果選擇頁面上的元素並且對之進行各種操作,是一個常見的任務。Selenium提供了多種定位方法:
- id:最有效、最方便的方法
- name:跟id類似的
- class name:對某些具有相同類的元素一網打盡的好方法
- 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]
網上很多Selenium的介紹文章,在講述如何利用XPath定位元素的時候,通常都是這樣子說的“打開Firefox瀏覽器,安裝Firebug插件,然後就能方便地獲得該元素的XPath了”。由於不求甚解,在一段時間內我真以爲這些看起來沒什麼意義,中間穿插着各種數組操作,讀起來反人類反社會的所謂XPath就是真的XPath,同志們大家都被誤導了。
XPath在Selenium測試中有好些缺點:1. 性能差,定位元素的性能比起大多數其他方法要差;2. 不夠健壯,XPath會隨着頁面元素佈局的改變而改變;3. 兼容性不好,在不同的瀏覽器下對XPath的實現是不一樣的。如此多的弱點,爲什麼它還存在於Selenium中呢?Selenium提供了這7個元素定位的工具,就好像工具箱裏面有錘子有老虎鉗有螺絲刀,每個工具都能完成特定的任務,前提是要在正確的前提下,正確地使用。
XPath通常會在如下場景:一個寫自動化測試的人,發現他想要操作的元素不能通過id, name, link text等比較方便有效的方法來進行定位,苦逼的他沒能說服開發這個頁面的人把他想要的id加上,他開始用所謂的XPath來定位元素,代碼中充滿了各種讓人摸不着頭腦的XPath(/html/body/div/div[3]/div[2]/div[4]/p[2]),在我看來這樣的代碼跟錄製出來的腳本沒有任何區別。可讀性差,幾乎不能維護。XPath理論上可以這樣使用,但是實際上應該避免這樣的使用。
XPath的一些優點是大家需要知道的,例如:1. XPath可以通過某個元素找到它的祖先(Ancestors);2. 可以做布爾邏輯判斷,例如/button[@value=’submit’ or @name=’tijiao’]
參考文章:
- http://www.theautomatedtester.co.uk/tutorials/selenium/selenium_xpath.htm
- http://wiki.openqa.org/display/SEL/Help+With+XPath
- http://stackoverflow.com/questions/5808909/selecting-an-element-with-xpath-and-selenium
- https://community.neustar.biz/community/wpm/blog/2009/04/30/test-your-selenium-xpath-easily-with-firebug
- http://automationtricks.blogspot.com/2010/09/how-to-use-functions-in-xpath-in.html