前言
web自动化测试领域,最核心的其实是浏览器的驱动方法。现在最流行的是已经被W3C标准化的webDriver,而占据浏览器垄断地位的Chrome其实也有自己的一个标准协议,也就是CDP(chrome devTools protocol),它可以提供更比WebDriver更底层的对浏览器的控制。google 自己的自动化测试工具 puppeteer 其实就是基于 CDP 进行的自动化实现。
WebDriver的发展历程
跟随 Selenium 发展起来的 webDriver 协议是目前 Web 自动化测试领域的事实标准。而这一历程也是逐步发展而来的。
- 2004 Selenium 诞生
- 2006 WebDriver 作为一款工具诞生
- 2009 google自动化测试大会,Seleium 和 WebDriver 合并为一个项目,发布Selenium 2.0
- 2016 Selenium3 发布,彻底抛弃1.0中的Selenium RC
- 2018 W3C标准组织吸纳了WebDriver为标准协议
- 2021 Selnium 4.0发布,取消了WebDriver原先的Json Wire协议,全面采用W3C webDriver
JavaScript和Node.js壮大, 自动化测试百花齐放
而随着 Web 页面的前端开发越来越依赖 JavaScript,一批新的自动化测试工作也逐渐推出,包括WebdriverIO、Appium、Nightwatch、Protractor(已废弃)、Testcafe、Cypress、Puppeteer 和 Playwright 等新的自动化解决方案应运而生。
自动化工具的两大流派
以上这些自动化工具,根据它们运行的层级,可以分为下面两大流派
- 上层控制:在浏览器中执行 JavaScript 的工具。例如,Cypress 和 TestCafe 利用 Web API 和 Node.js 来直接在浏览器中运行测试。
- 底层控制:通过在浏览器之外执行远程命令的工具。当工具需要更强的控制力时(例如打开多个标签页或模拟设备模式),此时它们需要执行远程命令,以通过协议控制浏览器。 两种主要的自动化协议为 WebDriver(W3C) 和 Chrome 开发者工具协议 (CDP)。分别以
Selenium
和puppeteer
为代表
WebDriver 和 CDP 的对比
webDriver 工作原理
基于 WebDriver 协议的自动化测试工具,需要一个专门的浏览器驱动,通过浏览器驱动来实现跨不同浏览器的标准协议。工具和驱动之间通过 http 协议交互。
也就是说,我们在web页面上完成的相关操作,实际上是自动化工具将其转换为了一个符合 webDriver 协议的 http 请求,再通过具体的driver驱动浏览器完成动作。
比如一个页面点击操作,实际是向对应浏览器驱动发出如下请求:
|
|
但对于一些底层的控制,如浏览器本身的一些事件如新开窗口等,因为 webDriver 协议基于 http 请求,就很难处理。
CDP工作原理
而 CDP,它原先并不是专门应用于自动化测试目的,是为 chrome 浏览器的开发者工具的调试功能设计,只是后来被 puppeteer 用于了自动化测试。相比 Webdriver ,它是基于 WebSocket 直接和基于 chromium 的浏览器实现底层通信,可以双向传递,能提供更快速和更底层的控制。完成一些 webDriver协议 无法处理的动作。
底层控制:
- 捕获控制台消息
- 拦截网络请求
- 模拟 Device Mode
- 模拟地理定位
- …..
页面操作,实际上是转换为了一系列 CDP 命令:
|
|
但是,虽然提供了底层支持,但 CDP 协议最大的问题就是只能支持 Chromium 内核浏览器,并不是一个开放标准。 此外 CDP 协议也设计的比较复杂,不太适合直接从编码层面调用。
何为WebDriver BiDi?
基于 WebDriver 协议和 CDP 协议各自的优缺点,自动化测试领域目前正在讨论推出全新的标准。也就是 WebDriver BiDi。
这个协议的目标是兼顾 WebDriver 和 CDP 协议的优点,提供如下特性(愿景):
- 跨浏览器支持
- 双向信息传递
- 作为通用标准,纳入W3C
- 提供底层控制
- 以自动化测试为目的,更简洁方便地通过API调用
- 支持各种工具和浏览器
目前这个协议还在协商、开发阶段。但已经引入了各大主流浏览器厂商、测试工具和服务提供商的参与,可以预见,将会是 Web 自动化测试领域下一个重大更新!
参与厂商:
目前的最新的进展是 2024-09-23 推出的草案版本。
从草案内容来看,目前还处于相对早期阶段,短期内应该不会正式推出,所以相当长时间内, WebDriver 依然会是web自动化测试工具的事实标准,但相信BiDi将会是后续的主要发展方向。
其实从 近期 Selenium 4的更新源码中,已经可以看到对BiDi协议的支持扩展方法了
我们将长期关注这一标准的发展趋势和对目前自动化测试技术的影响。