記得幾年前一本《自己動手寫操作系統》在全國的技術范圍內引起了學習操作系統的熱潮。我不才在這里使用這本書的大名,來分享一下我在寫Web自動化測試框架上面的一些經驗。 首先定義一下Web自動化測試框架:Web自動化測試框架是一個類庫,他可以幫助測試人員快速寫出Web自動化測試代碼,并幫助測試人員在自動化報錯的時候快速找到Bug。
目前市場上成熟的Web自動化測試框架有不少,很出名的是Watir,是用現在大名鼎鼎的Ruby寫成的,相對于Watir,有一個也很不錯的.net版本,就是WatiN,WatiN可以說是市面上可以找到的最好的C# Web自動化測試框架。微軟和其他的大公司也有自己的一些Web自動化測試框架,但是公布的并不多。
我這里將會使用C#,一步一步的寫出一個最簡單不過的自動化測試框架。這個框架的功能是基本可以測試簡單的沒有Ajax,沒有框架,沒有Windows對話框的一些網頁。而如何測試Ajax之類的網頁,我將會在其他的專題中寫出。
首先我們看使用的非托管的類庫。我們在這里將會使用兩個非托管類庫:mshtml.dll和Interop.SHDocVw.dll。 mshtml是微軟IE的核心類庫,下面是Wiki百科的解釋
Trident (also known as MSHTML) is the name of the layout engine for the Microsoft Windows version of Internet Explorer. It was first introduced with the release of Internet Explorer version 4 in October 1997, has been steadily upgraded and remains in use today. For version 7 of Internet Explorer, Microsoft made significant changes to the Trident layout engine to improve compliance with web standards and add support for new technologies.
開發人員可以通過mshtml提供的接口,訪問到IE布局對象,從而達到對Web的控制和檢查。
另一個類庫Interop.SHDocVw.dll則提供了一個InternetExploer的接口,可以幫助我們操縱IE進程,并且進行一些簡單的如前進,后退等操作。
這兩個類庫如果裝了VS2005都可以找到。mshtml是IE 自帶的,在項目中選擇添加引用,然后在.net標簽下面找到Microsoft.mshtml就可以找到了。而Interop.SHDocVw要復雜一點,添加引用中,選擇瀏覽標簽,然后在下面的路徑就可以找到:C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition
這一個部分我們來講用SHDocVw對IE進行操作。
接下來的幾篇文章我們都會以Console Application來向大家介紹Web自動化的一些基礎。
以下的代碼在VS2005上通過測試,相信在VS2005 express已經VS2008上也可以通過,不過在VS2003上可能要稍微修改。使用vs2003的朋友,建議大家使用VS2005 express。
瀏覽器使用了IE7。 IE6以及更低版本并沒有做過試驗。
首先我們打開VS2005,建立一個Console Application項目:
新建一個命令行工程
接下來我們需要包含兩個引用了,就是mshtml和SHDocVw。
包含mshtml引用
第二個SHDocVw一定要在下面這個路徑找:(C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition)
包含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);