自己動手寫Web自動化測試框架(2):開啟和操縱IE
接下來的幾篇文章我們都會以Console Application來向大家介紹Web自動化的一些基礎。
以下的程式碼在VS2005上通過測試,相信在VS2005 express已經VS2008上也可以通過,不過在VS2003上可能要稍微修改。使用vs2003的朋友,建議大家使用VS2005 express。
瀏覽器使用了IE7。 IE6以及更低版本並沒有做過試驗。
首先我們開啟VS2005,建立一個Console Application專案:
新建一個命令列工程
接下來我們需要包含兩個引用了,就是mshtml和SHDocVw。關於這兩個dll的簡單介紹,請參見:自己動手寫Web自動化測試框架(1) :概述
包含mshtml引用
第二個SHDocVw一定要在下面這個路徑找:(Windows/system32/shdocvw.dll)
包含SHDocVw
包含兩個類庫之後,我們就可以使用C#來對IE進行一些基本的操作了。
我們要新增幾個名稱空間,來簡化我們下面的程式碼:
using System.Diagnostics; //要用到程式來啟動IE視窗 using System.Threading; //使用Thread.Sleep來等待 using SHDocVw; using mshtml; |
除了mshtml和SHDocVw之外,我們還使用了其他的兩個名稱空間,因為我們要使用System.Diagnostics.Process類啟動IE程式,並且獲取IE的程式資訊,使用System.Threading.Thread的sleep()方法等待。
接下來,我們就可以寫入程式碼了:
Console.WriteLine("Launching IE ..."); Process p = Process.Start("iexplore.exe","about:blank"); Thread.Sleep(3000); |
第一步,我們要開啟IE程式,這裡使用了Process的Start靜態方法生成一個程式。很好理解,傳入了兩個引數,一個是IE的exe檔名,也可以寫入完整地址;第二個引數是IE自己的引數,表示要開啟的連結地址,我們在這裡使用一個空白頁面。
接下來的事情就是等待,等待IE程式啟動,這裡為了讓大家更快的抓到本質,沒有使用很複雜的等待程式碼,只是很機械的等待了3秒鐘,大家可以根據自己機器的狀況進行修改。
這裡為了讓大家可以更好的理解,我插一點Process的講解,如果大家對上面的Process開啟沒有任何問題的話,直接跳過往下就好了。這裡Process.Start()方法其實有4個過載,我們使用了第三個過載函式,也就是第一個輸入檔名,第二個輸入引數,我們可以在執行命令列中打"iexplore about:blank"直接開啟一個空的IE視窗,也可以打"iexplorehttp://www.colblog.net/"直接開啟一個瀏覽到目標網站的IE視窗。
IE啟動了,我們接下來的事情就是把IE附加給SHDocVw.InternetExlporer以便我們可以進行接下來的操作。
Console.WriteLine("Attaching to IE ..."); { |
先,我們先宣告瞭一個InternetExplorer的引用,這裡設為空引用。他以後會儲存我們的IE例項,並且通過它,我們可以操縱IE進行一些操作。
然後我們判斷剛剛啟動的程式p是不是為空,如果為空,就報錯,說明不能啟動IE(Can not Launch IE)。如果不為空,就可以進行下面的操作了。
注意,這裡我們用了比較特殊的方法來得到InternetExplorer例項,就是通過比較當前Windows中已經存在的程式編號,來找到剛剛啟動的 IE例項,用allBrowser來獲取所有的Shell Windows,然後逐個和剛剛啟動的程式p的Handle號進行比較,如果相同,就說明是我們想要的程式,把他的InternetExplorer例項賦給我們ie。
最後我們判斷一下ie引用是否有了例項,因為剛剛的迴圈我們無法保證一定有例項被賦給ie,這裡如果檢查失敗,就報錯返回。
通過上面的幾步,我們已經啟動並且拿到了InternetExplorer的例項,我們可以對這個例項進行一些操作了。舉個最簡單的例子就是瀏覽到某一個網頁,下面的程式碼讓這個瀏覽器指向了我的部落格地址:
Console.WriteLine("Navigating ..."); object o = null; ie.Navigate("www.colblog.net", ref o, ref o, ref o, ref o); |
這裡都很簡單,只有一個讓人費解的地方就是object o。因為ie.Navigate需要5個引數,後面的4個是可選引數,所以我們只需要象徵性的傳入一個null就可以了,有一個同事問我為啥不直接傳 null,還要申請一個object,其實原因就在於引數是ref的,必須有一個引用被傳進去才行。關於後面的四個引數的講解請看msdn上的講解。
執行一下就發現,程式順利的開啟一個IE視窗,並且連結到我的部落格上
下面附上原始碼,不過需要登入才可以拿到,各位多多包含
下一次我們來了解得到網頁中的各個Element。
相關文章
- 自己動手寫Web自動化測試框架(3):操縱Web控制元件Web框架控制元件
- 自己動手寫Web自動化測試框架Web框架
- 自己動手寫Web自動化測試框架(1) :概述Web框架
- 自己動手寫Web自動化測試框架(6):自動化測試框架的規劃Web框架
- 自己動手寫Web自動化測試框架(4):驗證Web控制元件Web框架控制元件
- 自己動手寫Web自動化測試框架(7):框架架構的設計Web框架架構
- 自己動手寫Web自動化測試框架(5):判斷瀏覽器是否載入完成Web框架瀏覽器
- web自動化測試框架-06 如何快速編寫自動化指令碼Web框架指令碼
- 測試開發之自動化篇-自動化測試框架設計框架
- Web自動化-Selenium自動化測試-4-編寫測試用例Web
- 自動化測試框架框架
- 軟體測試框架——自動化測試框架框架
- Selenium Web Driver自動化測試(java版)系列下半部分(37) - 關鍵字驅動自動化測試框架(2)-測試過程...WebJava框架
- 加速Web自動化測試Web
- 自動化測試框架思路框架
- 自動化測試框架指南框架
- 介面自動化測試之PHPUnit-框架程式碼編寫2PHP框架
- JMeter做WEB和API自動化測試JMeterWebAPI
- 淺談自動化測試框架開發框架
- Web自動化之Headless Chrome測試框架整合WebChrome框架
- 利用tox打造自動自動化測試框架框架
- 搭建自己的前端自動化測試腳手架(一)前端
- 自動化測試框架比較框架
- 自動化測試框架介紹框架
- Selenium自動化測試框架框架
- 軟體測試自動化框架框架
- 介面自動化測試框架 HttpFPT框架HTTP
- 微軟開源的Web測試和自動化神器 Playwright微軟Web
- web自動化測試框架-02 快速開發用例文件指令碼Web框架指令碼
- 自己動手寫 PHP 框架(一)PHP框架
- T框架介紹(自動化測試框架)框架
- 面向開發的測試技術(三):Web自動化測試Web
- 自動化測試系列 —— UI自動化測試UI
- 14 Web 自動化測試 -- PageObject 思想WebObject
- 利用 Selenium 自動化 web 測試Web
- UI自動化測試框架Cypress初探UI框架
- Python 自動化測試框架unittestPython框架
- 自動化測試QTP知識框架QT框架