Selenium中被誤用的XPath

2021-08-26 21:46:19 字數 1389 閱讀 7580

用selenium實現自動化測試的過程中,如果選擇頁面上的元素並且對之進行各種操作,是乙個常見的任務。selenium提供了多種定位方法:

網上很多selenium的介紹文章,在講述如何利用xpath定位元素的時候,通常都是這樣子說的「開啟firefox瀏覽器,安裝firebug外掛程式,然後就能方便地獲得該元素的xpath了」。由於不求甚解,在一段時間內我真以為這些看起來沒什麼意義,中間穿插著各種陣列操作,讀起來******的所謂xpath就是真的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)(」/../」 或者 「ancestor-or-self::book」);2. 可以做布林邏輯判斷,例如/button[@value=』submit』 or @name=』tijiao』]

回到上面的場景,假如說那個苦逼的人想定位到頁面上的乙個提交按鈕,這個按鈕不能通過id或者name來定位。這個時候他要做的事情不是開啟firebug定位提交按鈕右擊滑鼠再點「copy xpath」。而是應該是找開發把id或者name加上。如果不行,解決思路可以是:1. 找到該按鈕的特徵,例如按鈕的文字是 submit;2. 用xpath定位,可以這樣寫://button[@value='submit']。

我個人對使用xpath比較反感的,如果可能的話,盡可能使用id或者name。真的要用xpath,千萬千萬不要開啟firebug定位提交按鈕右擊滑鼠再點「copy xpath」。先認真學習xpath,後使用。在很長一段時間裡面,我對xpath真的是恨之入骨,恨不得先殺之而後快,但是想到存在就是合理,那麼多大牛們都沒有把xpath摒棄與selenium之外,xpath必然有它的價值。最近花了點時間學習了一下xpath,並且讀了一些關於如何在selenium裡面正確使用xpath的文章,豁然開朗。

陣列的誤用

我上次寫了篇文章列舉了我所看到的一些不好的c 教學,並且承諾詳細地解釋這些技術。這篇就是其中的第一篇。我見到有歸因於trenchard more 定義了more array theory 的斷言,說陣列是所有資料結構中最基本的乙個。事實上幾乎沒有哪個在世的程式設計師沒有使用過陣列。如果沒有足夠的證據...

(程式設計基礎)void main的誤用

很多同學喜歡用void main 認為是無返回的main函式,這樣用可能有如下幾種可能 1 為了省事,可以少寫返回值 小弟以前就屬於這種 2 看到krc裡面用main 以為就是void main 主要因為krc的時候還沒有完善的c語言標準,這個用法在c99裡面已經明確禁止了,而且c 之父strous...

Enumeration的錯誤用法

在debug一段含有enumeration物件的 時候,為了看到enumeration物件內的值,在原有迴圈外另外增加了乙個迴圈來輸出,結果增加後發現 有異常出現。經過除錯發現,使用enu.nextelement依次輸出值之後,enu。hasmoreelements變為了false,導致了正常的 沒...