记得几年前一本《自己动手写操作系统》在全国的技术范围内引起了学习操作系统的热潮。我不才在这里使用这本书的大名,来分享一下我在写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);