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