自己动手写Web自动化测试框架(2):打开和操纵IE

这一个部分我们来讲用SHDocVw对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 ...");
InternetExplorerie =null;
if(p !=null)

{
  SHDocVw.ShellWindowsallBrowser =newShellWindows();
  if(allBrowser.Count != 0)
  {
    for(inti = 0; i < allBrowser.Count; i++)
    {
      InternetExplorere = (InternetExplorer)allBrowser.Item(i);
      if(e.HWND == (int)p.MainWindowHandle)
      {
        ie = e;
        break;
      }
    }
  }
}
else
{
  Console.WriteLine("Error: Can not Launch IE");
  return;
}
if(ie ==null)
{
  Console.WriteLine("Error: Can not attach to IE");
  return;
}

先,我们先声明了一个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。

 

源代码推荐——VB实现IE下载管理器扩展 ------ 摘要 这个例子演示了如何实现一个自定义IE下载管理器,当IE下载一个文件,VBWebDownloader.exe就会启动来下载它。 (这个项目支持断点续传,而且代码相对简单) 注意:一些第三方的IE下载扩展可能会和这个例子程序冲突,所以在尝试这个例子之前最好临时屏蔽它们。 安装/卸载 A. 安装 对于32bit系统,或者32bit IE运行在54bit系统,安装 VBIEDownloadManagerSetup(x86) 项目输出的VBIEDownloadManagerSetup(x86).msi。对于 64bit IE安装 VBIEDownloadManagerSetup(x64) 项目输出的 VBIEDownloadManagerSetup(x64).msi。 B. 卸载 运行安装时候所用的那个安装程序,并且选择卸载。 演示:(不翻译了,自己看吧) Step1. Open this project in VS2010 and set the platform of the solution to x86. Make sure that the projects VBIEDownloadManagerSetup, VBWebDownloader and VBIEDownloadManagerSetup(x86) are selected to build in Configuration Manager. NOTE: If you want to run this sample in 64bit IE, set the platform to x64 and select VBIEDownloadManagerSetup, VBWebDownloader and VBIEDownloadManagerSetup(x64) to build. Step2. 生成解决方案 Step3. Right click the project VBIEDownloadManagerSetup(x86) in Solution Explorer, and choose "Install". Step4. Open 32bit IE and visit the the download link of Microsoft .NET Framework 4 http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7. Click the "Download" button on this page, and then VBWebDownloader.exe will be launched. In VBWebDownloader.exe, you will find that the url is http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe and the local path is D:\dotNetFx40_Full_x86_x64.exe Step5. Click the button "Download" in VBWebDownloader.exe, it will start to download the file, and after a few minutes, you will find a file D:\dotNetFx40_Full_x86_x64.exe in Windows Explorer. 下载: http://code.msdn.microsoft.com/VBIEDownloadManager-3287b087
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值