自动化 Internet Explorer






4.70/5 (38投票s)
2005 年 2 月 25 日
4分钟阅读

417652

7147
一篇描述如何自动化 IE 的文章,主要用于测试目的。
引言
我参加了一个 ASP.NET 用户组会议,并观看了 Demetrie Gerodimos 的演讲。 他是 Dell 的架构师,并且在做一个关于测试驱动开发的演讲。 在他的演讲中,对我来说一个有趣的重点是当他解释他们如何执行他们的测试时。 会议结束后与他讨论,得知他们正在自动化 Internet Explorer 以测试他们的 ASPX 页面。
在花了一些时间研究如何在 C# 中轻松自动化 Internet Explorer(在 Demetrie 提供给我的一些 URL 的帮助下)后,我开始编写我自己的 IEDriver
版本。 我查看的 URL 提供了一个基本示例,说明如何指示 IE 执行各种操作。 在过去的一年中,我增强了我的 IEDriver
类,以处理我需要的与 IE 的其他类型的交互。 虽然这绝不是一个完整的自动化类,但我相信它执行了编写自动化测试时需要的许多常用功能。
背景
这里的基本思想是我们将使用 Interop 服务来调用 Internet Explorer 中内置的 COM 接口上的方法。 我写这篇文章是因为关于这些接口的可用文档充其量是稀缺的。 我花了很多时间在网上进行研究,并对这些接口进行试错实验,以生成这个 IEDriver
类的大部分内容。
使用代码
要点是一个名为 IEDriver
的类。 这个类的构造函数将创建一个新的 IEXPLORE.EXE 进程并附加到它。 从那时起,可以使用 IEDriver
类上的方法来模拟用户使用他的浏览器。 虽然我没有实现您可以与浏览器进行的每种类型的交互,但我已经实现了我需要为我的产品编写自动化测试的大部分例程。
我试图向类的用户隐藏驱动程序的内部工作原理。 您会注意到有 ClickXXX
方法和 GetXXX
值,它们将处理所有 COM 接口以执行必要的操作或返回您感兴趣的值。
这是一个关于这个类有多么容易使用的例子。 这个例子将简单地导航到 Google 并搜索“Automating Internet Explorer”。
IEDriver driver = new IEDriver();
driver.Navigate("http://www.google.com");
driver.SetInputStringValue("q", "Internet Explorer Automation");
driver.ClickButton("btnG");
在这个例子中,“q
”是输入控件的名称,“btnG
”是 Google 页面上按钮控件的名称。 最好,您的 HTML 元素上会有 ID
属性,但如果没有 ID
属性,驱动程序将找到具有 name
属性的元素。
为了使用这段代码,你需要做几件事。 首先,你需要向你的项目添加几个引用。 要做到这一点,右键单击引用并点击添加引用
当出现“添加引用”对话框时,首先选择“.NET”选项卡。 向下滚动到 Microsoft.MSHtml
对象,然后单击“选择”按钮。
接下来,单击“COM”选项卡。 向下滚动到 Microsoft Internet Controls 对象并单击“选择”按钮。
现在点击“确定”。 这将向您的项目添加必要的引用,这将允许 IEDriver
类进行必要的调用来自动化 IE。
一旦你向你的项目添加了适当的引用,只需在你的项目中包含 IEDriver
。 现在,你所要做的就是将 IEAutomation
命名空间导入到你的类中,你就可以开始使用 IE 编写自动化测试了。
关注点
有一件事要记住。 关于这方面的文档不是很好,所以如果你需要增强 IEDriver
以支持它目前不支持的功能,你最好的选择可能是使用你的智能感知来调用你认为可能做你想做的事情的方法,并将变量分配给一些临时的局部变量。 然后,启动你的调试器并使用监视窗口来了解关于返回对象的所有信息。
技巧
在编写我自己的自动化测试时,我发现扩展 IEDriver
类并添加我可能经常执行的任务的方法非常有用,这样我就可以使用智能感知和编译器来消除错拼控件名称的可能性。 例如
class MyIEDriver : IEDriver {
public void ClickSave() {
ClickButton("SaveButton");
}
}
这为您提供了编译器检查,可以检查通常只能在运行时捕获的东西。
历史
- 2005 年 2 月 23 日:初始版本。