[小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象
從這一篇開始,開始正式的介紹Selenium 以及相關(guān)的組件,本文的將討論如下問題:
- Selenium基本的概念以及在企業(yè)化測試框架中的位置
- Selenium核心對(duì)象(瀏覽器驅(qū)動(dòng)) Web Driver
- Selenium核心對(duì)象(Dom元素)Web Element
順便說明下,我所講到的是Selenium WebDriver的版本。
(一):Selenium基本概念
Selenium相關(guān)的概念的和資料在網(wǎng)上有很多。下面的這個(gè)是引用百度上面的介紹:
Selenium是一個(gè)用于Web應(yīng)用程序測試的工具。Selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite、Google Chrome等。這個(gè)工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能——?jiǎng)?chuàng)建回歸測試檢驗(yàn)軟件功能和用戶需求。支持自動(dòng)錄制動(dòng)作和自動(dòng)生成 .Net、Java、Perl等不同語言的測試腳本。
設(shè)置這一部分的內(nèi)容不是為了說明Selenium是什么,畢竟類似的資源隨便一搜就有一大把。我更想分享給大家的是Selenium本身在企業(yè)級(jí)的測試框架中處于一個(gè)什么樣的位置。就拿我后續(xù)文章想要給大家展示的測試架構(gòu)來說。Selenium所處的位置。如圖所示,Selenium不過是整個(gè)測試框架的一部分提供了針對(duì)B/S應(yīng)用程序的測試驅(qū)動(dòng)(即幫助我們提供了模擬在瀏覽器內(nèi)部進(jìn)行操作的功能),而整體的自動(dòng)化平臺(tái)的搭建還會(huì)結(jié)合其他的框架(如:單元測試框架<xUnit.Net>,針對(duì)Windows桌面應(yīng)用的驅(qū)動(dòng),針對(duì)手機(jī)應(yīng)用的驅(qū)動(dòng),提供數(shù)據(jù)訪問的能力... ...),對(duì)于如何構(gòu)建完整的測試框架有機(jī)會(huì)我會(huì)開一個(gè)新的主題文章來討論,不懂也沒有關(guān)系,這里只是希望初學(xué)者在一開始就有一個(gè)系統(tǒng)的概念,知道自己所學(xué)的內(nèi)容將來會(huì)用在哪里,該用在哪里。
?
(二):Selenium 核心對(duì)象 - 瀏覽器驅(qū)動(dòng)(WebDriver)
正如之前講到的,Selenium主要的功能是協(xié)助我們來模擬人工操作瀏覽器。那么,我們應(yīng)當(dāng)如何來操作瀏覽器呢?答案就是WebDriver, Selenium 為我們提供了操作瀏覽器的統(tǒng)一接口以及針對(duì)各種主流瀏覽器驅(qū)動(dòng)程序的實(shí)現(xiàn):
如上圖所示,可以看到每一種WebDriver 都是對(duì)了各個(gè)瀏覽器廠商提供的驅(qū)動(dòng)包的封裝,Selenium的優(yōu)點(diǎn)在于為使用者提供了多種語言版本的Driver,這里我們只是描述C#版本的實(shí)現(xiàn),其他版本也有類似的實(shí)現(xiàn)。說到這里,我們可以類比一下其他的測試驅(qū)動(dòng)框架比如Appium,或是White,其實(shí)都是封裝了系統(tǒng)提供的自動(dòng)化測試API,降低了上層的開發(fā)或者測試人員的學(xué)習(xí)成本和編程復(fù)雜度... ...
把上圖簡化一下,我們可以看到以下幾個(gè)對(duì)象:
- IWebDriver : Selenium 定義的WebDriver接口,具備常用的瀏覽器操作功能。
- ChromeDriver : 基于谷歌瀏覽器的驅(qū)動(dòng),使用時(shí)需要額外的驅(qū)動(dòng)程序。
- FireFoxDriver : 基于Firefox瀏覽器的驅(qū)動(dòng)。
- InternetExplorerDriver : 基于IE瀏覽器的驅(qū)動(dòng),使用時(shí)需要額外的驅(qū)動(dòng)程序。
下面列出了Driver接口定的主要方法和屬性:
Methods:
- Close : 關(guān)閉當(dāng)前窗口。
- FindElement : 查找Dom元素,返回單個(gè)的DOM元素。
- FindElements : 查找Dom元素,返回符合條件的DOM元素集合。
- Manage : 管理瀏覽器的設(shè)置信息。
- Navigate : 導(dǎo)航到某個(gè)地址。
- Quit : 關(guān)閉瀏覽器。
- SwitchTo : 用于切換Frame 和Window,處理彈出框等。
Properties:
- CurrentWindowHandle : 獲取當(dāng)前窗口的操作句柄。
- PageSource : 獲取最后一次加載的頁面源代碼。
- Title : 獲取當(dāng)前頁面的Title。
- Url : 獲取或設(shè)置當(dāng)前瀏覽器的Url地址。
- WindowHandles : 獲取當(dāng)前瀏覽器所有打開窗口的操作句柄。
(三):Selenium 核心對(duì)象 - DOM元素對(duì)象(WebElement)
同WebDriver一樣,Selenium提供的WebElement對(duì)象是用來描述頁面上的DOM對(duì)象(HTML的DOM對(duì)象用來描述頁面上的HTML元素),如頁面上的按鈕,多選框,輸入框,文本域,圖片... ... 都可以看作是一個(gè)WebElement對(duì)象,在后面的文章里,會(huì)對(duì)WebElement相關(guān)的操作和針對(duì)各個(gè)不同的DOM對(duì)象類型的處理做進(jìn)一步的介紹,這一部分我們給大家展示一下WebElement常用的方法和屬性:
Methods:
- Clear : 清空當(dāng)前DOM元素內(nèi)容(用于文本輸入元素)。
- Click : 單擊當(dāng)前DOM元素。
- FindElement : 查找當(dāng)前DOM元素下的子元素,返回單個(gè)的DOM元素。
- FindElements : 查找當(dāng)前DOM元素下的子元素,返回符合條件的DOM元素集合。
- GetAttribute: 獲取當(dāng)前DOM元素的屬性值。
- GetCssValue : 獲取當(dāng)前DOM元素CSS樣式。
- SendKey : 想當(dāng)前DOM元素輸入指定文本。
- Submit : 提交當(dāng)前元素到Web服務(wù)器。
Properties:
- Display: 獲取元素是否顯示。
- Enabled: 獲取元素是否可用。
- Location : 獲取元素位置信息。
- Seleced : 獲取元素是否選中。
- Size : 獲取元素的Height 和 Width。
- TagName : 獲取元素的TagName。
- Text : 獲取元素的文本內(nèi)容。
(四):Selenium 核心對(duì)象 - By Class(定位條件)
關(guān)于By Class我會(huì)在下一篇《Lesson 03 - Selenium For C# 之 元素定位》中介紹。
(五):Demo
說了這么多,該到動(dòng)手寫點(diǎn)什么的時(shí)候了。so... 我做了個(gè)簡單的Demo供大家有個(gè)感官的認(rèn)識(shí)。下面的Code我已經(jīng)上傳到Github地址是:https://github.com/DemoCnblogs/Selenium
這個(gè)Dome的主要有兩個(gè)目的,一方面對(duì)之前描述的部分概念做一個(gè)簡單的展示,另一方面主要展示了xUnit.Net Test Case的基本結(jié)構(gòu),代碼如下:
1 using OpenQA.Selenium; 2 using OpenQA.Selenium.Firefox; 3 using Xunit; 4 using Xunit.Abstractions; 5 6 namespace Demo.SeleniumTest 7 { 8 public class Lesson02_CoreObject 9 { 10 /// <summary> 11 /// 輸出對(duì)象 12 /// </summary> 13 private readonly ITestOutputHelper _output; 14 /// <summary> 15 /// 構(gòu)造函數(shù),初始化輸出對(duì)象 16 /// </summary> 17 /// <param name="output">注入輸出對(duì)象</param> 18 public Lesson02_CoreObject(ITestOutputHelper output) 19 { 20 this._output = output; 21 } 22 23 /// <summary> 24 /// demo1 : 獲取元素 25 /// </summary> 26 [Fact(DisplayName = "Cnblogs.CoreObject.Demo1")] 27 public void CoreObject_Demo1() 28 { 29 _output.WriteLine("Step 01 : 啟動(dòng)瀏覽器并打開博客園首頁。"); 30 IWebDriver driver = new FirefoxDriver(); 31 driver.Url = "http://www.cnblogs.com"; 32 driver.Manage().Window.Maximize(); 33 34 _output.WriteLine("Step 02 : 獲取并輸出部分頁面信息。"); 35 _output.WriteLine(string.Format("Current window handle: {0}", driver.CurrentWindowHandle)); 36 _output.WriteLine(string.Format("Window handle count: {0}", driver.WindowHandles.Count)); 37 _output.WriteLine(string.Format("Current window title: {0}", driver.Title)); 38 39 _output.WriteLine("Step 03 : 驗(yàn)證博客園站點(diǎn)的 Title 是否正確。"); 40 Assert.Equal<string>("博客園 - 開發(fā)者的網(wǎng)上家園", driver.Title); 41 42 _output.WriteLine("Step 04 : 關(guān)閉當(dāng)前頁面。"); 43 driver.Close(); 44 } 45 } 46 }
這里我簡單的介紹一下Code的邏輯:
首先,構(gòu)造函數(shù)注入了輸出的對(duì)象,這部分我會(huì)在xUnit.Net相關(guān)的文章作講解。性急的同學(xué)要是等不及我的更新也可以參照xUnit.Net的文檔:http://xunit.github.io。
然后,就是我們的Test case ,開啟本機(jī)的火狐瀏覽器>最大化并導(dǎo)航到博客園首頁>輸出信息>檢驗(yàn)Title是否正確>關(guān)閉瀏覽器。
需要說明的是 輸出和驗(yàn)證Title是xUnit.Net的功能(每個(gè)單元測試框架都有)。當(dāng)然,生產(chǎn)環(huán)境使用的測試Code是會(huì)做更多的封裝的,這個(gè)代碼只是供大家學(xué)習(xí)使用。
最后,處理你會(huì)看見你本機(jī)的瀏覽器上面的操作之外,還會(huì)得到如下的輸出結(jié)果:
?
總結(jié):本文主要介紹了以下幾點(diǎn)內(nèi)容。
- Selenium的作用以及在企業(yè)級(jí)測試框架中的位置。
- 瀏覽器控制對(duì)象(驅(qū)動(dòng)) WebDriver
- DOM元素對(duì)象WebElement
- 基本的Test Case 書寫
關(guān)于《Selenium For C#》 系列,我計(jì)劃給大家逐一介紹一些Selenium Driver的基礎(chǔ)知識(shí)和框架的擴(kuò)展點(diǎn)。 當(dāng)然,之后會(huì)有更多關(guān)于測試框架構(gòu)以及軟件構(gòu)建方面的文章。愿我主保佑我有時(shí)間做完這件事情... ...
《Selenium For C#》的相關(guān)文章:Click here.
- [小北De編程手記] : Lesson 01 - Selenium For C# 之 環(huán)境搭建
- [小北De編程手記] : Lesson 02 - Selenium For C# 之 核心對(duì)象
- [小北De編程手記] : Lesson 03 - Selenium For C# 之 元素定位
- [小北De編程手記] : Lesson 04 - Selenium For C# 之 API 上
- [小北De編程手記] : Lesson 05 - Selenium For C# 之 API 下
- [小北De編程手記] : Lesson 06 - Selenium For C# 之 流程控制
- [小北De編程手記] : Lesson 07 - Selenium For C# 之 窗口處理
- [小北De編程手記] : Lesson 08 - Selenium For C# 之 PageFactory & 團(tuán)隊(duì)構(gòu)建
說明:Demo地址:https://github.com/DemoCnblogs/Selenium
如果您認(rèn)為這篇文章還不錯(cuò)或者有所收獲,可以點(diǎn)擊右下角的【推薦】按鈕,因?yàn)槟愕闹С质俏依^續(xù)寫作,分享的最大動(dòng)力! 作者:小北@North 來源:http://www.cnblogs.com/NorthAlan 聲明:本博客原創(chuàng)文字只代表本人工作中在某一時(shí)間內(nèi)總結(jié)的觀點(diǎn)或結(jié)論,與本人所在單位沒有直接利益關(guān)系。非商業(yè),未授權(quán),貼子請(qǐng)以現(xiàn)狀保留,轉(zhuǎn)載時(shí)必須保留此段聲明,且在文章頁面明顯位置給出原文連接。轉(zhuǎn)載于:https://www.cnblogs.com/NorthAlan/p/5156234.html
總結(jié)
以上是生活随笔為你收集整理的[小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: fatal: unable to acc
- 下一篇: 魔力服务器修改器,魔力宝贝修改器
