一、 簡述
1. 介紹
Selenium是ThoughtWorks專門為Web應用程序編寫的一個驗收測試工具。
Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE、 Mozilla Firefox、Google Chrome等。這個工具的主要功能包括:測試與瀏覽器的兼容性,測試系統功能。支持自動錄制動作和自動生成Net、Java、Perl等不同語言的測試腳本。
2. 優勢
1. 更加逼真的模擬用戶操作網頁
2. 跨平台(Windows,Linux,mac,android,IOS) ,
3. 跨瀏覽器(Firefox,IE,Chrome, Opera,Safari)
4. 多語言支持(java,c#,python,ruby,php,perl,js)
5. 開源免費
6. 綜上所述,selenium是可以個性定制的,可以適應不同團隊的,不要錢的自動化web測試工具
3. Selenium與QTP
共同特征
1. 都可以進行Web測試
2. 都支持錄制回放
3. 兩者錄制的腳本都有較差的兼容性,都需要有經驗的開發人員進行調整。
QTP的優勢
1. QTP 功能很完善,界面很強大。還對window等其他程序的支持
2. QTP錄制功能強大,而Selenium IDE只是一個火狐插件,功能有限。
3. QTP有對象庫,方便我們管理對象,而selenium只能進行編碼維護,或者自己編寫界面。
4. QTP有非常優秀的測試報告,Selenium自己沒有,需要集成其他報表產品(比如結合JUnit)
5. QTP對測試人員的要求低,Selenium不會編程能做的事情有限。
Selenium的優勢
1. 用戶仿真:Selenium在瀏覽器后台執行,它通過修改HTML的DOM(文檔對象模型)來執行操作,實際上是通過 javascript來控制的。執行時窗口可以最小化,可以在同一機器執行多個測試。而QTP完全模擬終端用戶,獨占屏幕,只能開啟一個獨占的實例。
2. Selenium一個機器可以跑多種腳本,但QTP獨占模式必須要大量測試機器。
3. 瀏覽器支持。 Selenium支持IE, Firefox, Safari和Opera等,而QTP僅支持IE和Firefox。
4. Selenium2 是完全面向對象的設計 ,讓開發者更加得心應手,QTP不是。
5. Selenium可以用 java,c#,python,ruby,php,perl,HTML,但是QTP只能使用VB來編寫。
6. QTP只支持Windows,Selenium可以支持Windows,Linux,mac,android,IOS等。
7. Selenium的開發環境由公司決定, QTP只能在自己的IDE中使用。
8. QTP的代碼提示等功能太弱,加大初學者難度。
9. 最重要的是Selenium不要錢。
4. 參考文檔
幫助文檔http://docs.seleniumhq.org/docs/
5. Selenium版本介紹
• Selenium 主要分為
Selenium core:為selenium的核心部分,現在已經不單獨使用了;
Selenium RC(Selenium1):為上一代產品,現在已經被2代所取代;
Selenium IDE:是火狐上的錄制插件;
Selenium Grid(用於並發測試) ;
Selenium WebDriver(Selenium2)
• Selenium2已經包含了一代所有代碼,並實現了一些一代無法完成的功能,並具有面向對象,拓展性好等特點。
二、 下載
1. Selenium 下載
1)進入官網下載http://www.seleniumhq.org/download/
2. 其他下載
Firefox下載 http://firefox.com.cn/download/
Firebug下載:https://addons.mozilla.org/firefox/addon/1843
FirePath 下載 https://addons.mozilla.org/zh-CN/firefox/addon/firepath/
或者在火狐中下載
三、 Selenium IDE的使用
1. 界面介紹
安裝好IDE后會在FF中工具選擇下有Selenium IDE的選項
點擊打開
打開之后出現如下界面
以上
1填寫待測網站站點
2腳本的速度設置,執行暫停等
3錄制 默認是進入錄制狀態,點擊一下取消錄制
4測試腳本
5測試的代碼
6日志,消息等
2. 關鍵設置
點擊options
Format
如果出現: (want the formats back?click read more,這是無法把錄制的腳本轉換為其他語言的。請點擊options下面的options…進入如下設置界面
選擇標紅的選項,點擊確定。
出現以下選項為設置成功
3. 使用舉例
上圖標明了一些Selenium IDE的主要功能。其中,由Command,Target,Value組成的表格就是腳本,每個腳本都是由一條一條的Action(行為)組成,而每個 Action又由(Command,Target,Value)三者組成。Command就是動作,Target指的是Web中的某個對象,比如:文字,輸入框等等,,而Value就是這個對象的值。
當彈出上面的IDE窗口后,我們就可以開始Selenium的腳本錄制了,右上角有個紅色的圓點,當它下按時(如上圖)就表示IDE正在進行腳本錄制。 OK,開始錄制,錄制的時候,直接操作Firefox瀏覽器窗口就可以了,IDE會自動記錄你的操作的,下面我演示一個例子:
上圖例子中,我的操作步驟如下:
(1).在地址欄輸入:http://www.baidu.com/
(2).登陸百度首頁后,在查詢框輸入“hyddd”。
(3).按“百度一下”按鈕
(4).進入搜索結果頁面后,右鍵單擊第一條記錄(即:hyddd - 博客園),在右鍵彈出菜單中,單擊“Verify TestPersent hyddd - 博客園”。
(5).單擊第一條記錄(即:進入hyddd - 博客園)
(6).Firefox彈出一個新Tab頁面,並進入了我的博客。
OK,現在看看我們的Selenium IDE錄制的結果吧:>
上圖中,中間的表格就是錄制的結果,你可以按“運行腳本”重新回放腳本看看,值得注意的是,在運行時,Firefox可能會認為腳本中最后一個操作(即: 步驟6)為非法彈出框,瀏覽器會自動阻止其彈出,這個需要設置一下Firefox,具體位置 是:Firefox->Menubar->Tools->options->content->Block pop-up Window,你可以把鈎去掉或者在Exceptions里面添加相應的網址。
恩,到此為止,腳本錄制圓滿完成:>
在運行腳本后,你會發現IDE表格的顏色發生了變化,運行前,腳本表格為白色,成功運行完畢后,表格為青色,其中還分為深青色和淺青色兩種,淺青色表示: 動作成功,如:打開網頁成功,點擊按鈕成功等等,而深青色表示:判斷正確,如:“hyddd - 博客園”這段文字在頁面中存在等等。 看完正確,現在我們看看出錯時的情況吧。
出錯時,表格可能會出現兩種顏色,一種是淺粉紅色,一種是深粉紅色。淺粉紅色表示判斷結果為false,這種情況案例還是會繼續執行下去,判斷的失敗不會影響案例的運行,深粉紅色表示動作失敗,如:沒有找到按鈕等(如上圖),這種情況下案例會停止運行。
4. 代碼轉換
點擊以下可以轉化為對應語言的版本
選擇 c#、NUint?WebDriver
警告轉換為c#之后就不能再IDE中執行了
點擊確定 為以下c#代碼
可以復制一下代碼粘貼到vs中進行運行
1. 建立selenium測試項目
2. 編碼
1創建一個項目,這兒我以控制台程序為例
2 下載selenium c#包 [selenium-dotnet-2.32.0.zip]並解壓
3增加引用
我是用的donet4.0所以選擇4.0的。
全選所有DLL文件,點擊OK
項目引用會有如下文件
復制IDE中代碼 修改之后就可以跑起來第一個selenium腳本了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using NUnit.Framework;
using OpenQA.Selenium.Firefox;
namespace ConsoleApplication1
{
[TestFixture]
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.SetupTest();
p.TheUntitledTest();
p.TeardownTest();
}
private IWebDriver driver;
private StringBuilder verificationErrors;
private string baseURL;
private bool acceptNextAlert = true;
[SetUp]
public void SetupTest()
{
driver = new FirefoxDriver();
baseURL = "http://www.baidu.com/";
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
try
{
driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
Assert.AreEqual("", verificationErrors.ToString());
}
[Test]
public void TheUntitledTest()
{
driver.Navigate().GoToUrl(baseURL + "/");
driver.FindElement(By.Id("kw")).Clear();
driver.FindElement(By.Id("kw")).SendKeys("selenium");
driver.FindElement(By.Id("su")).Click();
driver.FindElement(By.Id("kw")).Clear();
driver.FindElement(By.Id("kw")).SendKeys("selenium ide的Ì?使º1用®?");
driver.FindElement(By.Id("su")).Click();
}
private bool IsElementPresent(By by)
{
try
{
driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private bool IsAlertPresent()
{
try
{
driver.SwitchTo().Alert();
return true;
}
catch (NoAlertPresentException)
{
return false;
}
}
private string CloseAlertAndGetItsText()
{
try
{
IAlert alert = driver.SwitchTo().Alert();
string alertText = alert.Text;
if (acceptNextAlert)
{
alert.Accept();
}
else
{
alert.Dismiss();
}
return alertText;
}
finally
{
acceptNextAlert = true;
}
}
}
}