核心實驗:Selenium IDE->測試Agileone的公告管理

實驗簡介

Selenium IDE是Selenium家庭中一個入門級的自動化測試工具,是基於Firefox瀏覽器的一個插件,提供GUI界面來運行Selenium測試。Selenium IDE提供腳本錄製功能,可以將用戶在瀏覽器中執行的操作記錄下來,生成各種形式的腳本,可以將這些腳本保存供以後使用。由於Selenium IDE無法對其生成的腳本進行靈活的處理和控制,所以我們往往無法把Selenium IDE運用在實際項目中。但是通過對Selenium IDE的使用,可以幫助我們很好地完成如下三件事情,所以在Selenium系列工具裡面,也算是一個比較重要的工具:

(1) 提供錄製回放的功能,可以幫助我們快速地進行測試的可行性分析。

(2) 能夠將這些錄製出來的測試腳本導出為Java或Python的自動化測試代碼。

(3) 提供一種很好的基於關鍵字驅動的自動化測試腳本開發的體驗。

(4) 幫助我們對頁面元素進行精確地識別和定位,而不用我們再人為地去獲取元素的識別屬性。

實驗目的

(1) 理解Selenium IDE基於特徵識別的自動化測試原理。

(2) 熟練使用Selenium IDE進行簡單的自動化測試腳本的開發。

(3) 熟練使用Selenium IDE提供的各項功能幫助我們提升效率。

(4) 理解Selenium IDE的優勢與不足,便於在項目中靈活使用。

實驗流程

  1. 在Firefox中安裝Selenium IDE

首先,我們可以去seleniumhq.org/download 網站下載Selenium IDE的Firefox插件,事實上,有關於Selenium常用的組件,都可以在此網站上進行下載。但是訪問國外的網站經常容易出現無法訪問的情況,所以如果無法訪問,則直接百度下載即可。目前最新版本是2.9.1,其插件的文件名通常為:「selenium_ide-2.9.1-fx.xpi」,下載完成後,打開Firefox瀏覽器,將該xpi文件拖入到Fireofx窗口中即可,如下圖:

直接點擊「立刻安裝」按鈕,並按提示重啟Firefox即可完成安裝。我們會在Firefox工具欄下找到Selenium IDE的啟動按鈕,啟動後的主界面如下圖:

從上圖我們可以看到,Selenium IDE的主窗口可以分為以下5個部分:

(1) 菜單欄:主要包括測試腳本的打開,保存,導出,運行,選項設置等。

(2) 工具欄:主要包括測試腳本的執行,暫停,腳本錄製按鈕等。

(3) 測試用例列表(左側):可在此新增或刪除測試用例。

(4) 測試腳本管理(右側):所有的測試腳本的核心操作在此列出。Selenium IDE默認使用類似於關鍵字驅動的方式實現測試腳本,所以其腳本是非常直觀的,可讀性也很強。

(5) 日誌欄:主要用於測試腳本運行過程的日誌信息查看,包括錯誤消息等。

2. 利用Selenium IDE登錄Agileone

對Selenium的基本操作有一個初步的了解後,我們現在來利用Selenium IDE錄製一個簡單的操作,並完成測試斷言。

(1)先確保右上側的紅色錄製按鈕被按下(默認是按下狀態)。

(2)將窗口切換到Firefox主窗口,按照正常操作流程輸入Agileone的首頁地址,載入完成後輸入用戶名和密碼,點擊登錄按鈕。

(3)當上述操作完成後,切換到Selenium IDE窗口,可以看到錄製的腳本如下:

(4) 我們可以看到,Selenium IDE將測試腳本的操作分為三個部分:Command,Target和Value。對於Open或者Click之類的操作,只需要指定其Target即操作的目標對象即可,而對於文本框一類的需要輸入內容的元素,則需要額外在Value中指定其輸入的內容。

(5) 點擊工具欄左側的Play current test case按鈕,即可運行該腳本。此時腳本運行如下:

(6) 當運行上述腳本時,我們可以看到在Log窗口中出現了一個錯誤:「[error] Element id=username not found」,錯誤消息告訴我們一個id屬性為username的元素沒有找到。究其原因,是因為我們上一次錄製腳本時已經登錄到Agileone,所以當再次打開Agileone首頁時,會直接進入到Agileone的主頁面,而本頁面中不存在id=username的元素。我們當然可以手工地先將當前登錄的賬戶註銷後再次運行該腳本即可。

(7) 另外一種相對更好的解決方案是,在測試腳本中點擊Agileone首頁的「註銷」超鏈接。這樣每一次運行登錄後,都會完成註銷,便不會出現打不開登錄頁面的情況。除了再次錄製一下「註銷」操作外,我們還可以手工添加此操作。在現存腳本的最後(即:clickAndWait的下一行),右鍵選擇「Insert New Command」添加一行新的命令,並用滑鼠選中此行,在Command中輸入「click」命令,在Target中點擊按鈕「Select」,將滑鼠定位到Agileone頁面中的「註銷」超鏈接處並點擊該元素,我們可以看到,Selenium IDE會在滑鼠經過的所有元素上用虛線將該元素框住,表示可以正常識別到該元素。最後生成的腳本如下:

(8) 手工註銷Agileone後,並再次運行該腳本,整個過程非常流暢地完成了自動化的登錄和註銷。

3. 添加斷言

我們需要的,不單純只是自動化的完成我們指定的操作,還需要達到測試的目的。所以為自動化測試腳本添加斷言是非常重要的一環。比如針對上述的登錄和註銷的操作,我們又該如何為其添加斷言呢?

(1) 為登錄操作添加斷言:斷言的核心就是找到本次操作完成後的關鍵特性。在Selenium IDE中,為斷言提供了非常多的Command操作,比如成功登錄Agileone後,會進入其主頁面,那麼只要我們找到一個該頁面中存在的任意元素,而在登錄頁面不存在的元素,便可以實現斷言,其斷言命令為:「assertElementPresent」。為此,我們只需要在登錄按鈕點擊後添加一行新的斷言命令即可。比如此處我們斷言的特徵就是「個人設定」這個元素出現:

(2) 為註銷操作添加斷言:當我們註銷了以後,自然會回到登錄頁面,所以此時我們可以用同樣的方式,去斷言一個登錄頁面上的元素是否存在。比如assertElementPresent id=username。

(3) 在Selenium IDE中,所有的斷言命令均以「assert」開頭,我們可以在Command中輸入assert並從其下拉列表中選擇合適的斷言即可。我們可以根據其斷言命令的名字清楚地知道該斷言的作用。

4. 格式化Selenium IDE腳本

默認情況下,Selenium IDE會將其測試腳本保存為一個標準的HTML文件,並且以HTML表格的形式存儲這些操作命令。只需要選中該測試用例,並點擊「文件」菜單下的「Save Test Case」,便可將該腳本保存起來,以供下次使用。我們不妨用瀏覽器打開該測試用例保存的HTML文件,看到的結果如下:

這是一個標準的HTML表格,只不過裡面存放的,都是Selenium IDE的操作命令而已。默認的Selenium 內核便通過解析該HTML表格裡面的內容,將其運行命令或操作對象等內容讀取出來再運行即可。

Selenium IDE除了可以用HTML保存測試用例以外,還支持其它格式,比如C#,Python,Java,Ruby等。此處有兩種方式完成其它編程語言的保存處理:

(1) 利用格式化輸出的方式:

我們可以在測試腳本窗口的,將測試腳本切換至Source標籤頁,便可以看到標準的HTML源代碼,如下圖所示:

既然Selenium IDE支持其它編程語言,當然,我們也可以在Source中顯示其它格式的測試腳本源代碼。首先,打開「Options」菜單下的「Options」選項,在彈出的選項對話框中的「General」中,勾選「Enable experimental features」選項,確定。該選項表示支持Selenium IDE啟用一些處理試驗階段的新特性。

接下來,在「Options」的「Format」中,選擇我們需要的任意類型的編程語言,在彈出的提示窗口中點擊「確定」按鈕,即可在Source中看到對應的編程語言。同時,如果保存該測試用例,則直接保存為對應的編程語言的源代碼。

從上圖中我們可以看出,Selenium IDE可以導出的編程語言有四種,同時我們還會發現,Selenium可以導出Remote Control和WebDriver兩種腳本。目前在最新版本的Selenium中,已經取消了對Remote Control(即Selenium RC)的支持。因為Remote Control是早期的Selenium發行版本中的功能,主要利用注入JavaScript腳本的方式來運行自動化測試腳本。此類運行方式並不是很穩定,執行效率也較低,所以最新的Selenium 3.X的版本中,已經取消了對其的支持,進而全力支持WebDriver。所以,我們學習Selenium,除了IDE作為一個基礎工具需要學習外,重點要學習的便是WebDriver。同時,WebDriver已經成為事實上的Web系統的測試標準,所以除了Web自動化測試外,針對移動APP的自動化測試框架Appium也同樣採用了WebDriver作為其標準。

通過上述的腳本,我們也可以看到,Selenium WebDriver是如何工作的。上述的代碼,需要在Selenium WebDriver+TestNG的環境中才能正常運行。後面的實驗我們將會為大家詳細講解其用法。

(2) 利用導出用例的方式。

除了利用格式化輸出的方式保存不同類型的測試腳本外,還有更加簡潔的一種方式來將Selenium IDE錄製的腳本導出為其它編程語言。我們可以點擊「文件」菜單中的「Export Test Case As…」菜單項,選中對應的腳本類型,並保存即可。

由於Selenium IDE的功能有限,所以通常在真實的測試項目中,我們不會直接用到Selenium IDE,但是會使用Selenium IDE作為一個輔助工具,幫助我們通過錄製腳本的方式快速生成其它編程語言的測試腳本,並在WebDriver環境中運行。

5. 測試Agileone的公告管理

對Seleniu IDE的操作有了一個相對全面的理解後,現在我們來利用Selenium IDE完成對Agileone的公告管理模塊的新增功能的自動化測試。先來分析一下整個過程的關鍵操作及斷言:

(1) 首先實現登錄。並對登錄功能進行斷言。

(2) 進入公告管理頁面,並對該頁面是否成功載入進行斷言。

(3) 輸入公告的過期時間,標題,內容等,並點擊「新增」按鈕提交。

(4) 對提示信息進行斷言,確認公告新增是否成功。

(5) 對公告列表的表格進行斷言,確認剛才新增的公告標題存在於表格中。

(6) 註銷Agileone並回到登錄頁面。

利用Selenium IDE的錄製功能,結合手工添加的斷言,最終的測試腳本如下:

現對上述腳本中的幾處關鍵命令進行一下講解,請讀者在完成實驗是特別注意:

(1) 考慮到某些時候頁面載入需要一個過程,不一定非常迅速,所以我們在點擊登錄按鈕後載入主頁的地方,加了一個等待命令「waitForElementPresent link=註銷」,表示等待登錄執行完成,直到頁面中出現一個超鏈接「註銷」為止,說明登錄動作已經正常完成,避免後續操作上的問題。

(2) 針對一些特定情況,我們也可以利用利用「pause 3000」讓腳本暫停運行3秒鐘,來確保提交功能完成提交。比如我們在添加了一條公告以後,由於需要提交數據到後台伺服器處理,這個過程必須會花一些時間,所以我們讓腳本暫停,否則後續的斷言很有可能失敗,但是卻並不是因為沒有新增公告成功,而是斷言在執行時新增公告還沒有提交完成。

(3) 由於在Agileone中使用了KindEditor的HTML在線編輯器,所以在輸入公告內容時,我們必須要先點擊「css=img.ke-common-icon.ke-icon-source」切換到該在線編輯器的「代碼」視圖中,才能正常輸入公告的內容。

(4) 當我們新增了一條公告時,也需要暫停幾秒鐘,以使後續的斷言能夠正常進行。同時,我們可以看到,當我們利用「assertText」命令對頁面出現的文本進行斷言時,我們使用了模糊匹配,比如「成功啦: 新增數據成功*」,其中的「*」便是模糊匹配,這樣可以更好地自適應內容的變化。

6. 利用Selenium IDE的調試功能

針對上述腳本,Selenium IDE為我們提供了非常不錯的調試功能。在任意一行腳本上,點擊右鍵,我們可以看到如下的菜單:

(1) Toggle Breakpoint:在本行命令上設置斷點,腳本運行到此處時會停下來,進入手工運行模式。

(2) Set / Clear Start Point:設置腳本是否從本行命令開始運行,而不是從頭開始。

(3) Execute this command:手工執行本行命令,腳本不會自動運行到下一行去。

上述幾個調試功能與Eclipse裡面的調試功能有類似之處,所以我們應該非常清楚其用法,讀者只需要簡單確認一下上述幾個功能即可。

7. Selenium IDE的優勢

(1) Selenium IDE是標準的關鍵字驅動(Keyword-Driven Testing),其設計理念是非常先進的,也是目前很多自動化測試框架如Robot Framework所遵循的理念。

(2) 我們可以通過錄製的方式,不需要寫一行代碼便完成了自動化測試。對於沒有編程經驗的測試人員來說,無疑可以大大減少自動化測試的門檻。

(3) 支持生成多種編程語言,提高測試腳本的開發效率。

(4) 作為Selenium測試體系中的重要一員,Selenium IDE作為一個輔助工具,還是非常有優勢的。

8. Selenium IDE的不足

(1) 無法對代碼進行邏輯控制,只能順序執行。

(2) 無法像編程一樣,處理一些動態變化的數據,比如新增一條公告後,ID會增加。

(3) 無法進行異常情況的處理,比如判斷Agileone是否處於已登錄狀態。

(4) 無法進行靈活的斷言。

(5) 無法對資料庫進行直接的操作,只能通過界面完成簡單的測試。

(6) 無法適用於中大型的測試項目。

(7) 在靈活性,穩定性,可靠性,適應性等方面都無法達到要求。

思考練習

(1) 一個自動化測試工具,除了錄製回放斷言外,還應該具備哪些功能?

(2) 基於界面的自動化測試,還需要哪些技術的支撐,才能適應更大的測試項目。

:學習更多技術,觀看更多免費視頻,歡迎進入蝸牛學院官網 www.woniuxy.com

希望繼續在IT行業突破提升自己的各位朋友,歡迎加群384053806,不管你自我感覺牛不牛B。


推薦閱讀:

4.3 通過selenium 模擬瀏覽器抓取
Selenium+Python自動更新知乎首頁內容
selenium自動化測試入門 下拉框元素定位
Python多線程Selenium跨瀏覽器測試
python selenium 如何查看網頁的源代碼 ?

TAG:軟體測試 | Selenium | 自動化測試 |