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