2009年8月27日 星期四

Selenium Docs (1) - 基本介紹

Selenium 介紹
Selenium 包含三大部分:(1) Selenium-IDE;(2) Selenium-RC;(3) Selenium-Grid。
  • Selenium-IDE:Firefox 的附加元件,可以錄下操作網頁的動作作為 test cases,也可以自己編輯這些 test cases。
  • Selenium-RC:讓會寫程式的人利用現有的程式語言做自動化測試,selenium 提供 API 並支援多種語言 (HTML, Java、C#、Perl、PHP、Python、Ruby) 方便寫 test cases。
  • Selenium-Grid:平行測試、跨瀏覽器測試。

Selenium 指令 (Selenese)
指令有三種型態:(1) 動作 Actions;(2) 存取 Accessors;(3) 判斷 Assertions。
  • 動作:用來操作頁面,例如:點擊(click)、輸入(type) ...等動作。如果動作執行出問題,這個測試會被中止。
  • 存取:查看目前頁面的狀態,或者把頁面內容存起來,例如 storeTitle。也會被用來判斷(Assertions)
  • 判斷:類似存取(Accessors),但更進一步地做些檢查,例如看目前頁面的標題是否為X,某個欄位是否被勾選...等。有三種用法:宣稱(assert)、驗證(verify)、等候(waitFor)。宣稱某個正確的內容時,若實際內容與宣稱內容不符合,此測試會中斷。驗證則稍微寬鬆一些,測試會繼續執行而把錯誤存在紀錄的 log 中。等候則用來確認某些內容出現在頁面上(常見的情況是搭配有 ajax 的頁面使用),當該內容未在設定的時間內出現時 (timeout),則中斷測試。

元素定位 (Locators)文字比對 (Matching Text Patterns)
執行指令時需要定位該指令要執行在哪個 HTML 元素上,Selenium 提供許多定位方式:identifier (idname)、XPath、超連結文字、DOM、CSS。
有些指令(例如:verifyTextPresentverifyTitleverifyText)以及超連結定位,可以使用 Pattern 讓需要指定頁面上的文字內容時,更有彈性、不用寫死。Pattern 有三種:globbing、regular expressions 跟 exact。

等候(AndWait)等待某元素出現(WaitFor)
當頁面需要整個更新時(load、refresh),使用 XXXXAndWait 指令(例如:clickAndWait) 可以讓測試稍微暫停執行,等候頁面載入完畢。但需要注意的是若是該指令執行的動作無法造成「頁面載入」這件事,這個指令會因為久候不到載入完畢的信號而造成測試失敗中斷。
在使用 AJAX 開發的網站上,常會有載入/更新部份內容的事件發生,「設定固定的等候時間」暫停測試並不是一個好方法,會造成不必要的等待或者不穩定的執行。WaitFor 指令讓測試在某個想要的元素出現之後才繼續執行。

變數 (Variables) JavaScript 參數
Selenium 提供變數 (variables) 儲存一些在測試中可能會用到的數值或內容,storeXXX 系列的指令可以存入、而用 ${變數名} 存取。
XXXEval 系列的指令可以直接塞一段 JavaScript 程式碼當參數,而其他指令若想要用 JavaScript 當參數則用 javascript{程式碼} 包起來。在 JavaScript 程式碼中,需要存取 selenium 變數的內容則用 storedVars['變數名'] 就可以。