您的位置:首页 > 编程语言 > C#

【学习笔记】用C#写Web自动化测试框架【2】-- 启动IE

2008-03-11 14:47 375 查看
问题:如何启动IE浏览器,并设法获取这个实例从而可以操纵IE浏览器。

设计:通过System.Diagnostics命名空间里的Process.Start()静态方法启动IE进程。然后实例化一个InternetExplorer对象并获取这个对象的句柄。

代码

 

            string IELocation = @"%ProgramFiles%Internet Exploreriexplore.exe";       
      IELocation = System.Environment.ExpandEnvironmentVariables(IELocation);     

      Console.WriteLine("Launching IE ");         
            Process p = Process.Start(IELocation, "about:blank");           
      Thread.Sleep(3000);

            Console.WriteLine("Attaching to IE ... ");
            InternetExplorer ie = null;

            if (p != null)
            {
                Console.WriteLine("Process handle is: " + p.MainWindowHandle.ToString());
                SHDocVw.ShellWindows allBrowsers = new ShellWindows();
                Console.WriteLine("Number of active IEs :" + allBrowsers.Count.ToString());
                if (allBrowsers.Count != 0)
                {
                    for (int i = 0; i < allBrowsers.Count; i++)
                    {
                        InternetExplorer e = (InternetExplorer)allBrowsers.Item(i);
                        if (e.HWND == (int)p.MainWindowHandle)
                        {
                            ie = e;
                            break;
                        }
                    }
                }
                else
                    throw new Exception("Faul to find IE");
            }
            else
                throw new Exception("Fail to launch IE");

 

 注释

首先定义了一个变量IELocation用来存储系统中IE所在的路径。System.Environment.ExpandEnvironmentVariables这个函数用来把字符串中的环境变量转化为相应的值。这里用到了%ProgramFiles%,你可以打开一个cmd窗口输入echo %ProgramFiles%来查看这个环境变量的值。比如在我的机器中他就是这样C:/Program Files。这样做的好处是可以在任何机器上运行,即便你的ie所在路径不是C盘。

然后用到了Process.Start()这个函数。第一个参数为需启动进程的应用程序路径,第二个是所带的参数。相当于你在cmd中敲"%ProgramFiles%/Internet Explorer/iexplore.exe" about:blank就会打开一个空白页的IE窗口。

到这里,我们已经可以成功的启动一个IE浏览器了。甚至我们可以在上述方法的把第二个参数改成一个相应的网址,比如www.baidu.com。应用程序便会直接打开百度的主页。看上去我们的工作完成一大半了,其实则不然。我们还要想办法获取这个刚刚启动的IE浏览器,以便对他进行更多的操作。

因此,我们通过shdocvw.dll中的ShellWindows()方法获取所有实例化并取回所有活动的浏览器对象的一个集合。这个集合中包括了刚才打开的IE窗口,也包括之前启动的IE窗口和所有打开的Windows Explorer浏览器。因此我们需要遍历这个集合,通过比较刚才所启动进程的句柄,来获取我们需要的IE窗口。比较时要注意Process里面的MainWindowHandle属性是IntPtr类型的,因此要把它转化成int型再与InternetExplore的句柄进行比较。

至此,我们才真正的打开了一个IE浏览器,并获取到了这个IE。接下来就可以调用InternetExplore中的实例方法来操作这个IE实例了,比如打开一个网页:


object o = null;


ie.Navigate("www.kunboo.cn", ref o, ref o, ref o, ref o);

相对应的一些最基本的操作GoForward,GoBack,Refresh等等都包含在了这个类的方法中,基本的操作就可以进行了。

这节的内容就差不多了,下次来介绍怎样判断web程序完全加载到浏览器。

PS推荐一本好书《.Net软件测试自动化之道》,太经典了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web 框架 c# 测试 浏览器 ie