第一步,我们要打开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以便我们可以进行接下来的操作。
上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制。
这次我们将会用代码找到我们想要的控件,然后对控件进行一些操作。
首先我们引入一个很好的IE控件:Internet Explorer Developer Toolbar,这个控件可以帮助我们方便的找到我们想要的控件的属性。
安装好这个控件之后,我们就可以方便的找到每一个控件的ID,或者其他属性了,如下图
IE Developer
注意,打开IE Developer Toolbar之后,要点选下面的鼠标按钮,才可以用鼠标来选择我们想要的控件。有了这个控件,我们就不用去查看源文件来找到我们想要的信息了。其他的功能这里不多说了。
接下来我们以百度的三个控件为例,分别告诉大家如何使用ID得到TextBox,如何点击使用ID得到的Button,如何使用子控件缩小范围的方法得到一个HyperLink。
首先我们修改上次的代码,把IE指到百度去:
Console.WriteLine("Navigating ...");
object o = null;
ie.Navigate("baidu.com", ref o, ref o, ref o, ref o);
Thread.Sleep(2000)
打开和操纵IE都讲解过了。只有一点,我们在完成IE的跳转之后,等待了2秒钟的时间,原因是IE的工作是需要时间的,我们在后面的测试框架部分会讲解如何判断IE已经完成了页面的跳转,在这里为了让大家更好的了解我们本节的主题,只是用了简单的等待。
然后我们用IE Developer Tools得到了关键字文本框的ID是kw,所以我们用下面的代码在关键字文本框里面输入了我们想要的关键字:
//得到一个Text Box Console.WriteLine("Inputing Keyword ..."); HTMLDocument doc = (HTMLDocument)ie.Document; HTMLInputElement keyword = (HTMLInputElement)doc.getElementById("kw"); keyword.value = "colblog.net"; Thread.Sleep(1000); |
首先我们用ie.Document对象得到了HTMLDocument。目的没什么可说的,因为我们需要HTMLDocument得到下面的控件。而这里之所以使用强制类型转换,是因为Document对象在这里返回一个object的引用,但其实是一个HTMLDocument的实例。所以转换一下就好了,在mshtml里面,这种情况还不少,在msdn上有详细的讲解,使用的时候查一下就好了。
然后使用 HTMLDocument.getElementById方法,直接从Document里面按照ID取出想要的控件,返回一个 IHTMLElement,IHTMLElement是HTMLElement的抽象,所有的HTML的tag都可以是一个IHTMLElement,返回这样的一个引用,我们在知道将会返回什么类型的情况下,可以使用强制类型转换来把对象转成我们想要的引用。就像上面我们所做的,返回的其实是一个 Input tag,所以我们要把他转换成HTMLInputElement就好了。
下面一句我们直接对这个对象的value进行设置,就可以完成在关键词文本框里面输入我们想要的关键词的动作。