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

这一个部分咱们来说用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 ...");
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。

相关文章
相关标签/搜索