Selenium 是 thoughtworks公司的一個(gè)集成測(cè)試的強(qiáng)大工具。最近參與了一個(gè)系統(tǒng)移植的項(xiàng)目,正好用到這個(gè)工具,
把一些使用心得分享給大家,希望大家能多多使用這樣的強(qiáng)大的,免費(fèi)的工具,來保證我們的質(zhì)量。
Selenium 的文檔現(xiàn)存的不少,不過都太簡(jiǎn)單了。使用Selenium的時(shí)候,我更多的是直接去看API文檔,好在API不錯(cuò),
一個(gè)一個(gè)看,就能找到所需要的 :-) 官方網(wǎng)站:http://www.openqa.org/selenium/
好,下面進(jìn)入正題!
一、Selenium 的版本
Selenium 現(xiàn)在存在2個(gè)版本,一個(gè)叫 selenium-core, 一個(gè)叫selenium-rc 。
selenium-core 是使用HTML的方式來編寫測(cè)試腳本,你也可以使用 Selenium-IDE來錄制腳本,但是目前Selenium-IDE
只有 FireFox 版本。
Selenium-RC 是 selenium-remote control 縮寫,是使用具體的語(yǔ)言來編寫測(cè)試類。
selenium-rc 支持的語(yǔ)言非常多,這里我們著重關(guān)注java的方式。這里講的也主要是 selenium-rc,因?yàn)閭€(gè)人還是喜歡這種
方式 :-)
二、一些準(zhǔn)備工作
1、當(dāng)然是下載 selenium 了,到 http://www.openqa.org/selenium/ 下載就可以了,記得選擇selenium-rc 的版本。
2、學(xué)習(xí)一下 xpath 的知識(shí)。有個(gè)教程:http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
一定要學(xué)習(xí)這個(gè),不然你根本看不懂下面的內(nèi)容!
3、安裝 jdk1.5
三、selenium-rc 一些使用方法
在 selenium-remote-control-0.9.0\server 目錄里,我們運(yùn)行 java -jar selenium-server.jar
之后你就會(huì)看到一些啟動(dòng)信息。要使用 selenium-rc ,啟動(dòng)這個(gè)server 是必須的。
當(dāng)然,啟動(dòng)的時(shí)候有許多參數(shù),這些用法可以在網(wǎng)站里看看教程,不過不加參數(shù)也已經(jīng)足夠了。
selenium server 啟動(dòng)完畢了,那么我們就可以開始編寫測(cè)試類了!
我們先有個(gè)概念,selenium 是模仿瀏覽器的行為的,當(dāng)你運(yùn)行測(cè)試類的時(shí)候,你就會(huì)發(fā)現(xiàn)selenium 會(huì)打開一個(gè)
瀏覽器,然后瀏覽器執(zhí)行你的操作。
好吧,首先生成我們的測(cè)試類:
java 代碼

public class TestPage2 extends TestCase
{
private Selenium selenium;

protected void setUp() throws Exception
{
String url = “http://xxx.xxx.xxx.xxx/yyy”;
selenium = new DefaultSelenium("localhost", SeleniumServer.getDefaultPort
(), "*iexplore", url);
selenium.start();
super.setUp();
}

protected void tearDown() throws Exception
{
selenium.stop();
super.tearDown();
}
}

代碼十分簡(jiǎn)單,作用就是初始化一個(gè) Selenium 對(duì)象。其中:
url : 就是你要測(cè)試的網(wǎng)站
localhost: 可以不是localhost,但是必須是 selenium server 啟動(dòng)的地址
*iexplore : 可以是其它瀏覽器類型,可以在網(wǎng)站上看都支持哪些。
下面我就要講講怎么使用selenium 這個(gè)對(duì)象來進(jìn)行測(cè)試。
1、測(cè)試文本輸入框
假設(shè)頁(yè)面上有一個(gè)文本輸入框,我們要測(cè)試的內(nèi)容是 在其中輸入一些內(nèi)容,然后點(diǎn)擊一個(gè)按鈕,看看頁(yè)面的是否跳轉(zhuǎn)
到需要的頁(yè)面。

public void test1()
{
selenium.open("http://xxx.xxx.xxx/yyy");
selenium.type("xpath=//input[@name='userID']", "test-user");
selenium.click("xpath=//input[@type='button']");
selenium.waitForPageToLoad("2000");
assertEquals(selenium.getTitle(), "Welcome");
}

上面的代碼是這個(gè)意思:
1、調(diào)用 selenium.open 方法,瀏覽器會(huì)打開相應(yīng)的頁(yè)面
2、使用 type 方法來給輸入框輸入文字
3、等待頁(yè)面載入
4、看看新的頁(yè)面標(biāo)題是不是我們想要的。
2、測(cè)試下拉框
java 代碼

public void test1()
{
selenium.open("http://xxx.xxx.xxx/yyy");
selenium.select("xpath=//SELECT[@name='SBBUSYO']", "index=1");
selenium.click("xpath=//input[@type='button']");
selenium.waitForPageToLoad("2000");
assertEquals(selenium.getTitle(), "Welcome");
}

可以看到,我們可以使用 select 方法來確定選擇下拉框中的哪個(gè)選項(xiàng)。
select 方法還有很多用法,具體去看看文檔吧。
3、測(cè)試check box
java 代碼

public void test1()
{
selenium.open("http://xxx.xxx.xxx/yyy");
selenium.check("xpath=//input[@name='MEICK_000']");
selenium.click("xpath=//input[@type='button']");
selenium.waitForPageToLoad("2000");
assertEquals(selenium.getTitle(), "Welcome");
}

我們可以使用 check 方法來確定選擇哪個(gè)radio button
4、得到文本框里的文字
java 代碼
assertEquals(selenium.getValue("xpath=//input[@name='WNO']"), "1");
getValue 方法就是得到文本框里的數(shù)值,可不是 getText 方法,用錯(cuò)了可就郁悶了。
5、判斷頁(yè)面是否存在一個(gè)元素
java 代碼
assertTrue(selenium.isElementPresent("xpath=//input[@name='MEICK_000']"));
一般這個(gè)是用來測(cè)試當(dāng)刪除一些數(shù)據(jù)后,頁(yè)面上有些東西就不會(huì)顯示的情況。
6、判斷下拉框里選擇了哪個(gè)選項(xiàng)
java 代碼
assertEquals(selenium.getSelectedIndex("xpath=//SELECT[@name='HATIMING']"), "1");
這個(gè)可以用來判斷下拉框顯示的選項(xiàng)是否是期望的選項(xiàng)。
7、如果有 alert 彈出對(duì)話框怎么辦?
這個(gè)問題弄了挺長(zhǎng)時(shí)間,可以這樣來關(guān)閉彈出的對(duì)跨框:
java 代碼

if(selenium.isAlertPresent())
{
selenium.getAlert();
}
其實(shí)當(dāng)調(diào)用 selenium.getAlert() 時(shí),就會(huì)關(guān)閉 alert 彈出的對(duì)話框。
也可以使用 System.out.println(selenium.getAlert()) 來查看對(duì)跨框顯示的信息。
在測(cè)試的時(shí)候,有的人會(huì)顯示許多alert 來查看運(yùn)行時(shí)的數(shù)據(jù),那么我們可以用下面的方式來關(guān)閉那些 alert:
java 代碼

while(selenium.isAlertPresent())
{
selenium.getAlert();
}
8、如何測(cè)試一些錯(cuò)誤消息的顯示?
java 代碼
assertTrue(selenium.getBodyText().indexOf("錯(cuò)誤消息")>=0);
切記: getBodyText 返回的時(shí)瀏覽器頁(yè)面上的文字,不回包含html 代碼的,如果要顯示html 代碼,用下面這個(gè):
java 代碼
System.out.println(selenium.getHtmlSource());
以上就是最常用的幾個(gè)方法了,例如 click, type, getValue 等等。
還有就是一定要學(xué)習(xí) xpath, 其實(shí)xpath 也可以有“與、或、非”的操作:
java 代碼
四、其他
selenium 還有更多的用法,例如彈出頁(yè)面等等。當(dāng)面對(duì)沒見過的測(cè)試要求時(shí),我最笨的方法就是按照api文檔一個(gè)一個(gè)找,
好在不多,肯定能找到。
selenium.check("xpath=//input[(@name='KNYKBN')and(@value='Y')]");