Selenium Remote Control:指南
下載Selenium RC 包:
http://selenium-rc.openqa.org/
是一個(gè)Zip包,里面提供了支持各種語(yǔ)言的驅(qū)動(dòng)。核心的是 selenium-server.jar 這個(gè)jar包,在下文介紹交互模式(Interactive Mode)時(shí)用到的就是它。
本指南將會(huì)告訴你如何從命令行啟動(dòng)Selenium server,如何在交互式模式下使用Server。這里假設(shè)你已經(jīng)熟悉在命令行執(zhí)行程序。最后,我們將說(shuō)明如何寫(xiě)簡(jiǎn)單的test來(lái)實(shí)現(xiàn)我們已在交互式模式下實(shí)現(xiàn)的功能。
一些準(zhǔn)備:JRE1.5+ 和 瀏覽器要求
Selenium Server 是用Java語(yǔ)言編寫(xiě)的,需要在JRE 1.5.0或者更高的版本下運(yùn)行。也許你已經(jīng)安裝JRE,在命令行中執(zhí)行:
java -version
你可以看到如下的關(guān)于你安裝的java的版本信息:
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)
相反,如果你看到的是錯(cuò)誤信息,你需要安裝JRE,或者是將它填加到你的PATH環(huán)境變量中去。
同時(shí)你需要確保你的安裝的瀏覽器也支持這些,例如:
Windows
如果你用的是Windows XP 或者是Windows2003,你可以使用IE 瀏覽器,或者安裝Mozilla Firefox 或者Opera瀏覽器。
如果你是用的是Windows2000,如果想使用IE瀏覽器,你就需要安裝
Unix/Linux
在這個(gè)指南中,要求安裝Firefox,并且將它的路徑加到你的PATH環(huán)境變量中。注意,在Unix/Linux中我們激活"firefox-bin"目錄,從而確保在這個(gè)路徑下執(zhí)行;同時(shí)不要忘記將Firefox libraries 加到你的 LD_LIBRARY_PATH中。如果需要,我們可以通過(guò)shell腳本激活firefox(例如:"firefox" or "run-mozilla.sh")那樣的話知道你關(guān)閉這個(gè)服務(wù)器的時(shí)候才可以結(jié)束Firefox瀏覽器。
Mac OS X
對(duì)于 Mac OS X,只要在你的/Applications目錄下,安裝Firefox.app就夠了。注意:為了精確控制你的瀏覽器,我們需要激活A(yù)pplications/Firefox.app/Contents/MacOS 目錄下的Firefox內(nèi)嵌的執(zhí)行程序(firefox-bin);如果你的瀏覽器的安裝位置不在那,你需要將你當(dāng)前的內(nèi)嵌位置加到你的PATH路徑下,作為你的DYLD_LIBRARY_PATH環(huán)境變量。
交互模式:Interactive Mode
Selenium服務(wù)器的“交互模式”是一種不需要任何代碼的原型測(cè)試,因此有必要對(duì)初學(xué)者介紹Selenium Remote Control。在交互模式下,你可以在Selenium 服務(wù)器窗口中輸入一行行的命令,在工作窗口的某個(gè)位置中立刻會(huì)執(zhí)行你命令的結(jié)果。通常你可以選用你喜歡的語(yǔ)言編寫(xiě)你的測(cè)試代碼,整個(gè)過(guò)程都是完全自動(dòng)化的。
確保Java安裝正常,通過(guò)命令行的方式用如下的命令來(lái)啟動(dòng)你的Selenium Server:
java -jar selenium-server.jar -interactive
這個(gè)命令將啟動(dòng)Selenium服務(wù)器,并允許你在命令窗口輸入命令。在一些登錄信息后邊,你應(yīng)該看到如下的信息:
Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http://www.yahoo.com)
讓我們開(kāi)始學(xué)習(xí)Selenium 服務(wù)器,第一個(gè)命令是打開(kāi)瀏覽器,在Windows操作系統(tǒng)下,在命令窗口下試試輸入下面的命令:
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
如果你想使用FireFox瀏覽器,你可以試如下的命令:
cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com
這句話的意思是:執(zhí)行g(shù)etNewBrowserSession命令,選擇一個(gè)瀏覽器(*iexplore for Internet Explorer, *firefox for Firefox, or *opera for Opera)打開(kāi)www.google.com網(wǎng)站。在窗口中輸入這條命令,會(huì)自動(dòng)的將HTTP網(wǎng)頁(yè)的請(qǐng)求發(fā)送給Selenium服務(wù)器,你可以看到關(guān)于你的請(qǐng)求的如下描述:
--->Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com
如果一切正常,你將會(huì)發(fā)現(xiàn)在你選擇的瀏覽器中打開(kāi)了一個(gè)新的窗口,回到Selenium服務(wù)器窗口中,你會(huì)發(fā)現(xiàn)如下的信息:
Got result: OK,260113 on session 260113
(如果沒(méi)有以上信息,請(qǐng)參考
故障指南)
消息的第一部分“Got result: OK”表示你的請(qǐng)求成功,第二部分,是Session 的ID,每次執(zhí)行"getNewBrowserSession" 命令時(shí),Session的ID都是不同的。
這是IE相應(yīng)的快照:
讓我們?cè)囈幌赂嗟拿睿何覀儗⒋蜷_(kāi)Google的網(wǎng)站,在命令窗口中輸入下面的命令,并且將ID換成你運(yùn)行"getNewBrowserSession"時(shí)獲得的ID。
cmd=open&1=http://www.google.com/webhp&sessionId=260113
當(dāng)執(zhí)行完這個(gè)命令后,在你的瀏覽器窗口的下方將會(huì)打開(kāi)google.com頁(yè)面。(The /webhp 確保我們?cè)趙ww.google.com網(wǎng)站;否則,我們需要通過(guò)某個(gè)國(guó)家的Google服務(wù)器間接的訪問(wèn)Google, 例如., www.google.fr.)
現(xiàn)在Google已經(jīng)被打開(kāi)了,我們可以試著在Search Box中輸入一些字段,在Selenium 服務(wù)器窗口命令中輸入:
cmd=type&1=q&2=hello world&sessionId=260113
同樣,不要忘記將你的Session ID換成你獲得的ID,如果一切按計(jì)劃執(zhí)行,你將會(huì)在google的search對(duì)話框中看到“hello world”,現(xiàn)在讓我們開(kāi)始查詢:
cmd=click&1=btnG&sessionId=260113
現(xiàn)在在瀏覽器中你可以看到查詢的結(jié)果,你可以通過(guò)許多Selenium命令在瀏覽器中自動(dòng)執(zhí)行手工任務(wù),對(duì)于一些特殊的命令,你可以在 Openqa的網(wǎng)站上查詢Selenium Core部分,或者查看我們客戶端驅(qū)動(dòng)的相關(guān)資料(Java, .NET, Perl, PHP, Python or Ruby).
接下來(lái)我們想做的事情可能是在頁(yè)面上讀出一些我們想要的信息, 例如,讓我們?cè)诋?dāng)前頁(yè)面上找到一些HTML的標(biāo)題,如下:
cmd=getTitle&sessionId=260113
瀏覽器將會(huì)返回我們載入的HTML頁(yè)面的標(biāo)題:
Got result: OK,hello world - Google Search on session 260113
現(xiàn)在這些交互模式已經(jīng)夠了;讓我們開(kāi)始寫(xiě)一些代碼!但是在我們開(kāi)始前,讓我們關(guān)掉我們啟動(dòng)的瀏覽器。輸入如下的命令:
cmd=testComplete&sessionId=260113
輸入這些命令后,你的瀏覽器窗口將會(huì)自動(dòng)關(guān)閉,想要關(guān)掉Selenium服務(wù)器,輸入“quit”或者只要按下“Ctrl+C”。
The Same Origin Policy 同源策略
當(dāng)你執(zhí)行你的測(cè)試的時(shí)候,你也許會(huì)注意到你的瀏覽器種的URL是:
http://www.google.com/selenium-server/RemoteRunner.html?sessionId=260113
這個(gè)不是一個(gè)普通的URL,因?yàn)樵趙ww.google.com上并沒(méi)有這個(gè)URL,如果你手工在你的瀏覽器中輸入地址,將會(huì)出現(xiàn)404錯(cuò)誤頁(yè)面,怎么回事那?
JavaSript自動(dòng)測(cè)試的時(shí)候,Selenium服務(wù)器參與解決了一個(gè)難題,你自己寫(xiě)的JavaScript腳本不會(huì)在Google.com上執(zhí)行,這是由于
Same Origin Policy,同源策略使得JavaScript腳本允許只能閱讀/修改來(lái)自相同源頭的HTML。
這給Selenium自動(dòng)測(cè)試帶來(lái)了很大問(wèn)題,如果你寫(xiě)了一個(gè)設(shè)置測(cè)試google.com的.js代碼,同源策略拒絕你的.js文件在google.com上運(yùn)行;相反,你應(yīng)該在google.com上安裝那個(gè).js文件來(lái)使它運(yùn)行,我們沒(méi)有權(quán)利這樣做,即使有,這樣做也會(huì)引起爭(zhēng)議。
Selenium Server便應(yīng)運(yùn)而生,在你用"getNewBrowserSession"自動(dòng)開(kāi)啟的瀏覽器中,.Selenium Server如同是客戶端配置的代理(client-configured proxy)。尤其,他將你的瀏覽器配置成和瀏覽器相關(guān)的使用Selenium Server代理。
代理通常會(huì)捕捉你在HTML頁(yè)面上的行為,如果頁(yè)面沒(méi)有找到,將會(huì)報(bào)告該頁(yè)不存在。但是Selenium Server是個(gè)很不同的代理,當(dāng)瀏覽器通過(guò)包含"/selenium-server/"的代理在URL中請(qǐng)求某個(gè)頁(yè)面時(shí),Selenium Server不會(huì)單純的在遠(yuǎn)程服務(wù)器上取回該頁(yè),而是自動(dòng)的返回它自己的頁(yè)面。在某種意義上,這使得瀏覽器認(rèn)為遠(yuǎn)程服務(wù)器上包含這個(gè)頁(yè)面,這樣我們就可以在google.com上注入任意的JavaScript代碼而不用以任何方式修改google.com。
通過(guò)程序運(yùn)行
以上介紹了一點(diǎn)原理和基本的使用方法。很顯然,打開(kāi)一個(gè)cmd窗口,一行一行的輸入命令,是令人崩潰的事情,并且命令行看起來(lái)很不可愛(ài)。Selenimu RC的魅力就在于,可以通過(guò)程序來(lái)實(shí)現(xiàn)這樣的測(cè)試:來(lái)看一個(gè)Java的例子:
import com.thoughtworks.selenium.*;
import junit.framework.*;
public class GoogleTest extends TestCase {
private Selenium browser;
public void setUp() {
browser = new DefaultSelenium("localhost",
4444, "*firefox", "http://www.google.com");
browser.start();
}
public void testGoogle() {
browser.open("http://www.google.com/webhp?hl=en");
browser.type("q", "hello world");
browser.click("btnG");
browser.waitForPageToLoad("5000");
assertEquals("hello world - Google Search", browser.getTitle());
}
public void tearDown() {
browser.stop();
}
}
SetUp( )函數(shù),就是交互模式中的
cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com 命令。
testGoogle( ) 函數(shù),更不需要程序員親自動(dòng)手編寫(xiě),F(xiàn)irefox 的 Selenium IDE 插件,可以自動(dòng)將Selenium html腳本,轉(zhuǎn)換成各種語(yǔ)言(Options->Format)。
就是這么簡(jiǎn)單,規(guī)劃測(cè)試用例,錄test cases,修修改改,貼到代碼里面,還需要程序員做什么呢?
posted on 2008-03-06 15:05
Becky 閱讀(11074)
評(píng)論(12) 編輯 收藏 所屬分類(lèi):
測(cè)試