什么是WebDriver?浏览器自动化标准解说
无抓取抓取浏览器提供用于自动化工作流的管理浏览器基础设施,将客户端逻辑与浏览器执行分开。
简明扼要
- WebDriver是一个用于浏览器的远程控制接口。 它定义了一种平台和语言无关的协议,让进程外的客户端指导和检查用户代理。
- 经典的WebDriver使用命令-响应模型。 客户端创建会话,发送HTTP命令,接收结构化的结果或错误,并结束会话。
- 能力协商会话环境。 浏览器名称、版本、平台、代理、提示行为和厂商扩展有助于将请求与实现匹配。
- Selenium是一个围绕WebDriver构建的客户端生态系统。 Selenium绑定和网格使该协议可在多种语言和远程浏览器基础设施中访问。
- WebDriver和WebDriver BiDi相关但不同。 经典的仍然是面向命令的,而BiDi则添加了WebSocket连接、异步命令以及浏览器到客户端事件。
WebDriver是自动化与浏览器之间的契约
WebDriver使得程序能够在浏览器外创建会话并通过结构化接口执行浏览器操作。客户端可以是Selenium绑定、另一个自动化库、测试平台或自定义工具。远程端可以是浏览器驱动程序或与浏览器集成的实现。该协议涵盖导航、窗口、框架、元素、输入操作、脚本执行、cookies、屏幕截图、提示、超时、打印和错误。由于消息跨越进程边界,因此客户端和浏览器不需要使用相同的编程语言。
W3C WebDriver规范 将WebDriver定义为用于远程浏览器控制的平台和语言无关的传输协议。“传输协议”意味着可互操作的消息契约,而不是特定的Java、Python或JavaScript API。语言绑定将方便的方法调用转换为协议操作,并将响应转换为特定于语言的对象和异常。这种分离使工具和服务能够共享一个通用的浏览器控制接口。
本地端、远程端、会话和命令定义模型
本地端是发起WebDriver命令的客户端。远程端接收这些命令并控制用户代理。新的会话请求包含能力,远程端返回一个会话标识符加上匹配的环境。后续命令包括该标识符,并在会话中操作。远程端返回成功值或标准化的错误负载。删除会话释放其浏览器资源并使该标识符的后续命令失效。
MDN WebDriver概述 总结WebDriver作为外部浏览器控制接口,并区分经典WebDriver通过HTTP与WebDriver BiDi通过WebSocket之间的差异。经典路由将HTTP方法和路径映射到命令。该模型故意简单:发送一个操作,等待其响应,然后继续。这种简单性支持互操作性,但没有自然地从浏览器流式传输控制台、网络或上下文事件,除非使用扩展或其他机制。
- 本地端。 自动化客户端构造会话请求和命令并解释协议响应。
- 远程端。 浏览器端实现验证命令,操作用户代理,并返回结果或错误。
- 会话ID。 一个唯一标识符将后续命令限定为浏览器实例和协商环境。
- 能力。 请求和匹配的值描述浏览器、平台、代理、提示行为和扩展。
- 命令端点。 一个定义的方法和路由代表一次导航、元素、输入、脚本、cookie、窗口或捕获操作。
元素和输入跨越进程边界作为引用
当WebDriver找到一个元素时,远程端返回一个协议级别的元素引用,而不是将DOM节点转移到客户端进程。后续命令使用该引用来读取状态或进行输入。如果页面导航或替换节点,引用可能会变得过时。此行为解释了为什么自动化代码应该在操作附近定位元素,并等待使其相关的页面状态,而不是在重大应用更改中缓存句柄。
MDN WebDriver参考 记录WebDriver命令、能力和标准化错误类别。错误是互操作性契约的一部分:无效会话、过时元素、无效选择器、意外警告、不支持的操作和超时为客户端提供了共同的词汇。语言绑定以不同方式封装它们,因此诊断工具在可能的情况下应该保留原始错误名称、消息、堆栈、会话、命令和浏览器环境。
WebDriver标准化浏览器操作,而不是整个测试套件
该协议定义了远程控制边界。许多测试问题位于其上方或旁边,并必须由客户端生态系统提供。
| 问题 | 它属于哪里 |
|---|---|
| 浏览器命令 | WebDriver定义可互操作的导航、元素、输入、脚本、窗口、cookie、捕获和会话操作。 |
| 测试发现 | 特定语言的测试运行器或应用调度器查找和排序测试或作业。 |
| 断言 | 测试框架或断言库决定观察到的浏览器状态是否满足预期结果。 |
| 远程分配 | Selenium Grid或其他服务将请求的能力与可用的浏览器环境匹配。 |
| 文物 | 框架和浏览器服务决定如何存储屏幕截图、日志、视频、跟踪和报告。 |
| 应用程序模型 | 页面对象、夹具、域服务和测试数据编码了特定于被测产品的行为。 |
WebDriver合同有价值的地方
当跨客户端、浏览器、语言或远程服务的互操作性是架构的一部分时,WebDriver最为重要。
跨浏览器测试
一个客户端模型可以从特定于浏览器的实现请求会话,并在所需的浏览器矩阵中行使共同的用户行为。
远程浏览器服务
测试运行器可以通过与本地自动化相同的协议边界在另一台机器或托管平台上创建会话。
多语言组织
团队可以使用适合其应用程序和测试生态系统的语言绑定,同时共享浏览器服务约定和能力。
浏览器工具
监控、可访问性、捕获和自动化产品可以建立在标准的远程控制接口上,而不是某个特定供应商的调试协议。
经典WebDriver故意以命令为导向
经典WebDriver适用于离散操作,如导航、查找元素、单击、读取文本或截取屏幕截图。在严格的命令-响应交换中,连续的浏览器信号不太自然。历史上,客户端使用轮询、供应商扩展或特定于浏览器的协议来获得更丰富的事件流。WebDriver BiDi通过订阅和异步事件来解决这一鸿沟,同时保持跨浏览器的标准路径。
Web平台测试实施结果用于WebDriver 暴露浏览器之间WebDriver测试的实施结果。符合性不仅仅是一个二进制标签:单独的命令、边缘案例、扩展、版本和平台可能会有不同的行为。保持浏览器和驱动程序环境的可见性,测试套件依赖的操作,避免假设成功的新会话握手证明每个可选功能。
WebDriver集成检查清单
稳定的集成使协议会话、环境、命令和应用程序断言从开始到结束可观察。
- 记录请求的能力。 保持浏览器、版本、平台、代理、提示、证书、页面加载策略和版本化配置中的供应商选项。
- 捕获匹配的能力。 存储远程端返回的值,以便将故障与实际运行的浏览器环境关联。
- 管理会话所有权。 确定性地创建和删除会话,定义超时,并防止无关的测试共享浏览器配置文件或可变的应用程序数据。
- 使用基于条件的同步。 等待下一个操作所需的应用程序状态,而不是假设导航完成使每个动态元素准备就绪。
- 处理元素生命周期。 在使用附近定位元素,期望在导航或DOM替换后引用变得过时,并保持选择器与语义页面行为的连接。
- 保留协议证据。 保留命令名称、原始错误、会话ID、浏览器环境、屏幕截图和相关日志,而不暴露秘密。
- 测试远程边界。 验证真实远程服务上的文件传输、下载、窗口、权限、网络策略和文物;本地行为不足以作为充足的证据。
- 单独跟踪BiDi需求。 列出需要WebDriver BiDi的事件或模块,并在替换经典命令或特定于浏览器的集成之前验证当前浏览器和客户端的支持。
受管浏览器架构中的WebDriver概念
受管浏览器服务遵循相同的架构分离,使WebDriver变得有用:应用程序逻辑可以在一个地方运行,而浏览器在另一个地方运行。无杂质抓取浏览器为受支持的自动化客户端和动态网页数据工作流提供了该远程浏览器基础设施。
验证所选客户端所支持的实际协议和功能面,而不是假设每个远程浏览器端点实现WebDriver经典。审查当前 无杂质抓取浏览器产品概述, 无杂质抓取浏览器入门文档, 和 无杂质定价 在选择运营模型之前。
结论:WebDriver是互操作层
WebDriver 是自动化客户端与浏览器之间标准化的远程控制协议。会话和功能建立环境;命令操作导航、元素、输入、存储、窗口、脚本和捕获;结构化的结果和错误返回给客户端。Selenium 使这个模型在不同语言和远程基础设施中可访问。
该协议并不取代测试设计。稳定的定位符、基于状态的等待、隔离的数据、有意义的断言和可观察的环境仍然决定了一个自动化套件是否可信。WebDriver BiDi 在需要异步浏览器事件时补充了经典模型。
准备评估远程浏览器基础设施吗?
创建一个 Scrapeless 账户,并使用客户端、会话设置、浏览器环境以及您项目所需的证据测试有限的自动化工作流。
免费开始 →常见问题解答
WebDriver 和 Selenium 是同一个吗?
不。WebDriver 是一个浏览器自动化接口和协议系列。Selenium 是一个提供 WebDriver 语言绑定、网格、IDE 和相关工具的项目。其他客户端和浏览器服务也可以实现或使用 WebDriver。
WebDriver 为什么需要浏览器驱动?
远程实现将标准化命令委派给特定浏览器。浏览器供应商可以拥有或参与该实现,因此相同的协议操作映射到浏览器的本地自动化设施。一些现代打包隐藏了驱动程序管理,但实现边界仍然存在。
WebDriver 的功能是什么?
功能是在创建会话时请求和匹配的值。它们描述要求或环境细节,如浏览器名称、浏览器版本、平台、代理、提示处理、证书和供应商特定选项。
WebDriver 可以远程工作吗?
是的。本地端可以向远程 WebDriver 终端发送会话请求和命令,例如 Selenium Grid 或托管的浏览器服务。验证该环境提供的确切功能、文件行为、工件、网络策略和命令支持。
WebDriver 和 WebDriver BiDi 之间有什么区别?
经典 WebDriver 主要使用 HTTP 命令-响应操作。WebDriver BiDi 添加了 WebSocket 连接、异步命令、订阅和浏览器到客户端的事件。这两者共享会话概念,客户端可以在 BiDi 功能覆盖扩展时同时使用这两者。