使用 WebDriver 自动执行 Microsoft Edge

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

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

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

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

  • 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 命令的测试。 然后,Edge WebDriver 负责将该命令传达给浏览器。
WebDriver 测试框架 测试作者使用测试框架编写端到端测试并自动执行浏览器。 提供特定于语言的界面,该界面将代码转换为发送到 Edge WebDriver 的命令。 WebDriver 测试框架适用于所有主要平台和语言。 其中一个框架是 Selenium。
Internet Explorer 驱动程序 专门用于 Internet Explorer 的 WebDriver 协议的开源实现。 若要针对 Internet Explorer 模式运行旧的端到端测试,建议使用 Internet Explorer 驱动程序。
Microsoft WebDriver (旧版) 上一个特定于浏览器的适用于 Microsoft Edge (EdgeHTML) 的驱动程序,也称为旧版 Microsoft Edge。

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

下载 Microsoft Edge WebDriver

若要开始编写自动测试,请确保安装的 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 环境变量。

选择 WebDriver 测试框架

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

本文提供了有关使用 Selenium 框架的说明,但你可以使用任何支持 WebDriver 的库、框架、编程语言。 若要使用除 Selenium 以外的 WebDriver 测试框架完成相同的任务,请参阅官方文档了解所选框架。

使用 Selenium 4

Selenium WebDriver 是一个开放源代码测试框架,可在任何平台上使用,并为 Java、Python、C#、Ruby、JavaScript 提供语言绑定。 注意:运行 Selenium 4 测试需要 Python 3。 不支持 (Python 2.7。)

若要使用 WebDriver 自动执行 Microsoft Edge,如果使用 Selenium,则必须使用 Selenium 4,它内置支持 Microsoft Edge (Chromium) 。

若要安装 Selenium 4,请 参阅安装 Selenium 库。 如果需要,nuget 包页为 Selenium.WebDriver

从 Selenium 3 升级

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

必须将现有的 Selenium 3 测试升级到 Selenium 4。 若要了解有关升级到 Selenium 4 的详细信息,请参阅升级到 Selenium 4

如果使用 Selenium Tools for Microsoft Edge 将Microsoft Edge (Chromium) 支持添加到 Selenium 3 浏览器测试,请按如下所示更新测试:

  1. 从项目中删除用于 Microsoft Edge 的 Selenium 工具。 无需将 Selenium Tools 用于 Selenium 4 的 Microsoft Edge,因为 Selenium 4 已内置支持 Microsoft Edge (Chromium)。

  2. 更新测试以改用内置的 EdgeDriver 和 Selenium 4 提供的相关类。

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


使用 WebDriver 自动化 Microsoft Edge

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

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

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

备注

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

自动化 Microsoft Edge

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

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

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

  • C#
  • Python
  • Java
  • JavaScript
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();
            }
        }
    }
}

管理和配置 Edge WebDriver 服务

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

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

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

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

  • C#
  • Python
  • Java
  • JavaScript
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)运行测试。

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

var driver = new EdgeDriver(options);

传递额外的命令行参数

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

  • C#
  • Python
  • Java
  • JavaScript
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 应用程序防护的受信任站点可以使用 Edge WebDriver 自动执行。 简而言之,Microsoft Defender 应用程序防护也称为_应用程序防护_。

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

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

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

选择退出诊断数据收集

默认情况下,Edge WebDriver 会将诊断数据(例如 “新建会话 WebDriver”命令的状态)发送到 Microsoft。 若要关闭 Edge WebDriver 的诊断数据收集,请将 MSEDGEDRIVER_TELEMETRY_OPTOUT 环境变量设置为 1。 有关 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

从 Selenium 3 升级到 Selenium 4

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

如果使用 Selenium 4,则无需使用用于 Microsoft Edge 的 Selenium 工具。 用于 Microsoft Edge 的 Selenium 工具仅适用于 Selenium 3。 如果尝试将 Selenium 4 与 Selenium Tools for Microsoft Edge 配合使用,并尝试创建新的 EdgeDriver 实例,则会收到以下错误:System.MissingMethodException: 'Method not found: 'OpenQA.Selenium.Remote.DesiredCapabilities OpenQA.Selenium.DriverOptions.GenerateDesiredCapabilities(Boolean)'

如果使用 Selenium 4 并收到此错误,请从项目中删除 Microsoft.Edge.SeleniumTools, 并确保使用 EdgeOptions 命名空间中的官方 EdgeDriverOpenQA.Selenium.Edge 类。

另请参阅