Selenium 使用介紹

(Selenium IDE/Core/Core HTA/RC)javascript

工具特點

  1. 開發人員,測試人員都可使用的一款測試工具
  2. 支持IE、FireFox等瀏覽器;測試環境能夠和程序代碼一同部署於應用服務器下,也可單獨搭建。
  3. 用於測試驅動開發TDD、Smoke Test、Regression、Acceptance testing等
  4. 免費、腳本簡單(HTML files)、不須要額外的環境
參考 Selenium網站:
http://www.openqa.org/
http://selenium.openqa.org/
我應該使用哪一種Selenium工具(中文版)?
http://wiki.javascud.org/display/SEL/Which+Selenium+Tool+Should+I+Use 

 

從Selenium IDE 開始

安裝

  1. 安裝Firefox
  2. 下載Selenium插件:http://selenium-ide.openqa.org/ 
  3. 將插件拷貝至Firefox/extensions目錄下(一般爲C:\Program Files\Mozilla Firefox\extensions\)
  4. 重啓Firefox,會執行自動安裝。
  5. 在「Tools」下可以看到「Selenium IDE」插件安裝完畢。

錄製

參考 錄製的小電影:
http://wiki.openqa.org/download/attachments/400/Selenium+IDE.swf

 

錄製好的腳本

Selenium html腳本,又稱爲Selenese,結構清晰簡單:html

 

 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Becky02</title>
 </head>
 <body>
 <table cellpadding="1" cellspacing="1" border="1">
 <thead>
 <tr><td rowspan="1" colspan="3">Test02</td></tr>
 </thead><tbody>
 <tr>
     <td>open</td>
     <td>http://www.google.com/</td>
     <td></td>
 </tr>
 <tr>
     <td>type</td>
     <td>q</td>
     <td>ddddddd</td>
 </tr>
 <tr>
     <td>clickAndWait</td>
     <td>btnG</td>
     <td></td>
 </tr>
 <tr>
     <td>assertText</td>
     <td>sd</td>
     <td>Web</td>
 </tr>
 </tbody></table>  </body>  </html>

 

是一個HTML Table:java

Test02
open http://www.google.com/  
type q ddddddd
clickAndWait btnG  
assertText sd Web

 

HTML Table 由三列構成:程序員

First Column: Selenium command,命令或斷言。web

Second Column: Target of command,命令或斷言的目標(target)。這裏能夠用多種受支持的組件定位符中的一種來指定目標。一般使用的是組件的 ID 或名稱,但 XPath 和 DOM 定位符也是受支持的;shell

Third Column: Optional parameter,用於爲命令或斷言指定參數的值。例如,當使用 type 命令時,這一列可能就是一個文本域所指望的值。瀏覽器

 

參考 對於Selenium的命令,請參考網站資源:
http://release.openqa.org/selenium-core/0.8.0/reference.html

在selenium core的發佈包裏,也有此reference,下文中即將提到。服務器

對於自動化測試來講,任何錄製/回放工具獲得的腳本,都是要進行修改的,這樣可以增長腳本的健壯性。將腳本存爲html文件。最終的腳本也要至少回放一遍經過才能算完成,在Selenium IDE中,點播放按鈕觀看放映。session

 

Selenium Core使工做更有條理

 

下載安裝

Selenium Core位於:app

http://selenium-core.openqa.org/

它是一個zip包,須要應用服務器的支持,此處對於應用服務器的部署等省略,將zip包放入待測試的Web程序下,啓動應用服務器,打開 URL:http://localhost:8080/selenium/ ,進入 「Selenium TestSuite」。TestSuite用於將具備相似功能的一些測試用例編成一組,以便它們按順序運行。TestSuite和Test Cases同樣,都是用簡單的 HTML 表編寫的。Selenium 執行的缺省TestSuite的名稱是 TestSuite.html,位於tests文件夾下。

 


<body onload="filterTestsForBrowser()">

    <table id="suiteTable"    cellpadding="1"
           cellspacing="1"
           border="1"
           class="selenium">
        <tbody>
        <tr><td><b>Test Suite</b></td></tr>
            <tr unless="browserVersion.isSafari" ><td><href="./events/TestMouseEvents.html">TestMouseEvents</a></td></tr>
            <tr><td><href="./TestBrowserVersion.html">TestBrowserVersion</a></td></tr>
            <tr><td><href="./TestJavaScriptAttributes.html">TestJavaScriptAttributes</a></td></tr>
            <tr unless="browserVersion.isKonqueror || browserVersion.isSafari"><td><href="./events/TestKeyEvents.html">
TestKeyEvents</a></td></tr>
            <tr unless="browserVersion.isKonqueror || browserVersion.isSafari"><td><href="./TestVisibility.html">TestVisibility</a></td></tr>  
            <tr><td><href="./TestFramesOpen.html">TestFramesOpen</a></td></tr>
            <tr><td><href="./TestFramesNested.html">TestFramesNested</a></td></tr>
<!--更多省略,請自行閱讀文檔-->

 

以上是一個官方版TestSuite的摘錄,參照例子,組織本身的Test Cases,寫成TestSuite,放入tests文件夾,即可在瀏覽器中執行(適用於各類瀏覽器),例 如:http://localhost:8080/selenium/core/TestRunner.html?test=../tests /myTestSuite.html

值得注意的是:Selenium Core的tests裏包含了不少Selenium Command的例子,值得好好研習。

Selenium Core的不足之處

  1. 它須要和應用同時部署於應用服務器之下,在有些項目中並不方便操做。
  2. 它不能將任何測試結果寫到磁盤上(由於它是用javascript寫的,它不容許向磁盤寫數據),固然你能夠將測試結果發送到另一臺服務器保存,這就是下文即將介紹的Selenium Core HTA 和 Selenium RC。

Selenium Core HTA

 

Core HTA 也在Selenium發佈包內,僅適用於IE瀏覽器,不須要遠程安裝,也不須要Java支持。在命令行裏執行命令便可:

 

C:\selenium\core>TestRunner.hta "test=..%2Ftests%2FTestSuite.html&auto=true&close=true&resultsUrl=results.html&save=true"

 

根據實際狀況修改幾個參數,即可執行本身的TestSuite了。

 

Selenium-RC使用介紹
 
參考 http://blog.chinaunix.net/u/29273/showart_280459.html
本篇文章部分轉載自 鳳凰印記 的 BLOG,地址如上,略作修改,應該是Selenium RC官方參考手冊的中文翻譯版本:
原版(英文):http://selenium-rc.openqa.org/tutorial.html

 

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瀏覽器,你就須要安裝reg.exe, 可是若是使用Firefox不須要。咱們建議(但不是必須)將你的瀏覽器執行路徑加到你的PATH環境變量中(若是你不知道如何將你的瀏覽器安裝目錄加到 PATH中,那麼你就必須將你的瀏覽器安裝到標準路徑下:Firefox的標準路徑:"c:\Program Files\Mozilla Firefox\firefox.exe";IE瀏覽器的標準路徑:"c:\Program Files\Internet Explorer\iexplore.exe")


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都是不一樣的。

 

在個人機器上的CMD窗口,藍色是我輸入的,其餘是LOG
D:\sele\selenium-remote-control-0.9.2-dist\selenium-remote-control-0.9.2\seleniu
m-server-0.9.2>java -jar selenium-server.jar -interactive
15:30:51.132 INFO - Java: Sun Microsystems Inc. 1.5.0_04-b05
15:30:51.132 INFO - OS: Windows XP 5.1 x86
15:30:51.132 INFO - v0.9.2 [2006], with Core v0.8.3 [1879]
15:30:51.382 INFO - Version Jetty/5.1.x
15:30:51.397 INFO - Started HttpContext[/,/]
15:30:51.397 INFO - Started HttpContext[/selenium-server,/selenium-server]
15:30:51.397 INFO - Started HttpContext[/selenium-server/driver,/selenium-server
/driver]
15:30:51.475 INFO - Started SocketListener on 0.0.0.0:4444
15:30:51.475 INFO - Started org.mortbay.jetty.Server@1cb25f1
Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http:/
/www.yahoo.com)
cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
15:31:23.341 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
15:31:23.528 INFO - Checking Resource aliases
15:31:23.528 INFO - Command request: getNewBrowserSession[*iexplore, http://www.
google.com] on session null
15:31:24.153 INFO - Launching session 683528
15:31:24.262 INFO - Backing up registry settings...
15:31:25.528 INFO - Modifying registry settings...
15:31:26.012 INFO - Launching Internet Explorer...
15:31:50.786 INFO - Allocated session 683528 for http://www.google.com
15:31:50.817 INFO - Got result: OK,683528 on session 683528
cmd=open&1=http://www.google.com/&sessionId=683528
15:41:46.837 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=open&1=http://www.google.com/&sessionId=683528
15:41:46.853 INFO - Command request: open[http://www.google.com/, ] on session 6
83528
15:41:47.354 INFO - Got result: OK on session 683528
cmd=type&1=q&2=qqqqqq&sessionId=683528
15:42:33.186 INFO - ---> Requesting http://localhost:4444/selenium-server/driver
?cmd=type&1=q&2=qqqqqq&sessionId=683528
15:42:33.202 INFO - Command request: type[q, qqqqqq] on session 683528
15:42:33.233 INFO - Got result: OK on session 683528

 

這是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,修修改改,貼到代碼裏面,還須要程序員作什麼呢?



Source URL: http://www.blogjava.net/becky/archive/2009/02/09/183471.html

相關文章
相關標籤/搜索