驗收測試(功能測試)驗證應用程式是否滿足利害關係人的需求。傳統手工測試耗時且易出錯,Selenium 讓測試在真實瀏覽器中自動化執行,支援跨平台、跨瀏覽器,並能模擬真實用戶操作,是持續整合流程中不可或缺的工具。
核心組件 BrowserBot 以 JavaScript 實現,接收測試腳本命令並駕駛瀏覽器。測試腳本可用 HTML 表格格式(Test Runner 模式)或程式語言(Driven 模式:Java、Ruby、Python)編寫。
腳本為 HTML 表格,部署於應用伺服器同源,受沙箱限制。結構簡單:
<table>
<tr><td>open</td><td>/login</td><td></td></tr>
<tr><td>type</td><td>username</td><td>admin</td></tr>
<tr><td>clickAndWait</td><td>//input[@value='登入']</td><td></td></tr>
<tr><td>verifyTextPresent</td><td>歡迎</td><td></td></tr>
</table>
測試套件(TestSuite.html)以連結串聯多個測試用例,按序執行。
腳本以程式語言編寫,運行於瀏覽器外部進程,透過 Selenese 協議與 BrowserBot 通訊。功能更強大,可整合 xUnit 框架,但部署較複雜(需啟動伺服器、部署應用、啟動瀏覽器等)。Ruby 驅動範例:
puts selenium.open('/logout.html')
puts selenium.verify_location('/index.html')
示例應用包含四個用例:登入、查看股票列表、查看股票詳情(Ajax)、登出。測試腳本放置於 public/selenium/tests。
Ajax 請求非同步完成,測試必須等待頁面更新。使用 pause 指令等待固定時間(如 500ms),或更進階的 waitForValue、waitForCondition。若無等待,斷言會在內容尚未渲染時執行導致失敗。
<tr><td>click</td><td>link=Acme Oil</td><td></td></tr>
<tr><td>pause</td><td>500</td><td></td></tr>
<tr><td>verifyTextPresent</td><td>Acme Oil 詳細資訊</td><td></td></tr>
500ms 亦可作為非功能性需求驗證:若 Ajax 響應超過此閾值即視為效能不佳。
在瀏覽器開啟 https://localhost:3000/selenium/TestRunner.html,點擊 All 執行完整套件。失敗步驟以紅色標示。支援單步除錯,慢速回放每一步驟便於觀察。
測試套件可整合至 Apache Continuum、Luntbuild 等 CI 工具,每次提交自動觸發測試,失敗即時郵件通知團隊,實現「更早、更頻繁、更容易」發現缺陷。
Selenium 以瀏覽器為執行環境,支援多語言、多平台、Ajax 測試,配合 CI 可構建高可靠、可維護的軟體。釋放人力投入更高價值活動,是現代敏捷團隊的標配工具。