Selenium是一個(gè)很好用的Web自動化測試工具。Aaron很久以前使用過Selenium,不過僅僅用了其提供的API來寫測試代碼,也在blog上發(fā)過一個(gè)簡單的代碼示例。近來有好幾個(gè)博友加我MSN問我有關(guān)Selenium錄制的問題,可惜以前沒有使用過,愛莫能助。鑒于此,昨天晚上磨嘰了一陣子終于讓腳本給跑起來了。Aaron希望對于那些博友及其他人會有幫助。
Selenium IDE簡介和安裝
Selenium錄制功能是由Selenium IDE實(shí)現(xiàn)的。根據(jù)官方網(wǎng)站當(dāng)前的介紹:
Selenium IDE is a Firefox add-on that records clicks, typing, and other actions to make a test, which you can play back in the browser.
上面已經(jīng)寫的很清楚了,Selenium IDE可以幫助我們記錄下點(diǎn)擊,輸入等行為并可以支持在瀏覽器中回放。
當(dāng)然還有一點(diǎn)想必讀者已經(jīng)看出來了,Selenium IDE是一個(gè)Firefox插件,所以Selenium當(dāng)前的版本(2009-1-18)是不支持IE的錄制的,當(dāng)然這對于腳本的使用影響并不是很大——除非你是想錄制之后直接使用,那你就會失望了,selenium當(dāng)前的版本并沒有達(dá)到那種強(qiáng)悍的程度。
Selenium IDE的安裝很簡單,如果使用Firefox 2.0,可以直接將官網(wǎng)上下載的文件(例如selenium-ide-1.0-beta-2.xpi)置于Firefox安裝路徑下的extensions文件夾(默認(rèn)安裝路徑C:\Program Files\Mozilla Firefox\extensions,而Firefox1.5的默認(rèn)路徑在C:\Program Files\Firefox Plus\App\firefox\extensions)下,然后關(guān)閉當(dāng)前打開的Firefox窗口,重新打開即可執(zhí)行自動安裝。Aaron在使用過程中并未出現(xiàn)過安裝失敗的情況。
如果你使用的是Firefox 3.0,恭喜你中獎(jiǎng)了:你會失敗,原因也很簡單,selenium IDE目前支持的最高版本還沒有達(dá)到我們3.0的高度。(更正:感謝一樓提醒,Aaron已驗(yàn)證1.0 beta 2版本的Selenium IDE可以在Firefox3中安裝成功,給大家造成的誤導(dǎo)Aaron表示誠摯的歉意)
另外,需要提醒的是:使用最新版本的Selenium IDE錄制可能會導(dǎo)致錄制失?。╯elenium-ide-1.0-beta-1.xpi,selenium-ide-1.0-beta-2.xpi版本在Aaron使用過程中均會出現(xiàn)錯(cuò)誤,提示:table view is not available in this format),這個(gè)bug已經(jīng)被人提交到Selenium論壇上面去了,提交者使用的是Win XP,而Aaron使用的是Win 2003,因此為了避免大家浪費(fèi)時(shí)間——盡管只是一種可能性的浪費(fèi),Aaron推薦暫時(shí)使用我試驗(yàn)中使用的0.8.7版本。
聲明:因?yàn)殡S著版本的變化,本文中的部分內(nèi)容與最新版本的使用可能會不一致,因此Aaron介紹的內(nèi)容適用于于2009-1-18之前的selenium版本:
Project
Release Date
Version
Selenium Core
Jan 12, 2009
1.0 beta 2
Selenium IDE
June 3
2008 1.0 beta 2
Selenium RC
Jan 12, 2009
1.0 beta 2
Selenium Grid
Nov 30, 2008
1.0.3
Selenium IDE腳本錄制
好了,安裝完成了,接下來我們就直接使用IDE來錄制吧。啟動Firefox瀏覽器,在Firefox菜單欄中單擊“工具”菜單,我們會看到Selenium IDE是其子菜單:
單擊Selenium IDE項(xiàng)我們可以看到彈出Selenium IDE窗口:
然后我們就可以使用Selenium IDE進(jìn)行錄制了。至于錄制的詳細(xì)過程我就不詳細(xì)介紹了,不過還是提醒大家一下,我們可以使用Selenium IDE的菜單欄“Options”菜單中的“Format”子菜單將腳本轉(zhuǎn)化為各自所需的語言類型。
Aaron在文章接下來的部分使用C#作為示例語言。
編輯Selenium IDE腳本
Aaron錄制的腳本工作流程是:打開Firefox瀏覽器->打開Google首頁->在google搜索框中輸入“google”->左鍵單擊“google 搜索”按鈕->在新頁面選中“圖片、新聞搜索”以驗(yàn)證:
最后得到的C#腳本如下:
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;
namespace SeleniumTests
{
[TestFixture]
public class NewTest
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com");
selenium.Start();
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
selenium.Stop();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheNewTest()
{
selenium.Open("http://www.google.cn/");
Assert.AreEqual("Google", selenium.GetTitle());
selenium.Type("q", "google");
selenium.Click("btnG");
selenium.WaitForPageToLoad("30000");
Assert.AreEqual("google - Google 搜索", selenium.GetTitle());
try
Selenium IDE實(shí)踐(使用Selenium錄制)
2009-10-16 作者:吳朝東 來源:cnblogs.com
Selenium是一個(gè)很好用的Web自動化測試工具。Aaron很久以前使用過Selenium,不過僅僅用了其提供的API來寫測試代碼,也在blog上發(fā)過一個(gè)簡單的代碼示例。近來有好幾個(gè)博友加我MSN問我有關(guān)Selenium錄制的問題,可惜以前沒有使用過,愛莫能助。鑒于此,昨天晚上磨嘰了一陣子終于讓腳本給跑起來了。Aaron希望對于那些博友及其他人會有幫助。
Selenium IDE簡介和安裝
Selenium錄制功能是由Selenium IDE實(shí)現(xiàn)的。根據(jù)官方網(wǎng)站當(dāng)前的介紹:
Selenium IDE is a Firefox add-on that records clicks, typing, and other actions to make a test, which you can play back in the browser.
上面已經(jīng)寫的很清楚了,Selenium IDE可以幫助我們記錄下點(diǎn)擊,輸入等行為并可以支持在瀏覽器中回放。
當(dāng)然還有一點(diǎn)想必讀者已經(jīng)看出來了,Selenium IDE是一個(gè)Firefox插件,所以Selenium當(dāng)前的版本(2009-1-18)是不支持IE的錄制的,當(dāng)然這對于腳本的使用影響并不是很大——除非你是想錄制之后直接使用,那你就會失望了,selenium當(dāng)前的版本并沒有達(dá)到那種強(qiáng)悍的程度。
Selenium IDE的安裝很簡單,如果使用Firefox 2.0,可以直接將官網(wǎng)上下載的文件(例如selenium-ide-1.0-beta-2.xpi)置于Firefox安裝路徑下的extensions文件夾(默認(rèn)安裝路徑C:\Program Files\Mozilla Firefox\extensions,而Firefox1.5的默認(rèn)路徑在C:\Program Files\Firefox Plus\App\firefox\extensions)下,然后關(guān)閉當(dāng)前打開的Firefox窗口,重新打開即可執(zhí)行自動安裝。Aaron在使用過程中并未出現(xiàn)過安裝失敗的情況。
如果你使用的是Firefox 3.0,恭喜你中獎(jiǎng)了:你會失敗,原因也很簡單,selenium IDE目前支持的最高版本還沒有達(dá)到我們3.0的高度。(更正:感謝一樓提醒,Aaron已驗(yàn)證1.0 beta 2版本的Selenium IDE可以在Firefox3中安裝成功,給大家造成的誤導(dǎo)Aaron表示誠摯的歉意)
另外,需要提醒的是:使用最新版本的Selenium IDE錄制可能會導(dǎo)致錄制失?。╯elenium-ide-1.0-beta-1.xpi,selenium-ide-1.0-beta-2.xpi版本在Aaron使用過程中均會出現(xiàn)錯(cuò)誤,提示:table view is not available in this format),這個(gè)bug已經(jīng)被人提交到Selenium論壇上面去了,提交者使用的是Win XP,而Aaron使用的是Win 2003,因此為了避免大家浪費(fèi)時(shí)間——盡管只是一種可能性的浪費(fèi),Aaron推薦暫時(shí)使用我試驗(yàn)中使用的0.8.7版本。
聲明:因?yàn)殡S著版本的變化,本文中的部分內(nèi)容與最新版本的使用可能會不一致,因此Aaron介紹的內(nèi)容適用于于2009-1-18之前的selenium版本:
Project
Release Date
Version
Selenium Core
Jan 12, 2009
1.0 beta 2
Selenium IDE
June 3
2008 1.0 beta 2
Selenium RC
Jan 12, 2009
1.0 beta 2
Selenium Grid
Nov 30, 2008
1.0.3
Selenium IDE腳本錄制
好了,安裝完成了,接下來我們就直接使用IDE來錄制吧。啟動Firefox瀏覽器,在Firefox菜單欄中單擊“工具”菜單,我們會看到Selenium IDE是其子菜單:
單擊Selenium IDE項(xiàng)我們可以看到彈出Selenium IDE窗口:
然后我們就可以使用Selenium IDE進(jìn)行錄制了。至于錄制的詳細(xì)過程我就不詳細(xì)介紹了,不過還是提醒大家一下,我們可以使用Selenium IDE的菜單欄“Options”菜單中的“Format”子菜單將腳本轉(zhuǎn)化為各自所需的語言類型。
Aaron在文章接下來的部分使用C#作為示例語言。
編輯Selenium IDE腳本
Aaron錄制的腳本工作流程是:打開Firefox瀏覽器->打開Google首頁->在google搜索框中輸入“google”->左鍵單擊“google 搜索”按鈕->在新頁面選中“圖片、新聞搜索”以驗(yàn)證:
最后得到的C#腳本如下:
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;
namespace SeleniumTests
{
[TestFixture]
public class NewTest
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com");
selenium.Start();
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
selenium.Stop();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheNewTest()
{
selenium.Open("http://www.google.cn/");
Assert.AreEqual("Google", selenium.GetTitle());
selenium.Type("q", "google");
selenium.Click("btnG");
selenium.WaitForPageToLoad("30000");
Assert.AreEqual("google - Google 搜索", selenium.GetTitle());
try
{
Assert.IsTrue(selenium.IsTextPresent("圖片、新聞搜索"));
}
catch (AssertionException e)
{
verificationErrors.Append(e.Message);
}
}
}
}
一般情況下,這些錄制的腳本在Selenium IDE中會重新運(yùn)行成功,但如果我們將腳本直接拿出來在我們自己的IDE下會怎么樣呢?
為了更方便編輯我們錄制的腳本,將這段代碼拷貝到VS中:新建一個(gè)類庫項(xiàng)目TestSeleniumSimple,并將類庫項(xiàng)目下的class1.cs文件中的內(nèi)容用錄制的腳本覆蓋。編譯我們的類庫項(xiàng)目TestSeleniumSimple,很遺憾我們看到了
不用驚訝,因?yàn)槲覀冏屑?xì)看一看代碼就知道了,原來錄制的腳本中引用了一些內(nèi)容:
using NUnit.Framework;
using Selenium;
對于第一個(gè)我們需要安裝NunitFramework,這個(gè)可以到Nunit官網(wǎng)上下載,如果你同時(shí)下載了Selenium-RC,你可以在\Selenium-RC\selenium-remote-control-1.0-beta-2-dist\selenium-remote-control-1.0-beta-2\selenium-dotnet-client-driver-1.0-beta-2文件夾下找到它,同時(shí)也可以找到我們“using Selenium”所需要的ThoughtWorks.Selenium.Core.dll,添加對這兩個(gè)dll的引用,然后再編譯。這個(gè)時(shí)候就可以生成成功了。
在測試框架中回放腳本
好事總是多磨,我們編譯成功的腳本很可惜,不能運(yùn)行。在編譯完腳本后出現(xiàn)Nunit不能使用的問題,不知道是偶然還是有必然因素。還好Aaron的腳本是在虛擬機(jī)中錄制的,所以Aaron將編譯成功的腳本直接拿到了物理機(jī)上運(yùn)行。打開Nunit(Aaron使用的是NUnit-2.4.3-net-2.0版本),然后導(dǎo)入TestSeleniumSimple.dll(TestSeleniumSimple類庫的產(chǎn)品),點(diǎn)擊運(yùn)行,又出錯(cuò)了:
原來是服務(wù)器,還記得我們剛才引用了Selenium-RC中的兩個(gè)DLL嗎?Selenium RC中RC是Remote Client的意思,既然有Client那么一定是有Server了,實(shí)際上還真有這樣一個(gè)Selenium-server,一個(gè)用來啟動web瀏覽器的家伙。我們找到Selenium-RC的目錄下的Server子目錄A:
\Selenium-RC\selenium-remote-control-1.0-beta-2-dist\selenium-remote-control-1.0-beta-2\selenium-server-1.0-beta-2
里面由一個(gè)selenium-server.jar文件,我們需要在命令行下啟動這個(gè)server。
在命令行下定位到子目錄A處,接著輸入:
Java –jar selenium-server.jar
這個(gè)時(shí)候我們可以看到我們順利啟動了Selenium Server了,試著運(yùn)行一下剛才失敗的測試腳本,終于綠了:
我們還可以注意到命令行工具中也有運(yùn)行的信息:
比如我們在上圖的倒數(shù)第四條信息中看到了:
13:04:57.406 INFO - Command request: isTextPresent[圖片、新聞搜索, ] on session
f68a3d7d0d7b4de8bfdb95ae1c553e6b
等很詳細(xì)的內(nèi)容。
總結(jié)
其實(shí)我們也可以不使用NUnit,而直接使用VSTS中Test Edition組件來運(yùn)行我們的測試腳本,為了使腳本更穩(wěn)定或者運(yùn)行更快,我們也可以編輯腳本對時(shí)間做一些處理。我們也可以編輯腳本已增加更多的斷言以確保待測頁面顯示了我們想要的內(nèi)容或者沒有顯示我們不想要的內(nèi)容等等。
對于Selenium IDE錄制腳本,Aaron稍微總結(jié)一下:
1, 使用Firefox
2, 編譯之前添加對于NUnit.Framework.dll和ThoughtWorks.Selenium.Core.dll的引用
3, 記得啟動Selenium Server
4, 為提高腳本質(zhì)量以滿足測試穩(wěn)定性等需求,應(yīng)該對錄制的腳本進(jìn)行編輯
當(dāng)然,在使用Selenium的過程中,我們還會碰到其他各種奇怪的問題而導(dǎo)致腳本出現(xiàn)問題。限于篇幅和時(shí)間問題,Aaron就不繼續(xù)討論了。另外,我們也可以寫一些程序來幫助我們更好的使用Selenium(比如自動啟動selenium-server,自動運(yùn)行腳本等等),這些內(nèi)容Aaron也留給大家自己去實(shí)踐~
{
Assert.IsTrue(selenium.IsTextPresent("圖片、新聞搜索"));
}
catch (AssertionException e)
{
verificationErrors.Append(e.Message);
}
}
}
}
一般情況下,這些錄制的腳本在Selenium IDE中會重新運(yùn)行成功,但如果我們將腳本直接拿出來在我們自己的IDE下會怎么樣呢?
為了更方便編輯我們錄制的腳本,將這段代碼拷貝到VS中:新建一個(gè)類庫項(xiàng)目TestSeleniumSimple,并將類庫項(xiàng)目下的class1.cs文件中的內(nèi)容用錄制的腳本覆蓋。編譯我們的類庫項(xiàng)目TestSeleniumSimple,很遺憾我們看到了
不用驚訝,因?yàn)槲覀冏屑?xì)看一看代碼就知道了,原來錄制的腳本中引用了一些內(nèi)容:
using NUnit.Framework;
using Selenium;
對于第一個(gè)我們需要安裝NunitFramework,這個(gè)可以到Nunit官網(wǎng)上下載,如果你同時(shí)下載了Selenium-RC,你可以在\Selenium-RC\selenium-remote-control-1.0-beta-2-dist\selenium-remote-control-1.0-beta-2\selenium-dotnet-client-driver-1.0-beta-2文件夾下找到它,同時(shí)也可以找到我們“using Selenium”所需要的ThoughtWorks.Selenium.Core.dll,添加對這兩個(gè)dll的引用,然后再編譯。這個(gè)時(shí)候就可以生成成功了。
在測試框架中回放腳本
好事總是多磨,我們編譯成功的腳本很可惜,不能運(yùn)行。在編譯完腳本后出現(xiàn)Nunit不能使用的問題,不知道是偶然還是有必然因素。還好Aaron的腳本是在虛擬機(jī)中錄制的,所以Aaron將編譯成功的腳本直接拿到了物理機(jī)上運(yùn)行。打開Nunit(Aaron使用的是NUnit-2.4.3-net-2.0版本),然后導(dǎo)入TestSeleniumSimple.dll(TestSeleniumSimple類庫的產(chǎn)品),點(diǎn)擊運(yùn)行,又出錯(cuò)了:
原來是服務(wù)器,還記得我們剛才引用了Selenium-RC中的兩個(gè)DLL嗎?Selenium RC中RC是Remote Client的意思,既然有Client那么一定是有Server了,實(shí)際上還真有這樣一個(gè)Selenium-server,一個(gè)用來啟動web瀏覽器的家伙。我們找到Selenium-RC的目錄下的Server子目錄A:
\Selenium-RC\selenium-remote-control-1.0-beta-2-dist\selenium-remote-control-1.0-beta-2\selenium-server-1.0-beta-2
里面由一個(gè)selenium-server.jar文件,我們需要在命令行下啟動這個(gè)server。
在命令行下定位到子目錄A處,接著輸入:
Java –jar selenium-server.jar
這個(gè)時(shí)候我們可以看到我們順利啟動了Selenium Server了,試著運(yùn)行一下剛才失敗的測試腳本,終于綠了:
我們還可以注意到命令行工具中也有運(yùn)行的信息:
比如我們在上圖的倒數(shù)第四條信息中看到了:
13:04:57.406 INFO - Command request: isTextPresent[圖片、新聞搜索, ] on session
f68a3d7d0d7b4de8bfdb95ae1c553e6b
等很詳細(xì)的內(nèi)容。
總結(jié)
其實(shí)我們也可以不使用NUnit,而直接使用VSTS中Test Edition組件來運(yùn)行我們的測試腳本,為了使腳本更穩(wěn)定或者運(yùn)行更快,我們也可以編輯腳本對時(shí)間做一些處理。我們也可以編輯腳本已增加更多的斷言以確保待測頁面顯示了我們想要的內(nèi)容或者沒有顯示我們不想要的內(nèi)容等等。
對于Selenium IDE錄制腳本,Aaron稍微總結(jié)一下:
1, 使用Firefox
2, 編譯之前添加對于NUnit.Framework.dll和ThoughtWorks.Selenium.Core.dll的引用
3, 記得啟動Selenium Server
4, 為提高腳本質(zhì)量以滿足測試穩(wěn)定性等需求,應(yīng)該對錄制的腳本進(jìn)行編輯
當(dāng)然,在使用Selenium的過程中,我們還會碰到其他各種奇怪的問題而導(dǎo)致腳本出現(xiàn)問題。限于篇幅和時(shí)間問題,Aaron就不繼續(xù)討論了。另外,我們也可以寫一些程序來幫助我們更好的使用Selenium(比如自動啟動selenium-server,自動運(yùn)行腳本等等),這些內(nèi)容Aaron也留給大家自己去實(shí)踐~