Selenium JavaScript 绑定(selenium-webdriver)演进全览:从 v2.29 到 v4.48 的 CDP、BiDi 与 W3C 合规之路

发布时间:2026/9/10 21:07:33
Selenium JavaScript 绑定(selenium-webdriver)演进全览:从 v2.29 到 v4.48 的 CDP、BiDi 与 W3C 合规之路 Selenium JavaScript 绑定selenium-webdriver演进全览从 v2.29 到 v4.48 的 CDP、BiDi 与 W3C 合规之路【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium本篇技术指南以 Selenium 官方 JavaScript 绑定javascript/selenium-webdriver/CHANGES.md为核心依据系统梳理selenium-webdriver从 npm 首发 v2.29.0 到 v4.48.0 的完整版本演进脉络。读者将掌握三大主线Chrome DevTools ProtocolCDP协议版本的滚动支持策略、WebDriver BiDi 从零到模块化的能力建设历程以及 Selenium Manager、W3C WebDriver 规范合规等基础设施层面的关键变迁并了解每个重要版本对应的破坏性 API 变更与浏览器支持调整。一、文档定位一份浓缩的 JavaScript 绑定发展史CHANGES.md是selenium-webdriver包唯一且完整的变更日志以时间倒序记录了自 2.29.0 起的每一次发布。它不仅是升级指南更准确反映了 Selenium 官方对 JavaScript 绑定的长期技术决策紧跟 Chrome 发布节奏滚动维护 CDP 协议版本、渐进式落地 W3C WebDriver 标准、用 WebDriver BiDi 逐步取代 CDP 专属能力以及用 Selenium Manager 替代手工管理浏览器驱动。配套的package.json显示当前版本为4.49.0-nightly声明engines.node 22.0.0主入口为./index运行时依赖仅有bazel/runfiles、jszip、tmp与ws四个——依赖面收敛正是多年去重、去 Closure 库重构的结果。二、CDP 支持跟随 Chrome 版本滚动的工程化策略CDPChrome DevTools Protocol支持是 4.x 时代最直观的版本节奏。从变更日志可提炼出固定模式每个 4.x 小版本新增三个 Chrome 协议版本并移除三个旧版本。版本CDP 支持范围4.48.0v150、v151、v1524.47.0v149、v150、v1514.46.0v148、v149、v1504.45.0v147、v148、v1494.44.0v146、v147、v1484.39.0Chrome 143 新增、140 移除4.34.0Chrome 138 新增、135 移除4.29.0Chrome 133 新增、130 移除4.1.2Chrome 100 新增、97 移除4.0.0修复 Chrome 与 Firefox 的 CDP协议描述文件集中在仓库的common/devtools/chromium/目录每个版本目录下包含.pdl协议定义与.bazel构建文件。在代码层面selenium-webdriver的 CDP 能力通过 chromium.js 中的sendDevToolsCommand(cmd, params {})暴露例如setDownloadPath底层即调用Page.setDownloadBehavior命令。值得注意的历史节点4.30.0移除了 v85 支持理由是Firefox 不再需要4.29.0从 JS 绑定移除 Firefox CDP[js] Remove Firefox CDP并在 webdriver.js 中固化抛出CDP support for Firefox is removed. Please switch to WebDriver BiDi.——这是 Selenium 明确将 Firefox 迁移到 BiDi 的标志性事件4.22.0增加默认在 Firefox 中启用 CDP的偏好项随后又被移除整个过程体现了 CDP→BiDi 的过渡轨迹4.0.0-alpha.8 首次引入 CDP 支持连同 DOM 变更监听mutation listener与浏览器控制台日志监听一起进入主 API。从源码结构看CDP 连接逻辑还承担了driver.quit()时的 WebSocket 清理4.24.1 修复Close CDP websocket connection on driver.quit以及 4.26.0 对应的 BiDi WebSocket 关闭修复连接生命周期管理贯穿始终。三、WebDriver BiDi从实验性功能到主流协议BiDiWebDriver BiDi是变更日志中篇幅最大、迭代最密集的主题其演进可分三个阶段3.1 奠基期4.8.0 ~ 4.15.0初始支持与基础命令4.8.0加入初始 BiDi 支持#11395提供浏览器上下文命令、监听 JS 日志与任意类型日志的LogInspector及日志过滤能力4.10.0新增 Script 模块的 add/remove preloaded scripts 命令与printPage命令并为 Edge 引入 webview2 支持4.11.0落地 Network 模块事件#121974.15.0补齐captureScreenshot、browsing context 的 activate / handle user prompt / reload 命令及上下文事件。3.2 模块扩张期4.16.0 ~ 4.24.0浏览器、存储、网络与脚本4.18.0增加 browsing context destroyed / realm destroyed 事件、locateNode命令、网络拦截addIntercept / removeIntercept、认证相关命令continueWithAuth、fetchError并废弃NetworkInspector以 Network 取代4.19.0新增 browser.js 浏览器模块与 storage.js 存储模块、continueRequest/continueResponse/provideResponse命令及 Input 模块的setFiles4.23.0修复事件退订方法并为各模块补close()方法、Script 模块增加 add/remove handlers、日志条目增加 source 类型、加入 DOM 变更处理器与高级脚本固定script pinningAPI4.24.0增加认证处理器authentication handlers、高级脚本命令并暴露 Node.js 侧版本号。3.3 工程化与协议规范化期4.25.0 ~ 4.48.04.45.0引入基于 CDDLRFC 8610 规范描述语言的 JavaScript/TypeScript 代码生成器并发布共享的 BiDi CDDL AST 与模型构件4.46.0增加绑定中立的 BiDi schema以cddl2ts门控保真度升级cddl至 0.21.0 修复引号保留字解析4.47.0将生成的 BiDi 元素链接到规范定义、为 schema 增加objectOnly/preserveExtras/scalar-primitive信号、修正浮点/枚举类型保真度并校验出站引用字段类型同时合并 vendor CDDL 文件到共享 BiDi schema4.48.0增加序列化与域domain层、BiDi 连接级事件订阅并确保 BiDi 不再直接暴露在 Driver 上——这与 webdriver.js 中WebDriver#getBidi()的废弃声明完全对应文档注释明确指出 BiDi 是内部实现细节应改用Network.create(driver)或require(selenium-webdriver/bidi/network)等组合式模块。仓库中 bidi/ 目录是上述演进成果的完整落点network.js、networkInspector.js、browsingContext.js、scriptManager.js、logInspector.js、storage.js、browser.js、input.js、permissions相关能力以及serialization/子目录共同构成当前 JS 绑定的 BiDi 模块矩阵。四、Selenium Manager浏览器与驱动的自动发现Selenium ManagerSM从 4.6.0 起逐步接管浏览器与驱动管理是近年最重要的基础设施变更4.6.0首次引入 Selenium Manager 支持#111894.11.0起移除自研的驱动查找逻辑全面委托给 SMRemoving logic to find drivers, delegating to Selenium Manager同时每个浏览器只打印一次 SM 调试信息SM 输出被并入 Options4.12.0修复浏览器/驱动发现逻辑#12456为浏览器二进制创建绝对路径4.13.0允许通过环境变量自定义 Selenium Manager 路径并为异常消息附加文件位置4.17.0将 JavaScript 纳入 Selenium Manager 输入跟踪#132884.20.0将 Selenium Manager 改为薄包装thin wrapper并提醒接口可能变化、仍处 beta 阶段4.47.0在每个发布包中打包 Selenium Manager SBOM 与 NOTICE 文件。在源码层面common/seleniumManager.js与common/driverFinder.js即对应实现前者负责调用 SM 二进制并解析 JSON 输出4.8.2 起使用 JSON 输出后者整合驱动与浏览器定位逻辑。五、W3C WebDriver 规范合规两次重大重构5.1 Promise 管理器移除v3.0 ~ v4.0v3.0.0 起正式告别自研 Promise 管理器全部改用原生 Promisepromise.when、Deferred、ControlFlow等一批 API 被移除或废弃2.45.0 起 Promise 模块遵循 Promises/A 规范回调移至未来事件循环轮次执行SELENIUM_PROMISE_MANAGER0环境变量可提前禁用 Promise 管理器v4.0.0-alpha.1 彻底移除lib/actions、lib/events、phantomjs、opera模块及触摸动作touchActions。5.2 Actions 与窗口管理重构v4.0.0-alpha.1Actions API 全面按 W3C 规范重构lib/input.Actions类随后 v4.0.0-beta.3 移除 legacy actions 与Bridge ModeWebElement.getSize()与getLocation()合并为getRect()窗口操作新增fullscreen、minimizedriver.manage().timeouts改为get/setTimeoutscookie 操作支持httpOnly命名 cookie 直接走 W3C 端点GET /session/{session id}/cookie/{name}。5.3 其他规范对齐3.4.0 修正 W3C 响应解析响应数据必须是带value键的 JSON 对象、补齐 user prompts 与远程脚本端点3.5.0 在 Firefox Options 上新增headless()与windowSize()Chrome 需 594.1.1 移除 legacy JWP 支持与 w3c 开关实现getDomAttribute按 W3C 定义取值4.17.0 移除已废弃的 headless 方法改由 Options 配置4.21.0 统一selectVisibleByText与其他语言一致并统一各方法使用的定位器#13902。六、浏览器支持矩阵的变迁浏览器关键节点Operav4.0.0-alpha.1 移除原生支持建议改用 Chromev4.2.0 从 JS 绑定彻底删除 OperaPhantomJSv4.0.0-alpha.1 移除建议改用 Chrome/Firefox headless 模式Edgev4.0.0-rc-1 让 edge.js 继承 chromium.driver4.10.0 支持 webview2Firefoxv2.43.0 起原生支持不再需要 Java Selenium 服务器3.0.0 起使用 geckodriver 与moz:firefoxOptions4.29.0 移除 JS 侧 Firefox CDP转向 BiDi4.32.0 将 Firefox 远程活动协议设为仅 BiDiSafari3.0.0 起改用系统自带 safaridriver4.28.0 启用 Safari 诊断日志IE4.7.0 起 Selenium Manager 支持 IE DriverIE Mode 支持在 4.11.0 增加Chrome/Android4.7.0 前后持续维护 mobile emulation见 example/chrome_mobile_emulation.jsNode 版本支持策略同样随版本演进2.45.0 定为最近两个稳定小版本3.0.0 要求 Node 6.9.0 LTS4.34.0 要求 20.0.04.28.1 修正为 18.20.54.28.0 声明 22.x LTS当前package.json要求 22.0.0。七、重要功能与 API 里程碑速查7.1 核心能力引入时间线2.34.0原生 ChromeDriver 支持、Capabilities类2.45.0IE/Opera 26/Safari 原生支持、文件上传拷贝2.46.0日志 API、WebDriver 命令代理2.52.0Edge 支持、buildAsync()3.4.0Chrome 网络条件模拟offline/2G/WiFi4.1.0Shadow DOM 处理、BiDionLogEvent捕获浏览器控制台日志4.3.0虚拟认证器virtual authenticator见 lib/virtual_authenticator.js4.5.0Select 支持包selectByIndex / selectByVisibleText 等、Actions API 的sendKeys定向到元素、前进/后退鼠标按键枚举4.28.0Federated Credential ManagementFedCM支持见 lib/fedcm/4.42.0JavaScript 库的 Color 类见 lib/color.js。7.2 相对定位器v4.0.0-alpha.8 引入 relative locators后续多次打磨4.1.1 修复RelativeBy导出4.11.0 修复By.js中遗漏的RelativeBy4.21.0 统一各方法所用定位器4.28.0 增加 straight relative-by locators。7.3 工程与构建4.40.0 起支持SE_DEBUG环境变量启用调试日志4.41.0 改为仅在覆盖用户设置时告警4.45.0 起为isDisplayed与 Find-Element 改用 TypeScript atoms4.44.0 开始迁移isDisplayedatom此前 4.45.0 已将 get attribute 改用 TypeScript atom对应 javascript/atoms/ 目录中的 locators 与 test 演进4.41.0 用 Bazel 构建 JSDoc4.40.0 以 Bazel 生成 JS 文档4.19.0 起 atoms 的 dom.js 改用 CSS 定位器。八、升级注意事项与兼容性要点结合变更日志中标注的破坏性变更升级时需重点核查Node 版本4.34.0 起要求 20.0.0当前主线要求 22.x LTS 及以上CDP 依赖使用 CDP 专属命令如sendDevToolsCommand的代码应关注协议版本滚动Firefox 用户需迁移到 BiDiBiDi APIWebDriver#getBidi()已废弃请改用Network.create(driver)等组合式模块NetworkInspector已被Network取代各 BiDi 模块现在拥有close()方法需妥善调用Selenium Manager4.20.0 起 SM 为 beta 阶段的薄包装接口可能变动驱动查找已完全委托 SM无需再手工配置 chromedriver 路径Actions APIlegacy actions 早已移除必须使用 W3C 规范的Actions类已移除浏览器Opera、PhantomJS 不再支持Firefox CDP 已移除。九、深入阅读变更日志全文javascript/selenium-webdriver/CHANGES.md包配置与 Node 版本要求javascript/selenium-webdriver/package.jsonBiDi 模块实现javascript/selenium-webdriver/bidi/驱动与 BiDi 连接核心javascript/selenium-webdriver/lib/webdriver.js、javascript/selenium-webdriver/lib/bidi_connection.jsCDP 命令入口javascript/selenium-webdriver/chromium.jsSelenium Manager 集成javascript/selenium-webdriver/common/seleniumManager.js官方示例javascript/selenium-webdriver/example/CDP 协议定义common/devtools/chromium/JavaScript atomsTypeScript 化迁移对象javascript/atoms/【免费下载链接】seleniumA browser automation framework and ecosystem.项目地址: https://gitcode.com/GitHub_Trending/se/selenium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考