使用 WebDriver 自动执行 Microsoft Edge
WebDriver 允许你通过模拟用户交互来自动执行 Microsoft Edge。 使用 WebDriver 的测试相比于在浏览器中运行的 JavaScript 单元测试有一些优势:
WebDriver 可以使用在浏览器中运行的 JavaScript 不可使用的功能和信息。
WebDriver 比 JavaScript 单元测试更准确地模拟用户事件或 OS 级事件。
WebDriver 管理单个测试会话中的多个窗口、选项卡、网页。
WebDriver 在特定计算机上运行多个 Microsoft Edge 会话。
本文提供原始代码示例,但未完成测试。 本文不提供 Selenium WebDriver 入门的完整操作方法,但仅介绍流程中特定于 Edge 的Microsoft部分。 这包括获取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 版本与 Microsoft Edge 版本匹配。 由四个部分构成的版本号的前三个部分必须匹配。
下载并安装与浏览器版本匹配的 Microsoft Edge WebDriver 版本,如下所示:
转到
edge://settings/help
并记下 Microsoft Edge 的版本,该版本由四部分组成:在页面的 “下载” 部分中,单击与 Microsoft Edge 版本号匹配的平台按钮, (如 x64) :
Microsoft Edge 和 Microsoft Edge WebDriver 之间,由四个部分构成的版本号的前三个部分必须匹配。 例如,以下版本的 Microsoft Edge 和 Microsoft Edge WebDriver 将协同工作,因为前三个数字相同:
- 128.0.2739.79
- 128.0.2739.84
若要下载旧版本,请单击“最新版本”部分下的“转到完整目录”按钮。
下载完成后,将
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 会话。 以下代码:
- 启动 Microsoft Edge 会话。
- 指示 Microsoft Edge 转到必应。
- 搜索“WebDriver”。
- 休眠几秒钟,以便查看结果。
若要开始使用 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
方法时,EdgeDriver
将关闭Microsoft 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 会将诊断数据(例如 New Session WebDriver 命令的状态)发送到Microsoft。 若要关闭 Microsoft Edge WebDriver 的诊断数据收集,请将 MSEDGEDRIVER_TELEMETRY_OPTOUT
环境变量设置为 1
。 有关 Microsoft Edge WebDriver 收集的数据的详细信息,请参阅 Microsoft Edge隐私白皮书中的 Microsoft Edge WebDriver。
旧版 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 策略设置为 0
或 1
。
使用 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
如果使用 Selenium Tools for Microsoft Edge 向 Selenium 3 浏览器测试添加Microsoft Edge 支持,请将测试更新为 Selenium 4,如下所示:
从项目中删除用于 Microsoft Edge 的 Selenium 工具。
更新测试以改用内置的
EdgeDriver
和 Selenium 4 提供的相关类。 必须将任何现有的 Selenium 3 测试升级到 Selenium 4。 若要了解有关升级到 Selenium 4 的详细信息,请参阅升级到 Selenium 4。删除
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 与 Selenium Tools for Microsoft Edge 配合使用,因为 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
命名空间中的官方 EdgeDriver
和 OpenQA.Selenium.Edge
类。
另请参阅
- Selenium 浏览器自动化项目 - 有关 Selenium 上下文中的 WebDriver 的信息,以及如何使用 Selenium 编写自动化 WebDriver 测试。
- Selenium.WebDriver NuGet 包。
- 请联系 Microsoft Edge WebDriver 团队,发送有关使用 WebDriver、WebDriver 测试框架(如 Selenium)和 Microsoft Edge 的反馈。