Selenium 概述
Selenium 是一種 Web 應用的自動測試工具,通過模擬用戶對 Web 頁面的各種操作,可以精確重現軟件測試人員編寫的 Test Cases 步驟。Selenium 包含三個工具:Selenium-IDE,Selenium-RC 以及 Selenium-Core。其中,Selenium-Core 是驅動 Selenium 工作的核心部分,作為一個用 JavaScript 編寫的測試引擎,它可以操作 Web 頁面上的各種元素,諸如:點擊按鈕、輸入文本框,以及斷言 Web 頁面上存在某些文本與 Web 元素等。
Selenium-IDE 是一個 Firefox 插件,能夠錄制回放用戶在 Firefox 中的行為,并把所記錄的 Selenese (Selenium Commands) 轉化為 Java/C#/Python/Ruby 等語言,在 Selenium-RC 中修改復用。對于較為復雜的 Test Cases,Selenium-IDE 的功能有限,往往用它錄制大致的步驟,再轉化為測試人員熟悉的編程語言,在此基礎上完善,形成更為強大且靈活的 Selenium-RC Test Cases。
Selenium-RC(Selenium Remote Control)在 Web 瀏覽器與需要測試的 Web 應用間架設代理服務器(Selenium Server),使得 JavaScript 引擎與被測 Web 應用同源,繞開同源策略的限制(Same Origin Policy),進而取得對 Web 頁面進行各種操作的權限。
回頁首
開發環境配置
以 Java 作為測試用語言為例,在 Eclipse 中新建一個 Java 項目 Test Search Engine,下載 Selenium-RC 軟件包,把 selenium server/selenium java client driver 的 Jar 以及 JUnit 庫加入到該項目的 Java Build Path。
圖 1. Build Path 配置
啟動 Selenium-Server,可以在命令行中使用 java -jar命令直接運行可執行 Jar 包(對于中文 Windows 操作系統且使用 IBM JDK,還需要加參數 -Dibm.stream.nio=true)。如果想在 Java 程序中啟動 / 停止 Selenium-Server,首先,新建一個 RemoteControlConfiguration 對象 rcc,并指定遠程控制參數(包括配置 Selenium Server 的監聽端口,Firefox 瀏覽器的 Profile 等),然后新建一個 SeleniumServer 對象,把 rcc 傳入 SeleniumServer 的構造函數(對于中文 Windows 操作系統且使用 IBM JDK,在 Eclipse 的 Run Configurations 的 VM arguments 中加入 -Dibm.stream.nio=true)。
清單 1. 使用 Java 啟動 / 停止 Selenium Server
RemoteControlConfiguration rcc = new RemoteControlConfiguration();
rcc.setPort(4444); // 指定 Selenium Server 開放端口
SeleniumServer SELENIUM_SERVER;
SELENIUM_SERVER = new SeleniumServer(rcc);
SELENIUM_SERVER.start(); // 啟動 server
// 測試代碼
SELENIUM_SERVER.stop(); // 停止 server
此外,Selenium Server 還可以通過 Ant 腳本來控制啟動 / 停止,這提供了另一種靈活而強大的項目控制方式。
清單 2. 使用 Ant 腳本啟動 / 停止 Selenium Server
在 Selenium-Server 啟動后,建立一個 Selenium 類的實例 selenium,并通過這個實例與 Selenium-Server 進行交互,方法如下。
清單 3. Selenium 實例的啟動 / 停止
Selenium selenium = new DefaultSelenium(java.lang.String serverHost,
int serverPort,
java.lang.String browserStartCommand,
java.lang.String browserURL);
selenium.start();
// 經由 selenium 控制瀏覽器模擬各種用戶操作
selenium.stop();
Selenium 實例包含豐富接口,可以對各種 Web 元素進行各種操作。例如,在谷歌頁面中輸入“developerWorks”,點擊搜索按鈕,在結果頁面中驗證是否包含“developerWorks 中國”字樣等。
清單 4. Selenium 測試的簡單示例
Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox",
"http://www.google.cn");
selenium.start(); // 啟動瀏覽器
selenium.open("/"); // 打開 www.google
selenium.type("q", "developerworks"); // 輸入文本框
selenium.click("btnG");// 點擊搜索按鈕
selenium.waitForPageToLoad("30000"); // 等待加載結果頁面
verifyTrue(selenium.isTextPresent("developerWorks 中國")); // 驗證是否存在指定字符
selenium.stop();// 關閉瀏覽器
當 Selenim 遇到 TestNG
用 Selenium 測試 Web 頁面時,所重現的各種行為依賴于測試人員的輸入參數,例如:選擇下拉餐單的項目,在文本框中輸入字符等。不同的測試用例對應不同的輸入,若有方法能夠簡單有效的傳入測試用參數,會大大提高測試用例的復用性和可維護性。當 Selenium 遇到 TestNG,這些就可以實現。TestNG 中的 NG,意為 Next Generation,事實上,該測試框架引入了不少新特性:靈活的測試配置,支持 JDK 5 注釋,支持數據驅動的測試,強大的執行模型等。
原文轉自:http://www.ibm.com/developerworks/cn/java/j-lo-selenium/index.html