使用 WebDriver 自动执行 Microsoft Edge

WebDriver 允许你通过模拟用户交互来自动执行 Microsoft Edge。 使用 WebDriver 的测试相比于在浏览器中运行的 JavaScript 单元测试有一些优势:

  • WebDriver 可以使用在浏览器中运行的 JavaScript 不可使用的功能和信息。

  • WebDriver 比 JavaScript 单元测试更准确地模拟用户事件或 OS 级事件。

  • WebDriver 管理单个测试会话中的多个窗口、选项卡、网页。

  • WebDriver 在特定计算机上运行多个 Microsoft Edge 会话。

本文提供原始代码示例,但未完成测试。 本文不提供 Selenium WebDriver 入门的完整操作方法,但仅介绍该过程中特定于 Microsoft Edge 的部分。 这包括获取 Microsoft Edge WebDriver 并在代码中设置特定于 Microsoft Edge 的选项。

WebDriver 和其他软件之间的关系

若要使用 WebDriver 自动化 Microsoft Edge 以模拟用户交互,需要三个组件:

  • Microsoft Edge 的详细信息。
  • Microsoft Edge WebDriver。
  • WebDriver 测试框架。

这些组件之间的功能关系如下所示:

技术 角色
WebDriver 平台和非特定语言网络协议的 W3C 标准。 此协议允许进程外程序远程指示 Web 浏览器的行为。
Microsoft Edge WebDriver Microsoft 专门用于 Microsoft Edge 的 WebDriver 协议的实现。 测试作者编写的使用 Microsoft Edge WebDriver 接收的 WebDriver 命令的测试。 然后,Microsoft Edge WebDriver 负责将该命令传达给浏览器。
WebDriver 测试框架 测试作者使用测试框架编写端到端测试并自动执行浏览器。 提供特定于语言的界面,用于将代码转换为发送到 Microsoft Edge WebDriver 的命令。 WebDriver 测试框架适用于所有主要平台和语言。 其中一个框架是 Selenium WebDriver。
Internet Explorer 驱动程序 专门用于 Internet Explorer 的 WebDriver 协议的开源实现。 若要针对 Internet Explorer 模式运行旧的端到端测试,建议使用 Internet Explorer 驱动程序。
Microsoft WebDriver (旧版) 上一个特定于浏览器的适用于 Microsoft Edge (EdgeHTML) 的驱动程序,也称为旧版 Microsoft Edge。

以下部分介绍如何开始使用 WebDriver for Microsoft Edge。

下载 Microsoft Edge WebDriver

若要开始编写自动测试,请确保安装的 Microsoft Edge WebDriver 版本与浏览器版本匹配,如下所示:

  1. 转到 edge://settings/help 并记下你的 Microsoft Edge 版本:

    2021 年 4 月 15 日 Microsoft Edge 的内部版本号

  2. 转到 Microsoft Edge WebDriver

  3. 在页面 的“获取最新版本 ”部分中,选择与 Microsoft Edge 版本号匹配的通道中的平台:

    Microsoft Edge WebDriver 网页的“获取最新版本”部分

  4. 下载完成后,将 msedgedriver 可执行文件提取到首选位置。 将可执行文件所在的文件夹添加到你的 PATH 环境变量。

必须安装浏览器驱动程序 (Microsoft Edge WebDriver) 和 WebDriver 测试框架 (Selenium WebDriver) ,如下面的 选择 WebDriver 测试框架 中所述。 这些是单独的组件。

选择 WebDriver 测试框架

下载 Microsoft Edge WebDriver 后,必须下载的最后一个组件是 WebDriver 测试框架。 测试作者使用 WebDriver 测试框架编写端到端测试并自动执行浏览器。 WebDriver 测试框架提供特定于语言的界面,该界面将代码转换为 Microsoft Edge WebDriver 在 Microsoft Edge 中运行的命令。 WebDriver 测试框架适用于所有主要平台和语言,例如 Python、Java、C#、Ruby、JavaScript。

Microsoft Edge WebDriver 可与任何 WebDriver 框架一起使用。 本文提供有关使用 Selenium WebDriver 框架的说明,但你可以使用任何支持 WebDriver 的库、框架和编程语言。

Selenium WebDriver 是 WebDriver 框架的一种常用实现。 Selenium 是一个跨浏览器自动化库,与语言无关,与测试框架无关。 本文仅使用 Selenium WebDriver 作为说明性示例,因为它满足大多数用户的需求。 如果使用 Selenium 自动执行 Microsoft Edge,则必须使用 Selenium 4;Selenium 3 不再受支持。

若要使用 Selenium WebDriver 以外的 WebDriver 测试框架完成相同的任务,请参阅所选框架的官方文档。

使用 Selenium WebDriver

可以使用的一个可能的 WebDriver 框架是 Selenium WebDriver,它是 Selenium 工具套件的一部分。 Selenium WebDriver 是一个开源测试框架,可在任何平台上使用,并提供 Java、Python 3、C#、Ruby 和 JavaScript 的语言绑定。

如果使用 Selenium 自动执行 Microsoft Edge,则必须使用 Selenium 4;Selenium 3 不再受支持。

有关为首选语言和开发环境安装 Selenium 的详细说明,请参阅 Selenium 有关 安装 Selenium 库的文档。

使用 WebDriver 自动化 Microsoft Edge

若要使用 WebDriver 自动执行浏览器,必须首先使用 WebDriver 测试框架启动 WebDriver 会话。 WebDriver 会话是通过 WebDriver 命令控制的浏览器的单个运行实例。

启动 WebDriver 会话以启动新的浏览器实例。 启动的浏览器实例将保持打开状态,直到关闭 WebDriver 会话。

以下部分逐步讲解如何使用 Selenium 4 通过 Microsoft Edge 启动 WebDriver 会话。

注意

本文提供有关使用 Selenium WebDriver 框架的说明,但你可以使用任何支持 WebDriver 的库、框架和编程语言。 若要使用另一个框架完成相同的任务,请查阅所选框架的文档。

自动化 Microsoft Edge

Selenium 使用 EdgeDriver 类来管理 Microsoft Edge 会话。 以下代码:

  1. 启动 Microsoft Edge 会话。
  2. 指示 Microsoft Edge 转到必应。
  3. 搜索“WebDriver”。
  4. 休眠几秒钟,以便查看结果。

若要开始使用 WebDriver 自动化 Microsoft Edge,请复制并粘贴首选语言的代码片段:

using OpenQA.Selenium;
using OpenQA.Selenium.Edge;
using System.Threading;

namespace EdgeDriverSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var driver = new EdgeDriver();
            try
            {
                driver.Url = "https://bing.com";

                var element = driver.FindElement(By.Id("sb_form_q"));
                element.SendKeys("WebDriver");
                element.Submit();

                Thread.Sleep(5000);
            }
            finally
            {
                driver.Quit();
            }
        }
    }
}

管理和配置 Microsoft Edge WebDriver 服务

创建用于启动 Microsoft Edge 会话的新 EdgeDriver 对象时,Selenium 会启动对象与之通信的新 Microsoft Edge WebDriver 进程 EdgeDriver 。 调用 对象的 Quit 方法时,EdgeDriverMicrosoft Edge WebDriver 进程将关闭。 如果有多个测试,让每个 EdgeDriver 对象管理自己的驱动程序进程可能效率低下,因为每个测试都必须等待新的驱动程序进程启动。 相反,可以创建单个 Microsoft Edge WebDriver 进程,然后将其用于多个测试。

Selenium 使用 EdgeDriverService 类来管理 Microsoft Edge WebDriver 进程。 可以在运行测试之前创建 EdgeDriverService 一次, 然后,在创建新的 EdgeDriver 对象时,将此 EdgeDriverService 对象传递给 EdgeDriver 构造函数。 将 EdgeDriverService 传递到 EdgeDriver 构造函数时,EdgeDriver 对象将使用此 EdgeDriverService,而不是创建新类。

还可以使用 EdgeDriverService 为 Microsoft Edge WebDriver 进程配置命令行选项,如下所示。

以下代码片段会创建新的 EdgeDriverService 并启用详细日志输出:

var service = EdgeDriverService.CreateDefaultService();
service.UseVerboseLogging = true;

var driver = new EdgeDriver(service);

配置 Microsoft Edge 选项

可以将 EdgeOptions 对象传递给 EdgeDriver 构造函数,以便为 Microsoft Edge 浏览器进程配置额外的选项。 以下部分演示如何将 EdgeOptions 用于某些常见方案。 有关支持的选项的完整列表,请参阅功能和 EdgeOptions

选择特定浏览器二进制文件

可以使用特定 Microsoft Edge 二进制文件启动 WebDriver 会话。 例如,可以使用 Microsoft Edge 预览频道(如Microsoft Edge Beta、开发人员或 Canary)运行测试。

var options = new EdgeOptions();
options.BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe";

var driver = new EdgeDriver(options);
传递额外的命令行参数

可以使用 EdgeOptions 配置将在创建会话时传递给 Microsoft Edge 浏览器进程的命令行参数。 例如,可以将浏览器配置为在无外设模式下运行。

var options = new EdgeOptions();
options.AddArgument("headless");

var driver = new EdgeDriver(options);

其他 WebDriver 安装选项

Docker

如果使用 Docker,请运行以下命令,下载预安装了 Microsoft Edge 和 Microsoft Edge WebDriver 的预配置映像。

docker run -d -p 9515:9515 mcr.microsoft.com/msedge/msedgedriver

有关详细信息,请参阅 Docker Hub 上的 msedgedriver 容器

应用程序防护

使用 Microsoft Defender 应用程序防护的受信任站点可以使用 Microsoft Edge WebDriver 自动完成。 简而言之,Microsoft Defender 应用程序防护也称为应用程序防护

无法使用 Microsoft Edge WebDriver 自动或操作使用 应用程序防护 的不受信任的网站。 应用程序防护在容器中启动不受信任的站点,并且此容器不会公开 Microsoft Edge WebDriver 与站点通信所需的远程调试端口。

你的企业管理员定义什么是受信任的站点,包括云资源和内部网络。 不在受信任站点列表中的网站被视为不受信任。 Microsoft Edge WebDriver 可以自动执行 InPrivate 窗口和受信任站点列表中的站点。

有关应用程序防护的详细信息,请参阅:

选择退出诊断数据收集

默认情况下,Microsoft Edge WebDriver 向 Microsoft 发送诊断数据,例如 New Session WebDriver 命令的状态。 若要关闭 Microsoft Edge WebDriver 的诊断数据收集,请将 MSEDGEDRIVER_TELEMETRY_OPTOUT 环境变量设置为 1。 有关 Microsoft Edge WebDriver 收集的数据的详细信息,请参阅 Microsoft Edge 隐私白皮书

旧版 Microsoft WebDriver for EdgeHTML

Microsoft WebDriver 是基于 EdgeHTML 的 Microsoft Edge 的旧版 WebDriver 实现。 Microsoft WebDriver 作为可选 Windows 组件分发,因为旧版 Microsoft Edge (EdgeHTML) 已使用操作系统进行更新。 Microsoft WebDriver 与基于 Chromium 的最新版本 Microsoft Edge 不兼容。 Microsoft WebDriver 仍然可供为 UWP 应用编写基于 WebDriver 的测试的开发人员使用,因为这些测试依赖于 EdgeHTML,但不再建议使用 Microsoft WebDriver。

请参阅 WebDriver (EdgeHTML)

疑难解答

以下是使用 WebDriver 自动执行 Microsoft Edge 时的疑难解答注意事项。

开发人员工具可用性策略

如果 IT 管理员已将 DeveloperToolsAvailability 策略设置为 2,则会阻止 Microsoft Edge WebDriver 驱动 Microsoft Edge,因为驱动程序使用 Microsoft Edge DevTools。 若要自动执行 Microsoft Edge,请确保将 DeveloperToolsAvailability 策略设置为 01

使用 Visual Studio 模板

如果使用 Visual Studio 随附的 Microsoft Edge WebDriver 模板创建一个简单的测试项目,请确保已完成以下操作:

  • 下载 Microsoft Edge WebDriver 并确保它在 PATH 中可用。
  • 将 WebDriver 框架 ((如 Selenium.WebDriver NuGet 包) )添加到项目。

执行这些步骤后,导航到必应的示例测试应会成功完成。

由适用于 Microsoft Edge 的 Selenium 工具引起的错误

如果在尝试创建新 EdgeDriver 实例时收到以下错误: System.MissingMethodException: 'Method not found: 'OpenQA.Selenium.Remote.DesiredCapabilities OpenQA.Selenium.DriverOptions.GenerateDesiredCapabilities(Boolean)',请参阅下面的 从 Selenium 3 升级到 Selenium 4

从 Selenium 3 升级到 Selenium 4

如果使用 了适用于 Microsoft Edge 的 Selenium 工具 向 Selenium 3 浏览器测试添加 Microsoft Edge 支持,请将测试更新为 Selenium 4,如下所示:

  1. 从项目中删除用于 Microsoft Edge 的 Selenium 工具。

  2. 更新测试以改用内置的 EdgeDriver 和 Selenium 4 提供的相关类。 必须将任何现有的 Selenium 3 测试升级到 Selenium 4。 若要了解有关升级到 Selenium 4 的详细信息,请参阅升级到 Selenium 4

  3. 删除 EdgeOptions.UseChromium 属性的所有用法。 Selenium 4 中不再存在此属性,因为 Selenium 4 仅支持 Microsoft Edge (Chromium浏览器引擎) 。

不支持 Selenium 3

若要使用 WebDriver 自动执行 Microsoft Edge,如果使用 Selenium,请确保使用 Selenium 4。 不支持 Selenium 3。

所有使用 Selenium 的新项目都必须使用 Selenium 4。 若要使用 WebDriver 自动执行 Microsoft Edge,如果使用 Selenium,请确保使用 Selenium 4。 Selenium 3 不再受支持。

不再使用适用于 Microsoft Edge 的 Selenium 工具

Selenium 4 不需要适用于 Microsoft Edge 的 Selenium 工具。 适用于 Microsoft Edge 的 Selenium 工具仅适用于 Selenium 3。

请勿将 Selenium 4 与适用于 Microsoft Edge 的 Selenium 工具配合使用,因为 Selenium 4 已内置对 Microsoft Edge 的支持。 如果尝试使用适用于 Microsoft Edge 的 Selenium 工具,则尝试创建新 EdgeDriver 实例时,会出现以下错误: System.MissingMethodException: 'Method not found: 'OpenQA.Selenium.Remote.DesiredCapabilities OpenQA.Selenium.DriverOptions.GenerateDesiredCapabilities(Boolean)'。 如果使用 Selenium 4 并收到此错误,请从项目中删除 Microsoft.Edge.SeleniumTools, 并确保使用 EdgeOptions 命名空间中的官方 EdgeDriverOpenQA.Selenium.Edge 类。

另请参阅