Developer Channel 中的 WebDriver API

WebDriver 提供了一个用于在浏览器中自动测试用户方案的 API。本文档详细介绍了将 WebDriver 与 Internet Explorer Developer Channel 结合使用 。

什么是 WebDriver?

WebDriver 使开发人员能够创建自动测试,该测试可模拟与网页进行交互的用户并报告结果。这与 JavaScript 单元测试不同,因为 WebDriver 有权访问在浏览器中运行的 JavaScript 无法访问的功能和信息,并且它可以更准确地模拟用户事件或操作系统级别的事件。

它还可以在一个测试会话中管理跨多个窗口、选项卡和网页的测试。

在 Internet Explorer Developer Channel 中安装 WebDriver

首先,下载并安装 Internet Explorer Developer Channel。

已为运行 Internet Explorer 11 的 Windows 8.1Windows 7 SP1 客户提供下载。

我通过 Internet Explorer Developer Channel 安装了 WebDriver?

是的,但它未被激活。激活 WebDriver 后,知道如何访问它的任何程序都可以控制你的浏览器。 若要确保没有人因其浏览器被控制而感到意外,需要手动激活当前版本的 WebDriver。为此,请按照以下步骤操作:

  • 使用管理员特权打开“命令提示符”。执行此操作的最简单方法是:按 WINDOWS 徽标键 + X 获取“快速链接”****菜单,然后按 A 以选择“命令提示符(管理员)”选项。

    “用户帐户控制”提示将要求你确认你想要允许“命令提示符”****对计算机做出更改。同意它,然后“命令提示符”窗口将打开。

  • 导航到 Internet Explorer Developer Channel 安装程序放置 WebDriver 库的位置:

    cd C:\Program Files\Common Files\IEDCWebDriver

  • 注册 IEDCWebDriver.dll 文件:

    regsvr32 IEDCWebDriver.dll

  • 打开 Internet Explorer Developer Channel。从“工具”****菜单中打开“Internet 选项”,选择“安全”****选项卡,然后在选项卡底部附近勾选“启用保护模式”旁边的复选框。为“Internet”****和“本地 Intranet”区域执行此操作。应用新设置。

如何在 Internet Explorer Developer Channel 中禁用 WebDriver?

请按照上述说明操作,但请“清除”“启用保护模式”****旁边的框并使用以下命令注销库:

regsvr32 /u IEDCWebDriver.dll

使用 Internet Explorer Developer Channel 运行 WebDriver 应用

如果你想要运行面向 WebDriver 的已编译的应用,你需要在运行时提供具有特殊 GUID 的“appvve”标志,以确保它正确指向 Internet Explorer Developer Channel。

存在用于 32 位和 64 位版本的 Internet Explorer Developer Channel 的单独 GUID。

  • 32 位 GUID:9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45
  • 64 位 GUID:9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_6A0357B5-AB99-4856-8A59-CF2C38579E78

例如,如果你的应用命名为了 WDApp.exe,并且你运行的是 32 位的 Internet Explorer Developer Channel,则应使用以下命令从命令行运行它:

WDApp.exe /appvve 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45

使此操作自动执行的一种方法是:在文件管理器中右键单击你的应用、选择“创建快捷方式”****、右键单击生成的快捷方式项,然后选择“属性”。选择“属性”****窗口中的“快捷方式”选项卡。

在“目标”****字段中,你将看到指向你的应用的路径(括在引号中)。在引号中追加 /appvve 标志和 GUID 并应用该更改。每次使用快捷方式都会运行你的已追加标志的应用。

要点  

上述 GUID 适用于第一版的 Internet Explorer Developer Channel。GUID 将随每个版本而更改,因此如果你要使用较新版本测试针对此版本编写的应用,请在该版本的文档中查找正确的 GUID。

要点  

标志和 GUID 内置于 WebDriver C# 示例项目的设置中。当在 Visual Studio 中启动调试会话时,Visual Studio 会将它们作为运行时标志自动应用,但它并未内置于编译的应用中。

要点  

你不但将需要对要运行 WebDriver 应用程序的平台使用适当的 GUID,还将需要针对该平台编译你的应用程序。运行 Windows 8.1 的大多数人运行的是 64 位体系结构,因此我们下面讨论的 WebDriver C# 示例项目 为 64 位配置。若要将其更改为 32 位,请打开 Visual Studio 的“版本”菜单、选择“配置管理器”****,然后在“平台”下拉菜单下选择“x86”。

使用 WebDriver

警告  这将需要一些编程知识,并且我们此次仅会提供针对 C# 和 Visual Studio 的说明。如果不具有 Visual Studio,则可以使用免费的 Microsoft Visual Studio Express 2013 for Windows Desktop 来对示例项目进行试验并构建一些测试。

Internet Explorer Developer Channel 中的 WebDriver 实现需要构建 COM 对象,以封装命令和释放结果。命令和响应都采用 JSON 格式。

下载 WebDriver C# 示例项目。这将为你提供 COM 对象以及通过 WebDriver 接口与浏览器进行通信的示例实现。

使用 Visual Studio 打开 IEWebDriverExample.sln 文件,然后打开 IEWebDriverSample.cs 代码文件。

Visual Studio 解决方案资源管理器中的 iewebdriversample.cs 文件

若要运行演示,请从“调试”菜单选择“开始执行(不调试)”****(Ctrl + F5)。将发生两个重要事项。控制台窗口将打开,以显示之前发送的命令和接收的响应。然后将打开 Internet Explorer 窗口以执行这些命令。

你还可以选择“开始调试”(F5),但如果一切顺利,则控制台窗口会在你可以查看这些命令和响应之前消失。不过,如果某个错误阻止脚本完成,它就会保留。

建立会话

任何 WebDriver 命令序列都应该先使用 newSession 命令建立会话。这将打开一个浏览器窗口并建立一个接口,同时返回一个会话句柄,以便你可以将更多命令指向该会话。让我们来看一看可执行此操作的代码:

//Execute a "newSession" command
const string newSessionCommand = @"
{
  ""command"": {
    ""name"": ""newSession"",
    ""parameters"": {
      ""desiredCapabilities"": {},
      ""requiredCapabilities"": {}
    },
  ""sessionId"": null
  }
}";
strResponse = ExecuteCommand(newSessionCommand, null);

除了额外的引号(C# 中定义多行字符串文本的函数)之外,此 JSON 格式应看起来非常熟悉。

每个命令都会先创建一个包含 command 对象的 JavaScript 对象文本。在 command 对象中,提供命令的 name 以作为字符串执行、提供 parameters 以作为对象执行、提供 sessionId 以作为字符串执行。在此情况下,因为未设置 sessionId,所以其值为空。将在响应中返回 sessionId,看上去如下所示:

{
  "response":{
    "sessionId":"[session identifier]",
    "status":"success",
    "value":{
      "browserName":"Internet Explorer", 
      "browserVersion":"11",
      "platformName":"windows",
      "platformVersion":"8.1",
      "secureSsl":true,
      "takesElementScreenshot":true,
      "takesScreenshot":true,
      "-ms-requireWindowFocus":true
    }
  }
}

value 对象显示某些浏览器属性和某些功能,如系统是否可以获取屏幕截图或处理 SSL。在针对 Internet Explorer 的 WebDriver 开发的此阶段,可以使用 newSession 命令设置的唯一功能是 -ms-requireWindowFocus。如果设置为 true,则每次执行命令时,它都将使会话的浏览器窗口成为你的桌面焦点。如果设置为 false,则它会使所有命令与浏览器一起在后台运行。

将命令发送到浏览器

示例项目从响应中提取 sessionId,这可用于所有后续命令,它们包括:

  • 加载 Bing.com
  • 查找其搜索词输入。
  • 通过键入字词,后跟 Enter 按键,来运行搜索。

用于在浏览器中加载新的 URL 的命令是 get

const string getCommand = @"
{
  ""command"": {
    ""name"": ""get"",
    ""parameters"": {
      ""url"": ""https://bing.com""
    },
    ""sessionId"": ""{sessionId}""
  }
}";

它具有一个参数,即 URL。编写代码时,没有在 WebDriver 内构建用于暂停以等待页面加载的代码,因此示例脚本将使用 executeScript 命令在 20 秒内每秒轮询一次页面,以查看是否已在继续之前加载页面(请参阅示例的 WaitForPageToLoad() 方法)。

然后,该脚本将在必应的输入字段中查找搜索词。

const string findElementCommand = @"
{
  ""command"": {
    ""name"": ""findElement"",
    ""parameters"": {
      ""locator"": ""css selector"",
      ""value"": ""input[name=q]""
      },
    ""sessionId"": ""{sessionId}""
  }
}";

findElement 命令将返回第一个与参数和唯一 ID 相匹配的元素,你可以通过它们将该元素用于以后的命令。如果你希望包含所有元素的数组与参数相匹配,请使用 findElements

findElementfindElements 参数是 locator(定义匹配类型)和 value(定义应匹配内容)。在此情况下,它使用 CSS 选择器来匹配其 name 为“q”的 input 元素。

当前可用的其他定位器类型包括:

  • id - 元素的 id 属性的完全匹配。
  • 链接文本 - 完全匹配 value 参数中的文本的任意链接。
  • 部分链接文本 - 包含文本 value 参数的任意链接。

示例脚本会发送的最后一个命令是 sendKeys

const string sendKeysCommand = @"
{
  ""command"": {
    ""name"": ""sendKeys"",
    ""parameters"": {
      ""id"": ""{elementId}"",
      ""keysToSend"": [""W"", ""e"", ""b"", ""D"", ""r"", ""i"", ""v"", ""e"", ""r"", ""\uE007""]
      },
    ""sessionId"": ""{sessionId}""
  }
}";

在此命令中,id 参数是在对 findElement 命令的响应中返回的值。keysToSend 参数包含一个包括十个按键的数组:“WebDriver”加上 Enter 键的字符类型代码

如果一切正常,则由 newSession 命令打开的浏览器窗口现在将显示“WebDriver”在 Bing.com 的搜索结果。

该示例在此时退出,但是两个合乎逻辑的后续步骤是使用 takeScreenshot 命令获取屏幕截图,然后close会话。

下一步是什么?

既然你已了解如何使用 WebDriver 控制 Internet Explorer Developer Channel,请探索支持的 WebDriver 命令的完整列表。在试用它们后,请转到 Microsoft Connect 并向我们提供一些反馈。欢迎提供错误报告,但如果你特别喜欢某些内容,我们也乐于知道。

相关主题

WebDriver API 参考

IIEWebDriverManager

下载适用于 Windows 8.1 的 Internet Explorer Developer Channel

下载适用于 Windows 7 SP1 的 Internet Explorer Developer Channel