这一个部分咱们来说用SHDocVw对IE进行操做。php
接下来的几篇文章咱们都会以Console Application来向你们介绍Web自动化的一些基础。html
如下的代码在VS2005上经过测试,相信在VS2005 express已经VS2008上也能够经过,不过在VS2003上可能要稍微修改。使用vs2003的朋友,建议你们使用VS2005 express。express
浏览器使用了IE7。 IE6以及更低版本并无作过试验。浏览器
首先咱们打开VS2005,创建一个Console Application项目:框架
新建一个命令行工程函数
接下来咱们须要包含两个引用了,就是mshtml和SHDocVw。关于这两个dll的简单介绍,请参见:本身动手写Web自动化测试框架(1) :概述测试
包含mshtml引用网站
第二个SHDocVw必定要在下面这个路径找:(C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition).net
包含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。