Selenium用戶指南 - 第六章 Selenium 1 (Selenium RC)[1]

目錄    上一頁    下一頁

引言

如同你在Selenium項目簡史中讀到的,Selenium RC長期以來是主Selenium項目,在WebDriver/Selenium合併產生Selenium 2.0,這個最新和更強大的工具以前。

Selenium 1 仍然被積極地支持(主要地在維護模式)並提供某些在Selenium 2.0暫時不可得到的某些特徵,包括對幾個語言(Java,Javascript,Ruby,PHP,Python,Perl和C#)以及對幾乎所有的瀏覽器的支持。

Selenium RC是如何工作的

首先,我們描述Selenium RC的組件如何運轉,以及每一個在運行你的測試腳本中的角色。

RC組件

Selenium RC組件是:


    - 啓動和殺死瀏覽器的Selenium服務器,解釋和運行由測試程序傳遞的Selenese命令,和作爲一個HTTP代理,解釋和驗證在瀏覽器和AUT之間傳遞的HTTP消息。

    - 客戶端庫提供每種編程語言和Selenium RC服務器之間的接口。

此處是一個簡單的架構圖...

此圖顯示客戶端庫與服務器通訊,傳遞每個用於執行的Selenese命令。然後服務器使用Selenium 核心JavaScript命令傳遞Selenium命令到瀏覽器。瀏覽器使用它的JavaScript解釋器,執行Selenium命令。這將運行你在你的測試腳本中指定的Selenese動作或驗證。

Selenium服務器

Selenium服務器接受來自你的測試程序的Selenium命令,解釋它們,並將運行這些測試的結果報告回你的程序。

RC服務器打包Selenium內核,並且自動注入到瀏覽器。這將在你的測試程序打開瀏覽器時發生(使用一個客戶端庫API函數)。Selenium內核是一個JavaScript程序,實際上是使用瀏覽器內置的JavaScript解釋器解釋和執行Selenium命令的一套JavaScript函數。

服務器使用簡單的HTTP GET/POST請求接受來自你的程序的Selenese命令。這意味着你可以使用任何一種可以發送HTTP請求的編程語言,在瀏覽器上去自動化Selenium測試。

客戶端庫

客戶端庫提供允許你從你自己設計的程序運行Selenium命令的編程支持。每一個支持的語言,有一個不同的客戶端庫。一個Selenium客戶端庫提供一個編程接口(API),也就是,一套函數,可以從你自己的程序運行Selenium命令。在每個接口,有一個編程支持每個Selenese命令的編程函數。

客戶端庫取得一個Selenese命令,並傳遞它到Selenium服務器,用於處理對要測試的應用程序(Application Under Test - AUT)的一個指定的動作或測試。客戶端庫也接受命令的結果並傳遞迴你的程序。你的程序可以接受這個結果並存儲它到一個程序變量和報告做一個成功或失敗,或可能採取校正措施,如果它是一個未預期的錯誤。

如此創建一個測試程序,你僅需編寫一個使用客戶端庫API的,運行一套Selenium命令的程序,並且,可選地,如果你已經有一個在Selenium IDE創建的Selenese測試腳本,你可以生成Selenium RC代碼。Selenium IDE可以轉換(使用導出菜單項)它的Selenium命令到一個客戶端驅動程序的API函數調用。詳見Selenium IDE一章,有關從Selenium IDE導出RC代碼的部分。

安裝

安裝對Selenium來說,有點用詞不當。Selenium有一組可得到的庫,用於你選擇的編程語言。你可以從下載頁面下載它們。

一旦你選擇了一個工作語言,你僅僅需要:

    - 安裝Selenium RC服務器。

    - 用語言特定的客戶端驅動程序建立一個編程項目。

安裝Selenium服務器

Selenium RC服務器只是一個Java的jar文件(selenium-server-standalone-<版本號>.jar),不需要任何特定的安裝。只需下載這個zip文件,然後抽取服務器到期望的目錄就足夠。

運行Selenium服務器

在開始任何測試前,你必須啓動服務器。到Selenium RC服務器安裝的目錄,然後從命令行控制檯運行下面的命令。

java -jar selenium-server-standalone-<version-number>.jar

可以簡化,通過創建一個批或Shell可執行程序(.bat在Windows,.sh在Linux)包含上面的命令。然後在桌面準備一個指向可執行文件的快捷方式,並且簡單地雙擊這個圖標啓動服務器。

爲了服務器的運行,你需要安裝Java和正確地配置Path環境變量。你可以在控制檯通過運行下面的命令,檢查是否你有正確安裝的Java。

java -version

如果你得到一個版本號,你已經準備好開始使用Selenium RC。

使用Java客戶端驅動程序

    - 從SeleniumHQ下載頁面,下載Selenium java客戶端驅動程序zip。

    - 抽取selenium-java-<版本號>.jar文件。

    - 打開你期望的Java IDE(Eclipse,NetBeans,Intellij,Netweaver,等等)。

    - 創建一個java項目。

    - 增加selenium-java-<版本號>.jar文件的引用到你的項目。

    - 將selenium-java-<版本號>.jar文件 增加到你的項目的類路徑

    - 從Selenium IDE導出一個腳本到一個Java文件,幷包含在你的Java項目中,或直接使用Selenium Java客戶端API編寫你的Selenium測試。API在本章的稍後介紹。你可以要麼使用JUnit,或者TestNG來運行你的測試,或者你可以編寫你自己的簡單main()程序。這些概念在本章的後面有解釋。

    - 從控制檯運行Selenium服務器。

    - 執行你的測試從Java IDE或從命令行。

有關Java 測試項目配置的詳細信息,參見附錄節在Eclipse配置Selenium RC和在Intellij配置Selenium RC。

使用Python客戶端驅動程序

    - 通過PIP安裝Selenium,在SeleniumHQ下載頁有使用說明的鏈接。

    - 要麼用Python編寫你的Selenium測試,或從Selenium IDE導出 腳本到一個Python文件。

    - 從控制檯運行Selenium服務器。

    - 從控制檯執行你的測試,或你的Python IDE

有關Python客戶端驅動器配置的詳細信息,參見附錄的Python客戶端驅動程序配置。

使用.NET客戶端驅動程序

    - 從Selenium下載頁面,下載Selenium RC。

    - 抽取到文件夾。

    - 下載和安裝NUnit(註釋:你可以使用NUnit做你的測試引擎。如果你還不熟悉NUnit,你也可以編寫一個簡單的main()函數去運行你的測試;不管怎樣NUnit是一個非常有用的測試引擎。)

    - 打開你期望的.NET IDE(Visual Studion, SharpDevelop,MonoDevelop)

    - 創建一個類庫(.dll)

    - 增加對下面的DLL的引用:nmock.dll,nunit.core.dll,nunit. framework.dll,ThoughtWorks.Selenium.Core.dll,ThoughtWorks.Selenium.IntegrationTests.dll和ThoughtWorks.Selenium.UnitTests.dll

    - 使用一個.NET語言(C#或VB.NET)編寫Selenium測試,或從Selenium IDE導出腳本到一個C#文件,然後複製代碼到你剛剛創建的類文件。

    - 編寫自己的簡單main()程序或你可以包含NUnit在你的項目中運行你的測試。這些概念在本章稍後說明。

    - 從控制檯運行Selenium服務器

    - 運行你的測試從IDE,從你的NUnit GUI或從命令行。

在Visual Studio中配置.NET客戶端驅動程序的特定詳細信息,參見附錄的.NET客戶端驅動程序配置

使用Ruby客戶端驅動程序

    - 如果你還沒有RubyGems,從RubyForge安裝它。

    - 運行gem安裝selenium-client。

    - 在測試腳本的頂部增加需要的"selenium/client"

    - 使用任何Ruby測試工具編寫測試腳本(例如Test::Unit,Mini::Test或RSpec)

    - 從控制檯運行Selenium RC服務器

    - 以你運行任何其它的Ruby腳本相同的方式執行你的測試

有關Ruby客戶端程序的詳細信息,參見Selenium-Client文檔

從Selenese到一個程序

爲了使用Selenium RC,這主要的任務是轉換你的Selenese到一個編程語言。在本節,我們提供幾個不同的語言特定的示例。

樣品測試腳本

讓我們從一個Selenese測試腳本示例開始。想象一下用Selenium IDE記錄下面的測試。

open /
type q
selenium rc
clickAndWait btnG
assertTextPresent Results * for selenium rc

註釋:這個示例使用Google搜索引擎頁http://www.google.com

作爲一個編程代碼的Selenese

這是導出到每一個支持的編程語言的測試腳本(通過Selenium IDE)。如果你至少有面向對象編程語言的基本知識,你會理解Selenium如何運行Selenese命令,通過閱讀下面的這些示例中的一個。要以一個特定的語言查看示例,選擇這些按鈕中的一個。




     /** Add JUnit framework to your classpath if not already there
     *    for this example to work
     */
package com.example.tests;

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class NewTest extends SeleneseTestCase {
     public void setUp() throws Exception {
           setUp("http://www.google.com/", "*firefox");
    }
      public void testNew() throws Exception {
          selenium.open("/");
          selenium.type("q", "selenium rc");
          selenium.click("btnG");
          selenium.waitForPageToLoad("30000");
          assertTrue(selenium.isTextPresent("Results * for selenium rc"));
    }
}

在下一節,我們會解釋如何去構造一個測試程序,使用生成的代碼。

編寫你的測試

現在我們將演示如何編寫你自己的測試,使用示例以支持的每一種編程語言。基本上有兩個任務。

    - 從Selenium IDE生成你的腳本到一個編程語言,可選地修改結果

    - 編寫一個非常簡單的main程序執行生成的代碼。

可選地,你可以採用一個測試引擎平臺,像Java的JUnit或TestNG,或.NET的NUnit,如果你使用這些語言中的一種。

在這裏,我們展示語言特定的示例。語言特定的API常常是彼此不同的,因此你可以爲每一個找到各自的解釋。

 •Java
 •C#
 •Python
 •Ruby
 •Perl, PHP
 

Java

對Java,人們要麼使用JUnit或TestNG作爲測試引擎。某些開發環境,像Eclipse有對這些插件的直接支持。這使它更容易使用。講授JUnit或TestNG超出了本文檔的範疇,相關材料可以在線獲得,也有可得到的出版物。如果你在一個使用Java的機構裏,你的開發人員已經有這些測試框架中的一個的使用經驗。

你可能想要重命名測試類,將“NewTest”改成你自己選擇的某個名稱。同樣你需要改變在下面的語句中的瀏覽器打開參數。


selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com/");
 

Selenium IDE生成的代碼看起來像這個。示例有手工增加的註釋,用於附加的澄清。


package com.example.tests;

// 指定測試包


import com.thoughtworks.selenium.*;

// 這是驅動程序的導入。你將使用這個實例化一個瀏覽器,並讓它做你要求的。


import java.util.regex.Pattern;

// Selenium IDE增加一個Pattern模塊。因爲有時需要使用它進行正則表達式驗證。

// 如果你使用它,你可以移除


public class NewTest extends SeleneseTestCase {

// 我們創建我們的Selenium測試案例


      public void setUp() throws Exception {
        setUp("http://www.google.com/", "*firefox");

             // 實例化和啓動一個瀏覽器

      }

      public void testNew() throws Exception {
           selenium.open("/");
           selenium.type("q", "selenium rc");
           selenium.click("btnG");
           selenium.waitForPageToLoad("30000");
           assertTrue(selenium.isTextPresent("Results * for selenium rc"));

           // 這些是測試步驟

     }
}
C#

.NET客戶端驅動程序與Microsoft.NET一起工作。可以與任何.NET測試框架,如NUnit或Visual Studio 2005 Team System。

Selenium IDE假定你使用NUnit作爲你的測試框架。在下面生成的測試代碼中,你可以看到。它包括用於NUnit的using語句,以及響應的NUnit屬性,標識測試類中每一個成員函數的角色。

你可能想要重命名測試類,將“NewTest”改成你自己選擇的某個名稱。同樣你需要改變在下面的語句中的瀏覽器打開參數。

selenium = new DefaultSelenium("localhost", 4444, "*iehta", "http://www.google.com/");

生成的代碼看起來類似於這個。

你可以允許NUnit去管理你的測試的執行。或替代地,你可以編寫簡單的main()程序,實例化測試對象和依次運行三個方法中的每一個SetupTest(),TheNewTest(),和TeardownTest()。

Python

 Pyunit是使用於Python的測試框架,要學習Pyunit,參考它的官方文檔

基本的測試結構是:

 

Ruby
 

Selenium IDE生成適當的Ruby代碼,但需要老的Selenium gem。因爲Selenium的官方Ruby驅動程序是Selenium-Client gem,而不是老的Selenium gem。實際上,Selenium gem已經停止繼續開發。

 

因此,建議更新任何IDE生成的Ruby腳本如下:

1、在行1,改變必須的“selenium”到必須的“selenium/client”

2、在行11,改變Selenium::SeleniumDriver.new到Selenium::Client::Driver.new

你可能也想要改變類名稱到比"Untitled"包含更多意義的某個名稱,並改變測試方法的名稱"test_untitled".

這裏是一個,上面描述的,由Selenium IDE生成的Ruby代碼修改而創建的簡單示例。

Perl, PHP

文檔團隊的成員還沒有用Perl或PHP語言使用過Selenium RC。如果你正用這兩種語言中的一種使用Selenium RC,請聯繫文檔團隊(參見做出貢獻一章)。我們很願意包含來自你的某些示例或經驗,以支持Perl和PHP用戶。


© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.
目錄    上一頁    下一頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章