下载内容

警告: 如果您使用的是 Chrome 版本 115 或更高版本,请参阅 Chrome for Testing 可用性信息中心。

在此信息中心内,您可以找到用于下载特定 ChromeDriver 版本的 JSON 端点。

早期 Chrome 版本

对于较低版本的 Chrome,以下是支持它的 ChromeDriver 版本。

如需详细了解如何选择合适的 ChromeDriver 版本,请参阅版本选择页面。

ChromeDriver 148

问题修复

DOM 访问:修复了在模拟点击 iframe 内的按钮时发生的崩溃问题,该 iframe 本身嵌套在已关闭的影子根中。之前用于查找所有者框架元素 ID 的 JavaScript 无法穿透封闭的影子根;新实现直接使用 f.X.d.Y.e.Z 格式来解析框架 (crrev.com/c/7594919、Bug: 469831357)。

安全性:加强了 Chrome 实参清理,以防止涉及位置实参注入的潜在漏洞 (crrev.com/c/7695604,Bug: 494464734)。

测试:增加了在 AddressSanitizer (ASAN) 下运行时 commands_unittest 中 FindElement(s)WhileNavigating 测试的 kImplicitWait 超时时间。默认的 3 秒超时时间不足以让重试循环在 ASAN 开销下消耗所有模拟错误,从而导致不稳定性 (crrev.com/c/7657276)。

内部更改和重构

C++ 标准:替换了 //chrome .cc 文件中多余的 base/functional/callback_forward.h include,强制在实际使用回调时使用 callback.h(crrev.com/c/7200285,Bug: 40318405)。将 logging::LoggingSettings 从 base/logging.h 移至其自己的标头 base/logging/logging_settings.h,以提高编译效率(crrev.com/c/7173024,在还原 crrev.com/c/7170750 后重新着陆 crrev.com/c/7160150)。解决了与 base/logging.h 相关的各种 IWYU 错误(crrev.com/c/7730403、Bug: 499476145)。

C++ 标准:将冗余的映射 count(key) 检查(后跟查找)替换为更高效的 find(key) 迭代器访问(crrev.com/c/7705392、crrev.com/c/7693277、Bug: 452950815)。通过 Thread 构造函数注入了 ThreadDelegate,以改进封装,并向 Thread 添加了 Restartable 选项,以适应需要重新启动线程的情况(crrev.com/c/7696887、Bug: 40881604)。

内存安全:将文件范围内的 #pragma allow_unsafe_buffers 转换为 chrome/ 中的精细 UNSAFE_TODO() 宏(crrev.com/c/7132241、Bug: 409340989)。将 IOBuffer->span().first() 缩短为 IOBuffer->first() (crrev.com/c/7159119)。

依赖项:滚动了 crossbench 依赖项,引入了用于修复在 macOS 和 Android 上发现本地构建的 ChromeDriver 二进制文件的功能 (crrev.com/c/7673978)。

测试:在修复了底层 build 和测试基础架构后,重新启用了 chromedriver_py_tests 中的 module 方案 (crrev.com/c/7707960)。

ChromeDriver 147

问题修复

测试:添加了一项封闭的回归测试,以验证 ElementClick 是否正确处理了具有叠加层元素的跨源 iframe 中的点击,尤其是在网站隔离方案中。这样可确保点击不会错误地路由到嵌入式内容,而是路由到可见的叠加层(crrev.com/c/7261984、Bug: 42321834、Bug: 42322220)。

内部更改和重构

C++ 标准:重命名了网址解码模式和函数,以遵循 Google C++ 样式指南,将 DecodeURLMode 更改为 DecodeUrlMode,并将 DecodeURLEscapeSequences() 更改为 DecodeUrlEscapeSequences() (crrev.com/c/7593238)。引入了 url::UrlEscapeDecoder,以简化整个代码库中网址解码的使用 (crrev.com/c/7610180)。从 //chrome 文件中移除了多余的 build/branding_buildflags.h include(crrev.com/c/7595125、Bug: 40318405)。从 //chrome 中移除了 BUILDFLAG(IS_FUCHSIA) 逻辑,ChromeDriver 中除外(crrev.com/c/5485913、Bug: 41481724)。

内存安全(spanification):解决了 ChromeDriver 实用程序中的 UNSAFE_TODO 标记,将其迁移到安全的基于 span 的实现(crrev.com/c/7562602,Bug: 435317390)。

ChromeDriver 146

问题修复

稳定性:修复了在处理命令时如果窗口同时关闭(例如,在等待导航完成时)可能发生的 ChromeDriver 崩溃问题。此修复方案会获取 WebView 对象的锁,以防止该对象被过早处置(crrev.com/c/7257074、错误: 468228355)。

安全性:为传入的 WebSocket 连接添加了针对 ChromeDriver HTTP 服务器的 Origin 标头检查,以防止潜在的跨源劫持(crrev.com/c/7538400,Bug:478783560)。

测试:将 testWebviewDetactedDuringClick 移至不稳定的过滤条件,在所有运行中跳过该测试,而不仅仅是在无头模式下跳过(crrev.com/c/7545378,Bug: 481485821)。

内部更改和重构

C++ 标准:在 //chrome 中将 base::DictValue 和 base::ListValue 重命名为现代等效项(base::Value::Dict 和 base::Value::List)(crrev.com/c/7515855、crrev.com/c/7514475、Bug: 478100525)。将 base::Contains() 的使用替换为 std::ranges::contains()(crrev.com/c/7461026、Bug: 470391351)。在适当的情况下,将 std::set 和 std::unordered_set 迁移到了 base::fixed_flat_set(crrev.com/c/7521991、Bug: 473916362)。重构了未指定解析选项的 base::JSONReader::Read 调用(crrev.com/c/6990988、crrev.com/c/6980533、Bug: 446188265)。将各种 base::JSONWriter::Write() 调用替换为 base::WriteJson()(crrev.com/c/6969134、crrev.com/c/6929101、Bug: 443929217)。清理了 #include 顺序 (crrev.com/c/7366868)。将注释中的 bug 引用迁移为使用 Buganizer ID 而不是 Monorail ID (crrev.com/c/7528268, Bug: 321899722)。为清楚起见,已将 IS_OZONE_* build 标志重命名为 SUPPORTS_OZONE_* (crrev.com/c/7535923)。

内存安全(spanification):在 base/strings/utf_string_conversion_utils.cc 中将不安全的指针用法替换为 base::span(crrev.com/c/7496410、bug:439964610、bug:40284755)。在 //chrome 测试中,对更多 base::File 用法进行了 span 化处理(crrev.com/c/7489592、Bug: 435317390)。将 memset 替换为跨 //chrome 的聚合初始化(crrev.com/c/6875520、Bug: 435317390)。将剩余的 #pragma allow_unsafe_buffers 转换为 UNSAFE_TODO 标记(crrev.com/c/7132241、Bug: 409340989)。

DSE 预热:在 fieldtrial_testing_config.json 中为 macOS 和 Windows 启用了 DSEPrewarm 功能,因为相关的 ChromeDriver 测试不稳定问题已得到解决(crrev.com/c/7489009,在还原 crrev.com/c/7452344 后重新着陆 crrev.com/c/7002185)。(注意:由于 Windows 上的测试运行时增加,此 reland 随后再次被还原 [crrev.com/c/7517985,Bug: 478888140])。

诊断:为 WaitableEvent 和 ConditionVariable 跟踪事件添加了调用方位置跟踪,以提高可调试性(crrev.com/c/7487755,Bug:476408124)。

ChromeDriver 145

新功能

测试:更新了 run_py_tests.py 测试框架,以接受针对 input、textarea 和 contenteditable 元素的不同长度(例如 53、101 和 501 个字符)的确定性字符串测试。这提供了回归覆盖范围,可确保在长时间的 send_keys 操作期间不会丢弃任何字符(crrev.com/c/7221410、Bug: 428116078)。

测试:针对 HTML 元素添加了特定测试(crrev.com/c/7420729,Bug:342889200)。

问题修复

屏幕截图:还原了元素屏幕截图的缩放,因为 WebDriver 规范未规定缩放,并且它与其他屏幕截图功能不一致(crrev.com/c/7409603,Bug:42323022)。

测试:通过更新 ChromeDriver 测试预期值,使其与 开发者工具 前端(crrev.com/c/7408699、错误: 474179501)中引入的最新正确值(针对 platform、platformVersion、model 和 mobile 字段)相匹配,修复了 testClientHintsDeviceNameIPhoneX 和 testClientHintsDeviceNameIPad 中的失败问题。

内部更改和重构

C++ 标准:将 //chrome 中 base::Contains() 的各种用法迁移到了 std::ranges::contains()(crrev.com/c/7411011,Bug: 470391351),包括必要的格式修复(crrev.com/c/7247217)。重构了 std::string_view 的字符串形参,以避免在使用 substr() 时出现不必要的字符串分配 (crrev.com/c/7350716)。从 //chrome 标头中移除了多余的 include(crrev.com/c/7225838、Bug: 40318405)。修正了某些文件中的 include 顺序 (crrev.com/c/7366868)。将 SimpleURLLoader 用法中的旧版 BodyAsStringCallbackDeprecated 回调替换为 BodyAsStringCallback,后者使用 std::optional 而不是 std::unique_ptr(crrev.com/c/7210000、Bug: 40258809)。

测试:重新提交了 InfobarPrioritization 现场测试配置,包括修复了在处理尚未添加到视图层次结构中的待处理信息栏时 ChromeDriver 浏览器测试中发生的崩溃问题(crrev.com/c/7223590、错误: 447176374)。重新实现了 Glic 功能的国家/地区和语言区域过滤,该功能之前因不相关的测试失败而被还原(crrev.com/c/7245749,在还原 crrev.com/c/7233767 后重新实现 crrev.com/c/7148759,Bug: 454431875)。

ChromeDriver 144

新功能

权限:更新了 SetPermission 命令,使其符合最新的 W3C 规范,除了顶级源之外,还使用当前框架的网址(嵌入源)。这会正确配置依赖于嵌入式上下文的权限(例如 storage-access)(crrev.com/c/7106801、在还原 crrev.com/c/7104484 后重新着陆 crrev.com/c/7093216、Bug: 384959114)。

测试:向 ChromeDriver 测试上传载荷添加了 testMetadata(包括测试名称),以在使用结构化测试 ID 时支持不稳定性认可器 (crrev.com/c/7124354,Bug: 456432041)。

问题修复

目标生命周期:修复了以下错误:如果子框架在等待命令响应时父框架分离,ChromeDriver 会停滞。ChromeDriver 现在会在命令处理期间,当父 WebViewImpl 被锁定并标记为已分离时,明确地以传递方式分离后代框架(crrev.com/c/7080912、Bug: 438436830)。

窗口管理:专门针对 ChromeDriver 会话停用了被遮挡窗口的后台处理。此更改解决了 WebDriver BiDi 中的问题,即如果浏览器错误地认为某个窗口被遮挡并对其进行节流,测试可能会失败(crrev.com/c/7128058、Bug: 458027819)。

内部更改和重构

C++ 标准:移除了 //chrome .cc 文件中多余的 base/functional/callback_forward.h include,强制在实际使用回调时使用 callback.h (crrev.com/c/7200285, Bug: 40318405)。将 logging::LoggingSettings 从 base/logging.h 移至其自己的标头 base/logging/logging_settings.h,以提高编译效率(crrev.com/c/7173024,在还原 crrev.com/c/7170750 后重新着陆 crrev.com/c/7160150)。将 base::HexEncode 的使用迁移到较新的 base::HexEncodeLower(crrev.com/c/7103100,Bug: 456472080)。

内存安全(spanification):迁移了 PipeBuilder 和 PipeConnection 单元测试中的 WriteToPipe 和 WriteToPipeNoBestEffort 以接受 base::span,修复了不安全的缓冲区使用问题(crrev.com/c/7090293,Bug:455758227)。将整个文件范围内的 #pragma allow_unsafe_buffers 转换为 chrome/ 中精细的 UNSAFE_TODO() 宏(crrev.com/c/7132241、错误: 409340989)。将 IOBuffer->span().first() 缩短为 IOBuffer->first() (crrev.com/c/7159119)。

ChromeDriver 143

问题修复

稳定性:修复了 OverrideNetworkConditions 中的释放后再使用 (UAF) 崩溃问题。为后续应用保存的原始指针会在连续调用之间释放;现在已得到妥善管理 (crrev.com/c/7047422,Bug: 42323833)。

测试:利用 WaitForCondition API 实现更可靠的同步,修复了 Android ChromeDriver 触控测试中出现的间歇性问题 (crrev.com/c/6978928,Bug: 42321861)。

DSE 预热:通过 --disable-features=Prewarm 开关默认停用了 ChromeDriver 中的 Prewarm 功能,防止预热的网页干扰测试作业和目标发现(crrev.com/c/7007072、Bug: 431928370)。

内部更改和重构

C++ 标准:在仅使用智能指针的 //chrome 标头中,将 ref_counted.h 替换为 scoped_refptr.h,从而提高编译效率(crrev.com/c/7080753、Bug: 40245294)。将 GURL 访问器迁移到其 Get* 变体(例如,GetSpec() 而不是 spec()),以清晰指示字符串分配,防止意外的性能损失(crrev.com/c/7002119、Bug: 448174617)。

测试:使用 ADD_FAILURE() 移除了 devtools_client_impl_unittest.cc 中的冗余检查模式 (crrev.com/c/6998270)。为 crbug.com/413382905 添加了回归测试 (crrev.com/c/6879417)。

ChromeDriver 142

新功能

诊断:添加了 TERMINATION_STATUS_EVICTED_FOR_MEMORY 状态,以便区分浏览器主动终止(以节省内存)的进程与因内存不足 (OOM) 错误而崩溃的进程。目前,此行为与 OOM 崩溃(显示悲伤标签页)完全相同,但为未来的不同处理方式奠定了基础(crrev.com/c/6991933、Bug: 394092280)。

诊断:向 WebDriver 响应添加了 goog:processID 功能,该功能可返回桌面浏览器的主要进程 ID。这使 ChromeDriver 与 Firefox 的 moz:processID 保持一致,并有助于测试平台无障碍 API (crrev.com/c/5825307、Bug: 438884256)。

测试:为 ChromeDriver 的 Python 集成测试添加了对结构化测试 ID 上传到 ResultSink 的支持(crrev.com/c/6916708,Bug: 418015486)。

问题修复

诊断:修改了 ChromeDriver 在正常 Chrome 退出时的行为,使其不再发出与 user-data-dir 使用相关的令人困惑的通用错误消息。现在,它明确指出实例已终止,并引导用户查看 Chrome 抛出的特定错误的详细日志(crrev.com/c/6977507,Bug: 42323434)。

初始化:更新了 ChromeDriver 的初始化结构,以保持与 Selenium WebDriver v4.16.0 更改的兼容性 (crrev.com/c/6630600)。

Android:修复了旧版 Android(低于 Android 11)上 CheckAppInstalled 的问题,其中软件包管理器不支持 --user cur 标志 (crrev.com/c/6785949, Bug: 433885051)。

测试:修复了 IgnoreDuplicateNavs 错误地覆盖 ChromeDriver 中的默认功能开关的 bug。已针对 ChromeDriver 会话停用该功能,并修正了 Switches::SetFromSwitches 逻辑(crrev.com/c/6949166、Bug: 445332809)。

内部更改和重构

C++ 标准:将多个已弃用的 base::JSONWriter::Write() 调用替换为 base::WriteJson(),在未检查返回值时,保持失败时返回空字符串的行为(crrev.com/c/6969134、crrev.com/c/6929101、Bug: 443929217)。在 base::JSONReader::Read 和 base::JSONReader::ReadAndReturnValueWithError 中,对于不合规的 JSON 解析选项(例如允许注释),需要明确选择启用(crrev.com/c/6990988、crrev.com/c/6980533、Bug: 446188265)。移除了手动 spanification 工作完成后的文件级 #pragma allow_unsafe_buffers pragma(crrev.com/c/6778035,Bug: 409340989)。清理了有内存泄漏风险的 LazyInstance 宏的使用(crrev.com/c/6781377、Bug: 432815283)。通过 IWYU 为 http_response_headers.h 添加了缺失的头文件(crrev.com/c/6894196、Bug: 40216326)。

内存安全(spanification):自动跨 chrome/ 目录为 Linux build spanified 了大量指针,并在大小参数被视为冗余时添加了非严重 CHECK(crrev.com/c/6734592,Bug:431824299)。

测试:暂时在 macOS 上停用了 testDoesntCrashOnClosingBrowserFromAsyncScript(crrev.com/c/6995358,Bug:446461733)。修复了涉及“证书”的测试方法名称中的拼写错误 (crrev.com/c/6950683)。自动格式化了 //chrome/test GN 文件(crrev.com/c/6789277、Bug: 40760278)。

FedCM:在 ShouldShowAccountsPassiveDialog 中引入了 IdentityDialogController 函数,用于同步检查是否应显示账号对话框,修复了与异步检查和开发者工具插桩相关的崩溃问题 (crrev.com/c/6780413,Bug: 425801332)。

DSE 预热:向开发者工具协议添加了 Page.setPrewarmingAllowed,作为手动启用或停用预热的短期解决方案,并修复了相关测试,以确保它们与主网页正确互动 (crrev.com/c/6847287,Bug: 431928370)。在解决不稳定问题后,针对 macOS 和 Windows 版 fieldtrial_testing_config.json 启用了 DSEPrewarm 功能(crrev.com/c/6951835、Bug: 431928370、Bug: 435621391)。(注意:由于 CDP 命令和功能试验启用项会为 WebDriver 用户带来破坏性更改,分别会公开意外的目标并导致其他下游问题,因此这两者均已还原(crrev.com/c/6966133、crrev.com/c/6966161、Bug: 445883308))。

清理:移除了 Android 代码中对不受支持的 WebLayer 项目的剩余引用(crrev.com/c/6792520,Bug:40272607)。

ChromeDriver 141

新功能

测试:向 run_wpt_tests.py 添加了对 --enable-per-test-tracing 标志的支持,使其行为与 run_web_tests.py 保持一致。此功能可从内部 ChromeDriver 缓冲区检索 JSON 跟踪事件,并将其保存到测试结果目录中 (crrev.com/c/6820247,Bug: 434017035)。

问题修复

诊断:阻止 ChromeDriver 在返回 kTabCrashed 错误时打印其自己的内部堆栈轨迹。这样可以避免用户感到困惑,同时仍能确保渲染器崩溃堆栈轨迹保留在日志中(crrev.com/c/6841669、Bug: 395131239)。

内部更改和重构

C++ 标准:在 chrome/ 中将可能不安全的 memset 调用替换为标准 C++ 聚合初始化 (instance = {}),以避免绕过构造函数并确保内存安全(crrev.com/c/6875520、Bug: 435317390)。通过 IWYU 为 //base/time/time.h 添加了缺失的 #include 指令(crrev.com/c/6832689、Bug: 40216326)。重写了强制不安全缓冲区 pragma(crrev.com/c/6828538)。

测试:为 crbug.com/413382905 添加了回归测试 (crrev.com/c/6879417)。

视图转换:重新提交了视图转换修复,该修复会更新在完成 promise 解析之前完成的工作,此前与 ChromeDriver 测试失败相关的推测性还原被证明是不正确的(crrev.com/c/6846765,在还原 crrev.com/c/6808537 后重新提交 crrev.com/c/6806850)。

ChromeDriver 140

问题修复

目标选择:修复了以下问题:当 Chrome 启动时,开发者工具窗口可能会与主页面竞争,以被选为主要窗口(使用 --auto-open-devtools-for-tabs 启动 Chrome 时)。ChromeDriver 现在在确定主窗口时会明确排除以 devtools:// 为前缀的目标(crrev.com/c/6769505,Bug:427908560)。

目标选择:通过忽略祖先元素施加的任何 overflow:hidden 剪裁,防止 ChromeDriver 错误地计算元素的视图内中心点。这使计算与 WebDriver 规范和其他 PerformActions 场景保持一致(crrev.com/c/6735230、Bug: 42322257)。

Android:修复了旧版 Android(Android 11 之前)上软件包管理器的 --user cur 标志不受支持的 CheckAppInstalled 函数(crrev.com/c/6785949、Bug: 433885051)。

测试:修复了 DSEPrewarm 功能导致的 chromedriver_py_tests 测试套件不稳定问题。ChromeDriver 现在会在 CDP 客户端附加到进程时停用预热触发器,以防止测试期间出现意外的目标数量(crrev.com/c/6764274、Bug: 423465927、Bug: 431928370)。

测试:还原了向 IdentityDialogController(FedCM 的一部分)添加 ShouldShowAccountsPassiveDialog 函数的操作,该操作导致了回归(crrev.com/c/6780413、Bug: 425801332)。

内部更改和重构

C++ 标准:通过 Include What You Use (IWYU) 添加了缺少的 std::vector #include(crrev.com/c/6652818,Bug: 40216326)。移除了 //chrome 标头中 gurl.h (crrev.com/c/6578272) 和 (crrev.com/c/6570349、Bug: 40318405) 的多余 include。在 //chrome 中针对 NOTIMPLEMENTED() 解决了 IWYU(crrev.com/c/6655452、Bug: 41493641)。

内存安全(spanification):在 Linux build 中运行了自动指针 spanification 工具,更新了代码以在已知大小的情况下使用 span(crrev.com/c/6734592,Bug: 431824299)。在迁移完成后,移除了整个 chrome/ 中的文件级 #pragma allow_unsafe_buffers pragma(crrev.com/c/6778035、Bug: 409340989)。从 -Wexit-time-destructors 警告中排除了 chrome/test 目标,以允许全局启用该警告(crrev.com/c/6736532、Bug: 40031409、Bug: 430332953)。清理了 //chrome 下泄露的 LazyInstance 用法(crrev.com/c/6781377、Bug: 432815283)。

清理:移除了 --debug-bidi-mapper CLI 标志,因为在隐藏目标中运行 BiDi Mapper 的过渡已完成且稳定 (crrev.com/c/6672011,错误: 408992812)。

清理:移除了对不受支持的 WebLayer 项目的剩余引用(crrev.com/c/6792520,Bug: 40272607)。自动格式化了 //chrome/test GN 文件,以缩短目标引用 (crrev.com/c/6789277, Bug: 40760278)。

测试:添加了验收测试,以验证针对 PerformActions pointerMove 问题(crrev.com/c/6648646、Bug: 42322257)的修复。

测试:注释掉了 testBrowserWithUsedUserDataDir 测试的并行驱动程序创建部分(并提交了跟踪 bug),因为在使用 chrome-headless-shell 时,该部分导致了与独占锁定相关的 macOS 故障(crrev.com/c/6470455、Bug: 411407649、Bug: 380903149)。

测试:更新了 iOS 的 run_cwt_chromedriver.py 封装容器,以支持 --platform-type 实参 (crrev.com/c/6771517,Bug: 427548014)。

所有者:从 chrome/test/chromedriver/OWNERS 文件中移除了 nvitkov (crrev.com/c/6771413)。

ChromeDriver 139

问题修复

初始化结构:更新了 ChromeDriver 初始化结构,以保持与 Selenium WebDriver v4.16.0 更新 (crrev.com/c/6630600) 的兼容性。

实参解析:合并了多个 --js-flags 实参(与 --enable-features 的处理方式类似),而不是仅采用提供的最后一个实参。这有助于在传递复杂的 V8 标志时提高易用性(crrev.com/c/6612042、Bug: 421941798)。

内部更改和重构

内存安全(spanification):将 //chrome/test 中的已弃用 base::MakeStringPiece() 用法替换为 std::string_view(crrev.com/c/6628089、Bug: 422940464)。在使用了 base::as_string_view() 的位置添加了 base/strings/string_view_util.h,为未来的命名空间迁移做准备(crrev.com/c/6625024、Bug: 423048781)。

C++ 标准:通过显式包含 (crrev.com/c/6652818)、base/notimplemented.h(并移除未使用的 base/notreached.h)(crrev.com/c/6655452,Bug: 41493641)、base/strings/string_util.h (crrev.com/c/6607646)、base/strings/string_number_conversions.h (crrev.com/c/6593576) 并移除多余的 base/debug/stack_trace.h 包含项 (crrev.com/c/6622838),改进了整个 //chrome 的“Include What You Use”(IWYU) 合规性。

测试:将 --driver-logging 选项移植到 run_wpt_tests.py,从而允许脚本即使在较低的详细程度级别也能转储 ChromeDriver 和浏览器 stderr(crrev.com/c/6608138、Bug: 421262910)。

测试:重新启用了之前停用的 ChromeDriver 集成测试:屏幕截图测试 (testTakeElementScreenshot*)(crrev.com/c/6598797,Bug: 42321815)、通过 JavaScript 关闭窗口测试 (testCloseWindowUsingJavascript*)(crrev.com/c/6598978,Bug: 42321150)和 headless-shell 窗口大小测试(crrev.com/c/6621336,Bug: 42323661)。

测试:修复了 run_wpt_tests.py --stable,通过解析 APK 正确识别和使用当前稳定版 Clank (Android),并更新了脚本,以将相应的 ChromeDriver 版本从 Chrome for Testing (CfT) 下载到临时目录,而不是污染 checkout(crrev.com/c/6635694,Bug: 402548382)。

构建基础架构:通过禁止 android_resources() 目标拥有清单,移除了对 write_build_config.py 的不必要的构建依赖项,因为清单合并和 R.java 软件包命名现在由专用属性处理 (crrev.com/c/6625266、Bug: 413331591)。

FedCM:修复了与 FedCM 相关的 Finch 配置功能标志 (crrev.com/c/6614137,Bug: 421959289)。

ChromeDriver 138

新功能

显示功能管理:更新了视口细分受众群的 ChromeDriver 行为,以符合 CSS 工作组最近的决议:现在,当可折叠设备平放时或对于所有不可折叠设备,它都会始终返回包含单个细分受众群的数组。这与媒体查询行为相匹配,并降低了指纹识别风险(crrev.com/c/6469455、Bug: 414430842)。

偏好设置和本地状态 (Android):在针对 Android 设备运行 ChromeDriver 时,添加了对 localState 和 prefs 功能的支持。此功能依赖于 ADB,需要自定义 user-data-dir 标志;目前,它会使用默认模板初始化状态(crrev.com/c/6397155,Bug: 406427226)。

问题修复

稳定性:修复了以下问题:在 macOS 上,当用户通过“继续”按钮关闭首次运行体验 (FRE) 对话框时,ChromeDriver 会发生崩溃。崩溃是由覆盖 kTargetDetached 错误状态并尝试访问无效的 WebView 导致的(crrev.com/c/6538867、Bug: 410599467)。

性能测试:修复了 Windows pinpoint bot 上的 crossbench 测试运行程序,该运行程序在传递 --browser=release_x64 时错误地尝试使用过时的 ../Release_x64 路径来定位 ChromeDriver 二进制文件,导致其回退到下载旧的二进制文件,而不是使用本地 build (crrev.com/c/6502134)。

内部更改和重构

内存安全(跨度化):将 WebSocket::OnReadDuringHandshake 和 WebSocket::OnReadDuringOpen 中的未检查指针替换为 base::span,从而解决 unsafe-buffer-usage 警告(crrev.com/c/6557346、Bug: 354307328)。移除了 chrome/test/chromedriver 中在其他迁移后不再需要的 #pragma allow_unsafe_buffers pragma(crrev.com/c/6503154、Bug: 414858406)。

C++ 标准:移除了 chrome/ 标头中多余的 #include "url/gurl.h" 和 #include 指令,并在适当的位置添加了前向声明,以缩短编译时间(crrev.com/c/6578272、crrev.com/c/6570349、Bug: 40318405)。

API 迁移:将 RSAPrivateKey 迁移到 crypto::PrivateKey,并将 SHA256HashString 迁移到 crypto::Sha256,清理了过时的错误处理情形,因为新的密钥生成 API 是可靠的 (crrev.com/c/6490294, Bug: 372283556)。

测试:向计算压力 API 自动化命令(包括 CDP 和 testdriver 实现)添加了 OwnContributionEstimate 属性(crrev.com/c/6373001、Bug: 402033762)。

测试:通过简化断言来检查视口段是否已清除回默认视口大小,修复了在持续集成 (CFT) 机器人上验证 ClearDisplayFeatures 的集成测试(crrev.com/c/6535067,Bug: 417195296)。

测试:增加了 Protected Audience WebDriver 测试的超时时间,以解决较慢的 CI 机器人上的不稳定问题 (crrev.com/c/6494277)。

ChromeDriver 137

新功能

显示功能管理:添加了 ChromeDriver 命令来模拟和清除显示功能,从而实现 Viewport Segments API(CSS 和 JS)的自动化要求。这使开发者能够在双屏或可折叠设备上以编程方式测试折叠或铰链场景 (crrev.com/c/6368674、Bug: 40137084)。

BiDi:更新了 ChromeDriver,使其默认在隐藏目标中运行 BiDi Mapper。这样可防止映射器的 data:, 页面干扰测试作业和可见性。如需调试映射器,客户端可以传递 --debug-bidi-mapper 标志,以便在可见标签页中运行它(crrev.com/c/6441064,在还原 crrev.com/c/6439633 后重新着陆 crrev.com/c/6433672,Bug:402339952)。

问题修复

BiDi:如果 ChromeDriver 丢失了由其他 CDP 或 BiDi 会话创建的目标,则在处理 BiDi 命令(例如 browsingContext.close)时,不会再错误地关闭整个浏览器会话。现在,它会在决定终止浏览器之前明确同步顶级标签页(crrev.com/c/6440293,Bug: 42323838)。

BiDi:与上游 WebDriver BiDi 规范保持一致,确保 ChromeDriver 在 goog:channel 功能以空字符串形式传递时将其移除,并将其视为缺少渠道(crrev.com/c/6438865,Bug: 409282307)。

输入:更新了 ChromeDriver 以支持指针移动命令中的小数(浮点)x 和 y 坐标,从而修复了触摸和指针事件失败或行为不正确的问题 (crrev.com/c/6440834、Bug: 409684333)。

目标选择:防止在访客视图中打开的 PDF 进程外 iframe (OOPIF)(当 PdfOopif 功能处于停用状态时)渗入到顶级目标列表。扩展了过滤逻辑,以正确排除这些以 chrome-extension:// 为前缀的目标(crrev.com/c/6383500、Bug: 396611138)。

内部更改和重构

C++ 标准:重新提交了以下更改:在 LogMessage 和轨迹事件中使用 std::string_view 作为文件名,从而解决了导致之前还原的以 null 结尾的字符串处理问题(crrev.com/c/6430129,重新提交 crrev.com/c/6395097,在还原 crrev.com/c/6383699 后重新提交 crrev.com/c/6387020)。

C++ 标准:对整个 //chrome 中的 Environment::GetVar 调用进行了现代化改造,以使用返回 API std::optional 而不是输出参数 (crrev.com/c/6417343, Bug: 400758498)。

C++ 标准:将特定于 Windows 的句柄帮助程序从 win_util.h 重构到专用 windows_handle_util.h 标头中,以避免循环依赖问题 (crrev.com/c/6418805,Bug: 406023316)。

测试:添加了特定于 Android 的 Browser 网域处理程序,并实现了 Browser.getWindowForTarget API 以支持 Android 窗口创建测试(crrev.com/c/6427605、Bug: 404932444)。

测试:修复了扩展程序初始化时间过长导致的 macOS 测试不稳定问题(crrev.com/c/6423229,Bug: 407804497)。

测试:在针对 chrome-headless-shell 运行时,暂时停用了 testBrowserWithUsedUserDataDir 中并行的 user-data-dir 创建,因为这与 macOS 上的独占锁定冲突(crrev.com/c/6470455、Bug: 411407649、Bug: 380903149)。

扩展程序:更新了 Chrome 测试,以便在启用 ExtensionManifestV2Unsupported 现场试验时通过测试。这是一个基础步骤,不过在其他代码库中进行更新之前,该试验本身仍处于停用状态(crrev.com/c/6415997、Bug: 367395349)。(注意:之前尝试通过配置启用此试验,但已回退 crrev.com/c/6397497,回退 crrev.com/c/6358257)。

依赖项:手动回滚了 catapult 依赖项,并更新了关联的 pydeps 文件和 devil_util 引用(crrev.com/c/6480814、crrev.com/c/6466865、在还原 crrev.com/c/6448910 后重新提交 crrev.com/c/6406098、Bug: 397459590)。

ChromeDriver 136

新功能

浏览器生命周期:添加了 Chrome 特有的功能 quitGracefully,该功能可强制 ChromeDriver 尝试以正常方式(使用 Browser.close 或 SIGTERM)停止浏览器,而不是使用默认的 SIGKILL。这使 rr 等调试器有时间在进程终止之前转储其记录(crrev.com/c/6322538,在短暂还原 crrev.com/c/6320536 后重新着陆 crrev.com/c/6269180,Bug: 339644807)。

测试:通过生成一个临时封装容器脚本来传递 run_wpt_tests.py --wrapper 实参,该脚本会为浏览器二进制文件添加调试器(例如 rr)及其实参。此方法可解决 ChromeDriver 在将 args 作为开关处理时无法直接替换二进制文件的问题 (crrev.com/c/6271108,Bug: 339644807)。

测试:通过 TranslateEnabledTest 中的偏好设置启用翻译,以支持 ChromeDriver 管理浏览器进程并在 --user-data-dir 为隐式时绕过新的 --remote-debugging-port 限制的测试环境(crrev.com/c/6354089、Bug: 327797500)。

DevTools:添加了对开发者工具多实例功能的支持,以便在 Android 上的另一个窗口中打开新标签页(crrev.com/c/6352169、Bug: 401269942、Bug: 382183406)。

问题修复

目标选择:修复了以下问题:当 PdfOopif 功能处于停用状态时,在访客视图中打开的 PDF 进程外 iframe (OOPIF) 未从顶级目标列表过滤掉。扩展了过滤器,使其包含 chrome-extension 前缀,从而解决了该 bug,并涵盖了创建标签页的 MV3 Chrome 扩展程序(crrev.com/c/6383500、Bug: 396611138)。

目标选择:修复了以下回归问题:在以打包的 Chrome 应用为目标时,getWindowHandles() 命令会因状态为 connection refused 而失败(crrev.com/c/6317161,Bug:396622746)。

内部更改和重构

C++ 标准:重新提交了以下更改:在 LogMessage 和跟踪事件中使用 std::string_view 作为文件名,从而提高了与不保证以 null 结尾的 Rust 日志记录结构的兼容性(crrev.com/c/6387020,在还原 crrev.com/c/6383699 和另一次还原 crrev.com/c/6395097 后,重新提交了 crrev.com/c/5765705)。

C++ 标准:替换了冗余的 base::Value::Clone() 调用以优化性能 (crrev.com/c/6361818)。抑制了 Windows 特定文件中的其他 -Wunsafe-buffers-in-libc-calls 警告,以清理 build 输出(crrev.com/c/6369920,Bug: 390223051)。

扩展程序:由于存在问题,已恢复添加 ExtensionManifestV2Unsupported 阶段的 fieldtrial_testing_config.json 条目(crrev.com/c/6397497,恢复 crrev.com/c/6358257,Bug:367395349,Bug:406523920)。

文档:改进了特定于 Android 的 ChromeDriver 测试文档 (crrev.com/c/6354040)。

ChromeDriver 135

新功能

BiDi:更新了 BiDi Mapper,以便在指定 --enable-unsafe-extension-debugging 时继承 ChromeDriver 权限。这样一来,WebDriver BiDi 客户端就可以有效地测试需要 WebDriver 客户端通常拥有的权限的扩展程序 (crrev.com/c/6288627,Bug: 393500934)。

问题修复

测试:重新启用了之前标记为失败的多个 WDSpec 测试,并更新了预期结果。这会恢复通过测试的规范一致性覆盖率 (crrev.com/c/6310420)。

内部更改和重构

清理:由于 Lacros 即将弃用,因此从 chrome/test/ 中移除了 Lacros 的所有痕迹(包括 IS_CHROMEOS_LACROS 和相关测试数据),并标准化为 IS_CHROMEOS(crrev.com/c/6284446、Bug: 354842935)。

清理:在 md5sum 实用程序被 devil_util 取代后,移除了该实用程序的所有痕迹,清理了旧版 build 依赖项(crrev.com/c/6309939、Bug: 397452007)。

C++ 标准:从 ResultCode 和 IsNormalResultCode() 中移除了 chrome:: 命名空间,将其移至全局命名空间,并移除了过时的 ChromeOS 启动导入 (crrev.com/c/6196899, Bug: 41050580)。

内存安全:通过利用 std::ranges::lower_bound 简化了 ChromeDriver 中的 std::lower_bound 调用(crrev.com/c/6223172、Bug: 392116519)。抑制了最初识别出的不合规文件的 unsafe_libc_call 警告,为未来的强制执行做好准备 (crrev.com/c/6187925、Bug: 390223051)。将 std::to_array 的返回值标记为 constexpr,以提高安全性和编译时评估 (crrev.com/c/6298909)。

ChromeDriver 134

新功能

跳出跟踪缓解措施 (DIPS):重新实现了 ChromeDriver 对跳出跟踪缓解措施的支持,利用了 RunBounceTrackingMitigations 命令。重构了集成测试,以使用不同的网页,确保在执行命令之前正确记录有状态的跳出。此功能支持 nav-tracking-mitigations 规范,并在 //chrome 中实现(crrev.com/c/4935955、Bug: 1474656)。(注意:最初在 crrev.com/c/4873672 中添加,后来被还原)。

BiDi:更新了 ChromeDriver,以使用带有 goog: 前缀的标准 WebDriver BiDi 扩展属性,与上游 chromium-bidi 更改保持一致。不再允许使用旧版 channel 属性 (crrev.com/c/6179410)。

Windows:向 Windows 上的 chromedriver.exe 二进制文件添加了版本资源(crrev.com/c/6114586,Bug: 385300323)。

问题修复

MPArch/Targets:修复了以下回归问题:在 ChromeOS 上确定主要目标时,Chrome 扩展程序目标 (chrome-extension://) 被错误地发现并附加到主要目标,导致后续命令(例如导航)失败。现在,在初始阶段会正确跳过扩展目标(crrev.com/c/6183202,Bug: 385241097)。

MPArch/Targets:修复了另一个回归问题,即当扩展程序目标平台支持处于停用状态时,扩展程序 background_page 的标签页目标平台未从顶级 WebView 中正确滤除(crrev.com/c/6160774、Bug: 385731198)。

MPArch/导航:修复了以下问题:在 MPArch 激活期间,标签页可能会暂时没有附加任何有效网页,导致 ChromeDriver 错误地将其视为错误状态。ChromeDriver 现在会等待标签页获取新网页并完成导航,然后才解析状态 (crrev.com/c/6177606)。

日志处理:修复了因不当截断包含多字节字符的日志字符串而导致的崩溃(base::Value() 中的 DCHECK 失败)。更新了逻辑,以使用 UnicodeString 边界检测代替简单的 std::string 长度检查,从而确保有效的代码点(crrev.com/c/6210809、Bug: 367752739)。

测试:将大多数预渲染相关的 WPT(除了少数存在已知 API 问题的 WPT)从 content_shell 迁移到 headless_shell,因为最近的 MPArch 重构允许 ChromeDriver 正确运行它们(crrev.com/c/6168830、Bug: 42323502、Bug: 366257368)。

内部更改和重构

C++ 标准:将 base::ranges 的用法替换为标准 std::ranges(crrev.com/c/6200893、crrev.com/c/6177197、Bug: 386918226)。重写了 b ? "true" : "false" 模式,尽可能使用 base::ToString(bool)(crrev.com/c/6165810、Bug:335797528)。移除了不安全的 StringPrintfNonConstexpr() 函数,并将其替换为更安全的字符串格式设置替代方案 (crrev.com/c/6149756)。将指针运算 (+ std::size) 替换为标准 begin/end 迭代器,以解决不安全的缓冲区警告(crrev.com/c/6217045、Bug: 392116519)。

清理:移除了 FedCmIdpSigninStatus 功能标志及其运行时标志 (crrev.com/c/6111321,Bug:381211734)。(注意:之前的移除尝试因出现中断问题而回滚 crrev.com/c/6082405)。

ChromeDriver 133

新功能

架构:重构了 ChromeDriver 以支持多页面架构 (MPArch) 和标签页目标。WebViewImpl 现在通过 AutoAttach 连接到平板电脑目标平台。之前用于保存网页的命令现在会查找标签页下的有效网页。此变更可用于检查扩展程序后台网页,现在可以通过 enable_extension_targets 功能来定位这些网页(默认情况下,系统会跳过扩展程序目标)(crrev.com/c/5961156、Bug: 379767670、Bug: 42323502)。修复了 chrome-extension:// 网址页面被错误地纳入扩展目标平台的回归问题;选择已恢复为仅限 type=background_page (crrev.com/c/6093588,错误: 383141569)。将 enableExtensionTargets 移至 Chrome 选项,而不是顶级功能 (crrev.com/c/6093032)。

经典:重新建立对多键元素引用的支持。此未记录的功能通常用于创建与 W3C 和非 W3C 模式兼容的引用,现在已获得正式支持,并纳入了集成测试范围 (crrev.com/c/6063257,Bug:379584343)。

问题修复

稳定性:修复了 ChromeDriver 在处理 browsingContext.close 命令时无限期阻塞的问题。通过使用不同的机制来确定浏览器是否需要关闭,ChromeDriver 现在可以正确处理 beforeunload 提示,而不会出现停滞(crrev.com/c/6080431、Bug: 42323838、Bug: 379049702)。

导航:修复了网址为 about:blank?test 的虚拟网页会导致停滞的 bug。旨在识别无响应的新窗口(baseURL==about:blank 和 documentURL!=about:blank)的启发式方法现在可以正确处理这些查询字符串网址(crrev.com/c/6038039,Bug: 377410086)。

导航:添加了重试因 AbortedByNavigation 错误而失败的命令的逻辑。ChromeDriver 现在会尝试多次执行命令,然后才会放弃并返回标准的 Timeout 错误(crrev.com/c/6012427、Bug: 42323825)。

诊断:直接通过 NavigationTracker 转发了 kTargetCrashed 错误。如果目标在导航检测期间崩溃,系统现在会向用户显示此特定错误,而不是一般性超时,从而改进诊断功能(crrev.com/c/6032612、Bug: 377410086)。

Android:修复了 chrome_android_impl.cc 中的标签页目标查找问题(crrev.com/c/6110492,Bug:384781876)。

测试:修复了 win11-arm64 上多个窗口大小调整测试中的不稳定问题(例如,点击被遮挡的元素)。现在,测试会在调整大小操作后反复查询内部窗口大小,直到正确注册正高度,从而考虑到窗口重绘缓慢的问题(crrev.com/c/6012658、Bug: 378470046)。

测试:通过以下方式修复了集成测试中的多个不稳定问题:将通用 Python 连接错误映射到 WebSocketConnectionClosedException,简化错误处理 (crrev.com/c/6054134);在需要立即产生副作用的情况下,使用 SendCommand 而不是 PostCommand 来避免竞态条件 (crrev.com/c/6054137);以及使用更可靠的导航检测机制来取代对 ExecuteScript 立即生效的依赖 (crrev.com/c/6063040,Bug: 42323825)。

测试:已恢复移除 FedCmIdpSigninStatus 功能标志,因为移除该标志会导致中断(crrev.com/c/6082405,还原 crrev.com/c/6078693,Bug:384866916,Bug:381211734)。

工具:在 log_replay 脚本中添加了对 Print 命令的支持(crrev.com/c/6010809,Bug:378451938)。

内部更改和重构

C++ 标准:移除了 Mojo.InvalidUTF8String 直方图,从而可以清理公共 Mojo 标头和后续 IWYU 级联(crrev.com/c/6133861、Bug: 40509710、Bug: 386793084)。

C++ 标准:通过从 std::list 切换到 base::circular_deque,避免了 WaitableEvent::Wait() 中的分配 (crrev.com/c/6097198)。

C++ 标准:尽可能在 chrome/ 代码库中默认使用用户定义的空构造函数和析构函数(crrev.com/c/6101911、crrev.com/c/6056220、Bug: 381119547)。

内存安全(spanification):将 C 样式数组迁移到 std::array(跨 chrome/),这是解决 -Wunsafe-buffer-usage 警告的更广泛工作的一部分(crrev.com/c/6043879、Bug: 378069401)。在 span 函数中实现了严格的 size_t 用法(crrev.com/c/6026238、crrev.com/c/6020621)。

测试:将全屏 {ref,crash}tests 上游到 wpt_internal/,因为 testdriver 现在支持它们 (crrev.com/c/6088404)。

测试:修复了 wptrunner,以在使用非默认输出目录(例如 //out/*-ios-wpt-fyi-rel/)时通过正确连接 --build-directory 来正确找到 ChromeDriver 封装容器 (crrev.com/c/6014940、Bug: 374199289、Bug: 355218109)。

测试:添加了 testBrowserCrashWhileWaitingForEvents 集成测试,以演示客户端未注意到致命错误的回归情形(crrev.com/c/6025145、Bug: 379049702)。

测试:抑制了在 headless_shell 与 ChromeDriver 结合使用时会崩溃的特定 WPT,以稳定构建器 (crrev.com/c/6032163,Bug: 377410086)。

ChromeDriver 132

新功能

测试:为 ChromeDriver 集成测试添加了对 repeat 和 retry-limit 命令行参数的支持,并将它们映射到标准 isolated-script-test-repeat 和 isolated-script-test-launcher-retry-limit 实参(crrev.com/c/5938195、Bug: 374681919)。对于在本地执行的测试(非 CI),默认 retry-limit 已更改为 0(crrev.com/c/5953326、Bug: 374681919)。

WebSockets:在 EmbeddedTestServer 中实现了 WebSocketConnection 及相关类,从而允许与 WebSocket 相关的测试从 SpawnedTestServer 迁移。这包括根据协议进行框架设置和简化的处理程序注册(crrev.com/c/5849732、Bug: 40812029)。

问题修复

稳定性:通过正确处理之前重构中引入的 kTargetDetached 错误状态,修复了点击命令导致浏览器关闭时可能发生的 ChromeDriver 崩溃问题(crrev.com/c/5934524、Bug: 42323264)。

稳定性:通过解决竞态条件,修复了 Mac ARM64 上 testClickNavigateRemoteToLocal 集成测试中出现的间歇性崩溃问题(crrev.com/c/5975526、Bug: 375971185)。

导航:修复了 GoBack 和 GoForward 命令。之前,如果文档在从活跃状态转换时(表示正在进行导航)调用 Page.getNavigationHistory,这两个命令会失败。ChromeDriver 现在可以在此场景中正确重试命令(crrev.com/c/6011739、Bug: 378433873)。

脚本执行:确保触发导航或关闭窗口的脚本在浏览器端无法保证结果时正确返回标准 ScriptTimeout 错误,从而提示用户避免使用模棱两可的测试结构 (crrev.com/c/5934265,Bug: 372883701)。

脚本执行:修复了日志重放功能因“意外的命令响应”错误而失败的问题 (crrev.com/c/5961142,Bug: 42323342)。

错误代码:修正了 ChromeDriver 的错误处理机制,使其不再强制将所有带有“code”属性的异常封装为通用的“javascript error”。这样可确保将“过时的元素引用”(来自 call_function.js)和“无效的元素状态”(来自 Selenium Atoms CLEAR 函数)等标准错误准确地传播给用户(crrev.com/c/5937893,Bug: 42323409)。改进了 GetElementTagName 中的错误处理,可正确将缺失的标记名称信息解读为“对象不是元素”(crrev.com/c/5929087)。

BiDi:修复了使用自定义用户个人资料时 BiDi 会话无法初始化的问题。自定义配置文件的已加载网页可能会阻止 BiDiMapper 启动;ChromeDriver 现在可确保第一个标签页始终加载 data:,,以便为映射器提供一个干净的环境 (crrev.com/c/5960656,Bug: 366886096)。

无痕模式:修复了 ChromeDriver 在无痕模式下运行时无法创建新标签页的 bug(crrev.com/c/5952980,Bug:42323352)。

测试:修复了 testScriptNavigateRemoteToLocal 集成测试中的不稳定问题(失败率为 8.33%),并添加了 C++ 集成测试来重现和验证针对竞态条件的修复(crrev.com/c/6010867、Bug: 378387680)。

测试:重新启用了 Mac (testWindowMinimize) 和 Windows (ChromeDownloadDirTest.testFileDownloadAfterTab、InvalidCertificateTest.*) 上之前许多不稳定的集成测试,以及全局测试(testShadowDomFindElement、元素屏幕截图测试)。暂时将不稳定的 css/css-scrollbars/ WPT 测试从无头 shell 移回内容 shell(crrev.com/c/5953708、crrev.com/c/5948803、crrev.com/c/5941351、crrev.com/c/5941098、crrev.com/c/5959254、Bug: 42323825、Bug: 40848017、Bug: 40736504、Bug: 40176424、Bug: 40927590)。

内部更改和重构

BiDi:提升了 chromium-bidi 映射器依赖项,以纳入最新的上游修复和协议更新(crrev.com/c/5953339、crrev.com/c/5865478、Bug: 4226)。(注意:由于 WPT 失败,映射器增幅曾短暂回退,随后又重新登陆 [crrev.com/c/5961113])。

架构:最大限度地减少了 ChromeDriver 中线程本地会话对象的使用,以防止测试之间出现状态共享 bug,并简化显式会话处理 (crrev.com/c/5978486,Bug: 42323555)。重构了 C++ 集成测试,以使用共享的测试 fixture(crrev.com/c/5971474、Bug: 42323555)。

清理:移除了特定于“旧版无头”模式的已弃用变通方法,因为旧版 chrome-headless-shell 代码已不再存在于 Chrome 中(crrev.com/c/5961602,Bug: 42323387)。

清理:移除了未使用的 java_tests.txt 文件,该文件是之前被逐出的 ChromeDriver 接受测试的残留物(crrev.com/c/5970994、Bug: 357737793)。

测试:添加了 C++ 集成测试,以验证 ChromeDriver 是否不会错误地创建具有相同 user-data-dir 的并行会话,或在会话之间泄露网址,这可能会导致不稳定 (crrev.com/c/5961137,Bug: 375312517)。

测试:确保由集成测试启动的临时 ChromeDriver 实例尽快关闭,以释放资源(crrev.com/c/5997970、Bug: 375974725)。

ChromeDriver 131

新功能

BiDi:将 chromium-bidi 映射器依赖项提升至 v0.8.0,纳入最新的协议更新和 bug 修复(crrev.com/c/5899240、crrev.com/c/5865478、Bug: 4226)。

DOM 访问:在 GetElementShadowRoot 命令中添加了对封闭影子根的支持。之前,此命令在尝试访问已关闭的影子根时会返回 NoSuchShadowRoot 错误(crrev.com/c/5923865、Bug: 372834222)。

DOM 访问:实现了对窗口和框架标识符的支持,允许从执行的脚本返回对窗口或框架(包括 OOP Iframe)的引用,以供进一步解引用(crrev.com/c/5890437、crrev.com/c/5923555、Bug: 366272556、Bug: 40229283)。

WebAuthn:扩展了 WebAuthn 自动化 API,以包含 userName 和 userDisplayName 属性(crrev.com/c/5905423,错误:367915823)。

问题修复

输入:通过将鼠标事件路由到目标框架的最高同源祖先,而不是简单地将它们发送到最顶层的框架,修复了远程框架上鼠标点击的竞态条件 (crrev.com/c/5836968,Bug: 42323535)。

输入:将通过 Input.dispatchTouchEvent 命令发送的时间戳格式从毫秒更正为秒,修复了 WPT 指针事件测试中的崩溃问题 (crrev.com/c/5924253,Bug: 360918166)。

测试:重新启用了 Mac (crrev.com/c/5923569、crrev.com/c/5922823、crrev.com/c/5921444、crrev.com/c/5920851、crrev.com/c/5921442) 和 Windows (crrev.com/c/5923955) 上的多项 ChromeDriver 测试,因为其相关的间歇性失败不再可重现。

内部更改和重构

内存安全(spanification):在 net::HttpUtil (crrev.com/c/5854420) 中将不安全的指针使用替换为 base::span,并将 base::File::WriteAtCurrentPos() 迁移到基于 span 的等效项 (crrev.com/c/5818972)。将地图指针值(例如,在 std::map、std::unordered_map 中)重写为 raw_ptr(crrev.com/c/5867189,Bug:329428315)。

C++ 标准:将 Abseil 属性宏 (ABSL_ATTRIBUTE_*) 替换为标准 base/ 宏 (crrev.com/c/5852373)。通过以下方式避免了意外复制:在适当的情况下,将按值传递的字符串/向量替换为 std::string_view 或常量引用;从 std::string_view 实参中移除了多余的 const 限定符(crrev.com/c/5914620、crrev.com/c/5906184、Bug: 369952985)。

基础架构:配置 Fuchsia 以使用 ChromeDriver 控制 web-engine (crrev.com/c/5867896,Bug: 40935291)。

测试:将一个受限框架 WebAuthn 测试从旧版内容 shell 运行程序迁移到使用 ChromeDriver 的无头 Chrome,因为旧版运行程序很快将不再支持 WebAuthn testdriver API (crrev.com/c/5920770, Bug: 372169469)。

ChromeDriver 130

新功能

BiDi:提升了 BiDi Mapper 依赖项,从上游 chromium-bidi 获取了最新的协议更新和 bug 修复(crrev.com/c/5850570,在还原 crrev.com/c/5840080 后重新着陆 crrev.com/c/5837065;crrev.com/c/5717956,Bug: 4226)。

BiDi:更新了 ChromeDriver,以便在初始化 BiDi 会话时通过 session.new 命令直接向 Mapper 提供 unhandledPromptBehavior。这完成了从 MapperOptions 的迁移(crrev.com/c/5682934、crrev.com/c/5766077、Bug: 42323841、Bug: 356371297)。

测试:为桌面版 build 的 bisect-builds.py 脚本添加了对 --chromedriver 实参的支持,从而允许该脚本在二分期间自动下载并使用正确版本的 ChromeDriver,以用于依赖于 WebDriver/ChromeDriver 的测试 (crrev.com/c/5861048, Bug: 352344089)。

内部更改和重构

C++ 标准:解决了各种类中的“五规则”问题。由于 Chrome 样式插件坚持使用非内联析构函数,但并未强制使用非内联移动构造函数,因此编译器隐式删除了移动运算符,并默默地回退到复制。已添加这些缺失的声明 (crrev.com/c/5846757,Bug: 364788123)。

测试:通过将硬编码的 chrome 字符串替换为实际使用的产品,并从摘要输出中隐藏详细的 command 制品,清理了 wptrunner 测试结果摘要(crrev.com/c/5825633、Bug: 41494889)。

测试:通过将特定超时时间加倍,修复了 macOS 15 (Mac15) 上 ChromeDriver 集成测试中的大量测试失败问题,因为在此操作系统上运行测试所需的时间比在 Mac14 上长得多。由于不稳定,还向忽略列表添加了四项虚拟传感器测试(crrev.com/c/5817455、Bug: 354939744)。

测试:在 Mac 上停用了不稳定的 ChromeDriverSiteIsolation.testClickNavigateLocalToLocal 测试(crrev.com/c/5806894、Bug: 361521805),并在 Windows 11 上停用了不稳定的 ChromeDriverTest.testClickElement*ObscuredByScrollBar 测试(crrev.com/c/5804083、Bug: 360058651)。

测试:由于存在多个基础架构问题,移除了 ChromeDriver 接受测试(该测试会下载旧版 Chrome 以针对当前 ChromeDriver 进行测试)。这些测试可能会在稍后通过自动滚动重新添加到 CI 中(crrev.com/c/5812142、Bug: 357737793)。

ChromeDriver 129

新功能

BiDi:更新了 ChromeDriver 会话初始化帮助程序,以向 BiDi 映射器发送 session.new 命令,从而允许映射器直接处理功能。这是移除 MapperOptions 的第一步(crrev.com/c/5741432,Bug: 356371297)。(注意:一项相关变更 crrev.com/c/5754093 提供了处理后的 unhandledPromptBehavior,但由于测试覆盖率下降,该变更已回滚 crrev.com/c/5755744)。

计算压力:添加了用于虚拟压力源管理的新扩展命令,实现了计算压力规范的自动化部分。这些命令会被解析并转发到 CDP 层 (crrev.com/c/5666583,Bug: 347031400)。

扩展程序 MV2:更新了使用 ScopedTestMV2Enabler 的测试,以作为正在进行的扩展程序 Manifest V2 弃用现场试验的一部分 (crrev.com/c/5685054,Bug: 339061151)。

问题修复

经典序列化:在 WebDriver 经典脚本执行结果中序列化 Set 时,跟踪已查看的对象,防止无限循环并容忍 Array.prototype.includes 的替换(crrev.com/c/5765833、Bug: 357472850)。(注意:此更改随后因 WPT 回归问题而回滚 - crrev.com/c/5773175)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,以纳入来自 chromium-bidi 的最新 bug 修复和协议更新(crrev.com/c/5756587、crrev.com/c/5717956、Bug: 4226)。

内存安全(spanification):将 WebSocketFrameParser::Decode、MaskWebSocketFramePayload 和 WriteWebSocketFrameHeader 中不安全的缓冲区使用替换为 base::span (crrev.com/c/5764863、crrev.com/c/5743019、crrev.com/c/5722108、Bug: 40284755、Bug: 354307327)。在整个 chrome/* 中添加了 #pragma allow_unsafe_buffers,为进一步修复做准备(crrev.com/c/5717950、Bug: 40285824),并将不符合要求的 UNSAFE_BUFFERS() 宏转换为 UNSAFE_TODO()(crrev.com/c/5786346)。将 base::span 字段重写为 base::raw_span(crrev.com/c/5515096、Bug: 332587642)。

C++ 标准:通过将数组长度明确标记为 constexpr,移除了代码库中危险的可变长度数组 (VLA) 的使用 (crrev.com/c/5738737, Bug: 349656479)。包含之前以传递方式拉取的必要 标头 (crrev.com/c/5792881)。

架构:通过将 WebSocketEncoder 的停滞迁移恢复到 //services/network/public/cpp/server 并将逻辑重新集中到 //net/server 中,取消了 WebSocketEncoder 实现的分叉,以确保更新一致(crrev.com/c/5768214、Bug: 40205564)。

ChromeDriver 128

新功能

功能:允许使用字典来表示 unhandledPromptBehavior 功能,与标准功能结构保持一致,但 Mapper 尚未完全遵循此结构(crrev.com/c/5692204、crrev.com/c/5682934、Bug: 42323841)。

启动:为 ChromeDriver 添加了 --ignore-explicit-port 命令行实参。此临时解决方法强制 ChromeDriver 忽略任何明确提供的端口,而是查找并绑定到空闲端口,从而解决 Web 平台测试作业期间的 TCP 端口竞争问题(计划在 M132 之后移除)(crrev.com/c/5724574、crrev.com/c/5703976、Bug: 42323836)。

问题修复

传感器:修复了 ExecuteUpdateVirtualSensor 命令,使其使用 SendCommand() 而不是 SendCommandAndGetResult(),因为 setSensorOverrideReadings CDP 命令不返回值 (crrev.com/c/5703589)。

FedCM:修复了 FedCM ChromeDriver 测试中的竞态条件,方法是当实际需要对话框时,不再断言返回 NoSuchDialog,从而防止在对话框显示过快时出现失败(crrev.com/c/5713515,Bug: 346530330)。

测试:在修复了底层问题 (crbug.com/40233722) 后,重新在 Mac 上启用了 WebAuthn 虚拟身份验证器测试(crrev.com/c/5635806、Bug: 329130177)。

错误消息:修复了 execute/async 命令的错误消息中的拼写错误 (crrev.com/c/5697913)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,引入了来自上游 chromium-bidi 项目的最新协议功能、bug 修复和 WPT 预期更新(crrev.com/c/5717956、crrev.com/c/5644823、crrev.com/c/5630727、crrev.com/c/5615110、crrev.com/c/5614670、Bug: 4226、Bug: 347863537、Bug: 324436866)。

将对已废弃的 GrowableIOBuffer::StartOfBuffer 方法的使用替换为 span,通过消除未经检查的指针来提高内存安全性(crrev.com/c/5706088,Bug: 329476354)。

对 WebSocketFrameParser 的 Decode 方法进行了 span 化,以提高内存安全性 (crrev.com/c/5722108, Bug: 354307327)。

通过移除过时的 Abseil 标头并迁移到 std::optional,清理了 absl::optional 的剩余部分(crrev.com/c/5691505、Bug: 40242125)。

更改了 ChromeDriver,以将所有未知目标类型(包括 shared_storage_worklet)视为 WebViewInfo::kOther,而不是将其视为错误。这样一来,Chrome 就可以引入新的目标类型,而不会立即破坏 WPT(crrev.com/c/5680542、crrev.com/c/5679146、Bug: 42323839)。

为 linux-builder-perf 构建器添加了安装程序目标,以生成用于二分归档的剥离符号的二进制文件,并配置了精确定位构建器以接受不同的 additional_compile_targets(crrev.com/c/5668198、Bug: 344643694)。

更新了 run_performance_tests.py,以便在性能 build 期间查找 ChromeDriver 位置并将其传递给 crossbench (crrev.com/c/5624538,Bug: 338629299)。

推出了 crossbench 依赖项 (crrev.com/c/5681849)。

将 FedCmSpecificTest.testClickErrorMoreDetails 和 FedCmSpecificTest.testClickErrorGotIt 标记为在 Mac 上不稳定(crrev.com/c/5704320、crrev.com/c/5677564、Bug: 352821422、Bug: 346530330)。

停用了不稳定的 BidiTest.testFocusInFirstTab 测试 (crrev.com/c/5676686, Bug: 350916212)。

ChromeDriver 127

问题修复

稳定性:修复了在 DevTools 客户端主动处理其他命令时收到 target.detachFromTarget 命令(或 target.detachedFromTarget 事件)时发生的 ChromeDriver 崩溃问题,防止过早释放 WebView 和 DevToolsClient 对象 (crrev.com/c/5527584, Bug: 339773537)。

稳定性:修复了以下问题:如果网页视图在 Switch To Window 命令执行期间分离,该命令可能会错误地返回“未知错误”;现在,该命令会正确忽略“找不到网页视图”内部错误,如果目标窗口确实已关闭,则会返回标准的“没有此类窗口”响应 (crrev.com/c/5583730,Bug: 338616700)。

稳定性:确保 ChromeDriver 在更新内部 WebView 列表时能够容忍目标分离。如果目标在更新期间分离,ChromeDriver 现在会重试,而不是返回非标准错误,从而减少了快速创建和销毁窗口的环境中的不稳定性(crrev.com/c/5565103、Bug: 338616700、Bug: 4771)。

导航:在搜索元素时,向 ChromeDriver 添加了相应逻辑,以等待远程端检测到的导航。这样可防止 ChromeDriver 在导航与元素查找操作同时进行时返回非标准错误或因 DCHECK 而崩溃(crrev.com/c/5563113、还原 crrev.com/c/5563420、重新提交 crrev.com/c/5562089、Bug: 4771)。

BiDi:修复了会话创建期间 ChromeDriver 和 BiDiMapper 之间的竞态条件。ChromeDriver 现在会等待 browsingContext.getTree 命令返回非空列表,然后才结束 NewSession 命令,从而确保新创建的默认标签页已正确注册(crrev.com/c/5575497、Bug: 341048786、Bug: 1503101)。

BiDi:修复了以下问题:在创建会话后,焦点仍停留在 BiDiMapper 后台标签页中,而不是主动授予第一个用户标签页焦点(crrev.com/c/5594070、Bug:341048786、Bug:1503101)。

BiDi:停止了 ChromeDriver 在处理 BiDi 命令(例如 browsingContext.close)时尝试附加目标,以防止 CDP 命令在用户提示打开时无限期停滞,并将处理完全委托给已连接的 BiDi 层 (crrev.com/c/5541915,还原 crrev.com/c/5539818,重新提交 crrev.com/c/5522393,Bug: 4758)。

FedCM:修复了 fedcm-loginhint.https.html WPT 测试失败的问题,其中对话框被错误地标记为已关闭;现在仅当 selectAccount 操作实际成功时,状态才会更新(crrev.com/c/5398379、Bug: 331237776)。

测试:修复了在 JSON 解析期间,当字符正好达到 kExtendedASCIIStart 边界时发生的 DCHECK 失败问题 (crrev.com/c/5565276、Bug: 40284755)。

测试:通过使用 iframe 元素作为滚动源并将指针移动输入四舍五入为整数,修复了 scrollend-event-fires-to-iframe-window.html WPT 测试,从而避免了 ChromeDriver 在触摸位置为小数时出现错误(crrev.com/c/5570150、Bug: 340956654)。

测试:改进了 ChromeDriver 集成测试中的诊断功能,在 run_py_tests.py 无法找到浏览器二进制文件时打印尝试的路径 (crrev.com/c/5604204, Bug: 4781)。

内部更改和重构

BiDi:升级了 BiDi Mapper 依赖项,以跟上最新的协议更新和 bug 修复(crrev.com/c/5614670、crrev.com/c/5593796、crrev.com/c/5537892、crrev.com/c/5471839、Bug: 4226)。

将 chrome/ 目录中 NOTREACHED() 的用法替换为 NOTREACHED_IN_MIGRATION(),以便将 NOTREACHED() 严格设为 [[noreturn]](crrev.com/c/5539004、Bug: 40580068)。

使用 licenses.py 工具为 ChromeDriver 启用了 THIRD_PARTY_NOTICES.txt 的生成,以符合分发要求 (crrev.com/c/5596355, Bug: 4777)。

移除了对 content_shell 的 run_wpt_tests.py 支持,因为 Chromium 的 WPT 覆盖范围正在完全过渡到 headless_shell + ChromeDriver (crrev.com/c/5589930)。重新组织了 wptrunner 开关,使其成为特定于嵌入器的开关,以便在不影响功能的情况下适应此变更(crrev.com/c/5589793、Bug: 338412391)。

通过将 JavaScript 对话框检测和处理逻辑从 JavaScriptDialogManager 直接移到 DevToolsClientImpl 中,整合了相关逻辑,从而消除了单独的管理器类,简化了测试和推理(crrev.com/c/5545630、Bug: 4757)。

由于存在不稳定性,在 Mac 上停用了 PureBidiTest.testBrowsingContextTreeIsNotEmpty(crrev.com/c/5588665、Bug: 343891977)。

更新了 BiDi WPT 预期,以考虑最近的 Mapper 更新(crrev.com/c/5615110、Bug: 4226、Bug: 324436866)。

为 WebView::SendBidiCommand 和 BidiTracker 添加了单元测试,以提高代码覆盖率(crrev.com/c/5588400、Bug: 341048786、Bug: 1503101)。

ChromeDriver 126

新功能

BiDi:更新了 ChromeDriver,以便在启动浏览器以进行 WebDriver BiDi 会话时提供 --disable-background-timer-throttling 开关,从而防止后台标签页受到限制 (crrev.com/c/5515013,Bug: 4762)。

BiDi:添加了对 BiDi Mapper 的支持,以便在需要详细日志记录时发送调试消息 (sendDebugMessage)。ChromeDriver 会将这些事件标记为 bidi messages 以供解析,但 BidiTracker 目前会忽略这些事件(crrev.com/c/5465782,Bug: 4753)。

经典版:实现了自动接受任何 beforeunload 对话框(提醒),遵循 WebDriver 标准,该标准规定对话框绝不能在经典版会话中显示 (crrev.com/c/5517510,Bug: 4757)。

问题修复

经典版:移除了元素检索逻辑中冗余的最大尝试次数限制。检索现在仅受隐式超时限制,从而避免了操作可能过早失败并错误地返回非标准 NoSuchExecutionContext 错误的情况(crrev.com/c/5478668、Bug: 4379)。

经典版:修复了以下回归问题:当检索请求使用无效的位置策略时,ChromeDriver 会响应 javascript error 而不是 invalid selector 错误 (crrev.com/c/5490662,Bug: 4743)。

传统:确保 Android 上的窗口命令(最大化、最小化、全屏)返回符合标准的 unsupported operation 错误,而不是继续执行,因为 Android 浏览器不支持这些操作(crrev.com/c/5490224、Bug: 4689)。

经典版:修复了 ChromeDriver 永远不会返回 kChromeNotReachable 内部错误代码的问题;现在,当 HTTP 客户端无法连接到浏览器时,它会正确返回标准 kSessionNotCreated 错误(crrev.com/c/5476390、Bug: 4379)。

经典版:修复了 ChromeDriver 在执行窗口命令时绝不会返回非标准 kNoSuchExecutionContext 错误的问题(crrev.com/c/5483606,错误:4379)。

传统版:从受支持的错误代码列表中移除了未使用的不受支持的 kForbidden 错误代码(crrev.com/c/5476927、Bug:4379)。

BiDi:更新了 ChromeDriver,使其在关闭专用 Mapper 标签页之前提示用户,与上游 chromium-bidi 更改保持一致 (crrev.com/c/5508600,Bug: 4761)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,引入了上游 chromium-bidi 项目的最新功能和 bug 修复(crrev.com/c/5490428、crrev.com/c/5471839、crrev.com/c/5509316、crrev.com/c/5458234、bug:4226)。(注意:映射器增幅曾被维护人员短暂还原,然后又重新着陆 [crrev.com/c/5374839、crrev.com/c/5374366])。

在 //chrome 中将 base::StringPiece 的用法替换为 std::string_view(crrev.com/c/5467746,Bug:40506050)。

移除了 //chrome 中对 std::to_string() 的使用,并将其替换为 base::NumberToString() 或 base::FormatNumber() (crrev.com/c/5505593,Bug: 335672557)。

移除了对旧版无头模式下 --remote-debugging-address 开关的支持,因为对 Chrome DevTools Protocol 进行不受保护的远程访问被认为过于危险 (crrev.com/c/5512634、Bug: 327558594)。

从 //chrome 中移除了 Fuchsia build 规则,但 ChromeDriver 除外(crrev.com/c/5473870、Bug: 41481724)。

将整个代码库中迁移的旧版 TODO(crbug.com/...) 引用更新为新的问题跟踪器 ID 格式 (TODO(b/...))(crrev.com/c/5492605、crrev.com/c/5486477、crrev.com/c/5461380、Bug: 321899722)。

由于存在复杂的底层 bug,在 Mac 上停用了 WebAuthn(身份验证器)测试(包括无头测试和 chromedriver_py_tests 测试),从而解决了将机器人升级到 macOS 14 的问题 (crrev.com/c/5525435、crrev.com/c/5518820、Bug: 329130177)。

由于难以同时使用 ChromeDriver 和 Content Shell 运行 WPT,因此针对 content_shell 停用了 WPT 构建器(crrev.com/c/5512439、Bug: 40214293)。

重新提交了一项更改,该更改会更新 focus-navigation WPT,以通过 test_driver.action_sequence() 使用 Shift+Tab 进行向后导航。修复了 focus-utils.js 中的一个 bug,该 bug 会导致将错误的键代码(E050 而不是 E008)用于 Shift 键(crrev.com/c/5467843,还原 crrev.com/c/5466531,重新提交 crrev.com/c/5463903,Bug: 40597271)。

向性能 build 目标添加了 crossbench 和 chromedriver(crrev.com/c/5521874、Bug: 338627700)。

ChromeDriver 125

新功能

设备姿态:添加了用于设备姿态管理的 ChromeDriver 命令,支持设备姿态规范的自动化部分。这样便可以通过扩展命令替换硬件设置的设备姿态并移除替换(crrev.com/c/5437993、Bug: 330376761)。

问题修复

BiDi:将传入的 BiDi 命令 id 的中间存储从 Double 更改为 base::Value。这样可确保在 JSON 序列化后,id 在响应中准确回显,而不会出现意外的尾随小数点或小数部分 (crrev.com/c/5444225,Bug: 4676)。

FedCM:在 IDP 准备就绪后,重新提交了在 ID 断言端点中启用 CORS 的更改 (crrev.com/c/5440132,还原了 crrev.com/c/5381316,重新提交了 crrev.com/c/5370086,Bug: 40284123)。

FedCM:修复了对话框被错误标记为已关闭的 bug,方法是确保仅在 selectAccount 命令成功时才将对话框标记为已关闭。这解决了在未显示预期账号选择器的情况下调用 selectAccount 时出现的测试失败问题(crrev.com/c/5398379、Bug: 331237776)。避免在不应显示账号选择器时调用 fedcm_get_and_select_first_account,以防止触发此 bug (crrev.com/c/5398800)。

测试:通过以下方式修复了 popover-light-dismiss.html WPT 测试中的失败问题:合并操作序列,并使用主框架的文档作为 pointerUp 操作的源,从而防止 ChromeDriver 错误地跨框架发送并发 pointerUp 事件(crrev.com/c/5402096、错误:325981758)。

测试:修复了 wptrunner,以正确地将 stderr 输出(包括使用 --enable-chrome-logs 时写入的浏览器日志)转发到 stderr 制品,而不是 crash_log,并将 harness 错误(包含浏览器堆栈轨迹)移到了 crash_log(crrev.com/c/5437023、Bug: 41494889)。

测试:修复了 wptrunner,通过按 ChromeDriver 进程对输出进行分组,将浏览器日志路由到正确的测试制品,从而防止在并行测试作业期间出现交错和孤立的日志(crrev.com/c/5320681,Bug:41494889)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,集成了最新的协议增强功能和 bug 修复(crrev.com/c/5433300、crrev.com/c/5393442、Bug: 4226)。(注意:之前的增幅 crrev.com/c/5374366 已被还原 crrev.com/c/5374839,随后重新着陆,并停用了不稳定的测试和更新了许可 crrev.com/c/5374914)。

诊断:将 Chrome 的 StackTrace 纳入 ChromeDriver 异常。当会话因网页/标签页崩溃(例如,Mac 上出现悬空指针)而被删除时,此更改会在错误消息中显示浏览器堆栈轨迹,从而显著提高可调试性 (crrev.com/c/5374371, Bug: 330009945)。

测试:暂时停用了 Mac 上不稳定的 testTakeLargeElementViewportScreenshot 集成测试(特别是 mac-arm64)(crrev.com/c/5447515,Bug:333826980)。

测试:更新了测试环境 (CEL) 中的 ChromeDriver 启动实参,以匹配 Selenium 4+ 语法(crrev.com/c/5448812,Bug: 308885357)。

测试:从 chromedriver 日志中提取了用于运行每个 WPT 测试的确切 chrome 命令行,并将其放入名为 command 的 ResultDB 制品中。这有助于使用 run_blink_wptserve.py 进行手动调试(crrev.com/c/5441189,Bug: 41494889)。

依赖项:从 selenium-atoms 依赖项列表中移除了 Closure,因此也从 ChromeDriver 的第三方声明中移除了该依赖项 (crrev.com/c/5424804, Bug: 4226)。

依赖项:在基本代码库中移除了对 dynamic_annotations 的未使用的依赖项(crrev.com/c/3398908,Bug: 1282422)。

格式设置:将新的 clang-format 配置应用于有问题的 Windows 标头(crrev.com/c/5367127,Bug: 329138753)。

ChromeDriver 124

新功能

BiDi:添加了一个 build 步骤,用于在将 BiDiMapper 脚本嵌入到 ChromeDriver 之前对其进行缩减,因为源映射器现在从 CIPD 下载时未缩减 (crrev.com/c/5310075,Bug: 4226)。

WebAuthn:添加了 SetCredentialProperties 命令,允许客户端更新 WebAuthn 凭据的备份标志 (crrev.com/c/5296389,Bug: 40945430)。

WebAuthn:通过向“添加虚拟身份验证器”命令添加 defaultBackupEligibility 和 defaultBackupState,以及向“添加凭据”命令添加 backupEligibility 和 backupState,通过 WebDriver 公开 WebAuthn 备份标志 (crrev.com/c/5297117、Bug: 40945430)。

测试:为 ChromeDriver Python 集成测试添加了对 --failfast 命令行实参的支持,在出现第一个错误时停止测试运行,以帮助进行调试 (crrev.com/c/5374546)。

测试:通过 testdriver-vendor.js API 为 SetRPHRegistrationMode WebDriver 命令添加了 content-shell 支持(crrev.com/c/5205730,Bug: 1359103)。

问题修复

稳定性:将超时过期检查移到了 ChromeImpl::SetWindowBounds 中的轮询和等待循环体内。此问题修复了在高负载情况下,超时可能会在第一次循环迭代发生之前过期的问题(crrev.com/c/5366899、Bug: 4642)。

性能:通过仅在窗口边界尚未达到所需状态时应用指数退避算法等待,最大限度地缩短了 ChromeImpl::SetWindowBounds 中的等待时间,从而减少了 WPT 设置延迟时间(crrev.com/c/5366457,Bug: 4642)。

启动:更新了 ChromeDriver,使其在为 content_shell 指定数据目录时使用 --user-data-dir 而不是 --data-path,从而与读取有效开发者工具端口的方式保持一致 (crrev.com/c/5226609,Bug: 1295373)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,捕获了最新的协议修复和功能 (crrev.com/c/5374366、crrev.com/c/5349491、crrev.com/c/5317650、Bug: 4226)。(注意:由于测试失败,此增幅曾短暂回退,然后重新着陆 crrev.com/c/5374839、crrev.com/c/5368680、crrev.com/c/5319423)。

在代码库中将 absl::optional 的用法替换为 std::optional,因为 absl::optional 已转换为类型别名 (crrev.com/c/5296147、Bug: 1500249)。

将 MiraclePtr (raw_ptr) 覆盖范围扩展到其他标准容器,包括 std::list、std::unordered_set、base::flat_set、std::stack 和 std::queue (crrev.com/c/5306923、Bug: 325302189)。

将 WriteBigEndian() 转换为使用 base::numerics 字节转换或 BigEndianWriter(现在接受 base::span),从而提高了写入大端序字节时的安全性(crrev.com/c/5202348、Bug: 1490484)。

改用 ChromeDriver 运行包含 content_shell 的 Web 平台测试 (WPT)(不包括虚拟测试和待上游 bug 修复的 reftest)(crrev.com/c/5347371、Bug: 40214293)。

将所有现有的通用传感器 Web 测试转换为使用 test_driver.js 和虚拟传感器,而不是 JS/Mojo 模拟对象,从而与通用传感器规范的新自动化部分保持一致 (crrev.com/c/4770867、Bug: 1278377、Bug: 1471996)。

通过添加 append_notices.py 来为 BiDiMapper 依赖项生成版权信息,并更新 licenses.py 调用以严格依赖于 selenium-atoms README 来获取第三方通知,从而改进了许可生成功能(crrev.com/c/5350601、crrev.com/c/5339957、Bug: 4729、Bug: 4735)。

ChromeDriver 123

新功能

FedCM:针对单账号按钮流程显示模态对话框,包括在自动化接口中添加对模态视图的支持 (crrev.com/c/5231438, Bug: 1518356)。

FedCM:实现了 ChromeDriver 对在 FedCM 对话框中打开链接的支持,将其视为按钮以简化自动化操作 (crrev.com/c/5225543, Bug: 1513520)。

传感器:修改了 WebDriver 虚拟传感器命令,以读取欧拉角(alpha-beta-gamma)而非四元数,从而符合最新的方向传感器规范更新。内部 CDP 和服务层仍通过转换步骤使用四元数(crrev.com/c/5229177、Bug: 1506995、Bug: 1520912、Bug: 1520919)。

问题修复

经典版:修复了以下问题:通过脚本从不同框架返回节点时,错误地导致了 StaleElementReference 错误;现在,它会正确返回 JavaScriptError,以符合 WebDriver 标准 (crrev.com/c/5222746,Bug: 4668)。

测试:修复了在 Chrome/ChromeDriver 上因触控拖动超出窗口边界而失败的过滚动事件测试;现在拖动已正确受到限制(crrev.com/c/5297676、Bug: 40832230)。

测试:修复了 open-close.https.html MIDI 测试,使其不再不必要地构建 promise,从而避免了导致 ChromeDriver 使测试失败的未处理的 promise 拒绝 (crrev.com/c/5239869、错误:1499775)。

测试:修正了 wpt_internal/system-wake-lock/idlharness* 测试中的权限集,其中 test_driver.set_permission(...) 错误地传递了 false 而不是 null 或 WindowProxy,导致 ChromeDriver 混淆(crrev.com/c/5271087,Bug: 40287920)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,获取了最新的修复和功能 (crrev.com/c/5205452、crrev.com/c/5255321、crrev.com/c/5238148、crrev.com/c/5237125、Bug: 4226)。(注意:由于 build 失败 crrev.com/c/5238855,此 bump 曾短暂回退,然后重新应用)。

通过在 ChromeImpl 和 DevToolsClientImpl 中消除从基类到派生类的不安全静态转换,改进了 ChromeDriver 代码健康状况,防止了潜在的未定义行为(crrev.com/c/5277062、crrev.com/c/5272562、Bug: 4702)。

消除了 WebViewImpl 中的不安全转换(crrev.com/c/5272230、Bug: 4702)。

移除了已弃用的 base::Base64Encode() 形式,迁移到更新的 std::string 返回变体,而不是使用输出参数(crrev.com/c/5179900、crrev.com/c/5246585、Bug: 1486214)。

更新了 base/... 的所有 #include 指令,以使用 "" 而不是 <>,从而保持一致性(crrev.com/c/5237376、Bug: 1500249)。

将 chrome/test/ 中的所有 DIR_METADATA 文件迁移到了 Buganizer(crrev.com/c/5284119,Bug:1518875)。

通过移除不必要的 chromedriver --log-path=- 开关,防止 wptrunner 在传递 -vvv 时创建本地 - 文件,因为 stderr 已重定向到 stdout (crrev.com/c/5282721)。

增强了 wptrunner,可在发生回归时总结测试结果,并在总结输出中明确包含子测试结果和 ChromeDriver 堆栈轨迹(crrev.com/c/5238662、Bug: 1521922)。

通过向 run_py_tests.py 引入 --remote-chromedriver-port 参数,简化了 ChromeDriver 集成测试的调试,从而允许连接到在调试器下运行的现有实例(crrev.com/c/5237254,Bug: 4693)。

避免了双实参 base::HexEncode() 和 RandBytes() 调用,以便编译器推断出正确的大小,从而简化代码 (crrev.com/c/5241357)。

ChromeDriver 122

问题修复

BiDi:更新了深层节点序列化以包含 loaderId,从而允许 ChromeDriver 和 BiDi Mapper 正确引用和取消引用节点,而无需进行过多的往返 (crrev.com/c/5116240,Bug: 1420968)。

功能:更新了 ChromeDriver,使其在启动时立即将 acceptInsecureCerts 功能传递给 BiDi Mapper,从而防止功能应用过晚而导致竞态条件 (crrev.com/c/5125711,Bug: 4643)。

经典版:重新设计了元素引用生成功能,以使用 .. 格式;这样一来,ChromeDriver 就可以在框架导航和 DOM 更新过程中明确区分有效、未知和过时的元素引用 (crrev.com/c/5094519,Bug: 4379)。

经典版:修复了以下问题:如果新创建的目标在 ChromeDriver 能够附加到它之前自行关闭(例如,在竞态条件中),window/handles 命令可能会因“no such window”错误而失败(crrev.com/c/5147409、Bug: 1506833)。

FedCM:添加了一个内部事件监听器,用于在 FedCM 对话框关闭时进行通知,从而防止 dialogtype 命令在对话框从外部(例如通过 AbortController.abort)关闭时返回过时的数据(crrev.com/c/5067504、Bug: 1506292)。

FedCM:移除了 ClickDialogButton 命令中的供应商前缀,因为该命令现已在 FedCM 规范中获得批准(crrev.com/c/5092527,Bug: 1499341)。

内部更改和重构

BiDi:将 BiDi Mapper 依赖项升级到最新版本 (crrev.com/c/5205452,Bug: 4226)。

通过移除从每个 DevToolsEventListener 发送的冗余 Page.enable 调用,减少了 ChromeDriver 和 Chrome DevTools 协议 (CDP) 流量,因为 DevToolsClientImpl 已经按目标处理了此问题(crrev.com/c/5088789,Bug: 4600)。

将所有 Wptrunner build 针对 content_shell 的状态更改为实验性,因为在 ChromeDriver 集成正在进行时(crrev.com/c/5225148、Bug: 1474702),目前尚不完全支持在协议模式下运行测试。

跳过了需要在 content_shell 上使用 window.test_driver_internal.get_computed_role 的测试,因为该功能尚未实现,从而避免了 TypeError 失败(crrev.com/c/5189678、Bug: 1517744)。

重新提交了重构,以使用独立于平台的 IS_OZONE_{X11, WAYLAND} 标志而非 OZONE_PLATFORM_*(crrev.com/c/5086329、Bug: 1500494)。

将 selenium-atoms 依赖项提升到最新修订版本(crrev.com/c/5110808、Bug: 4662)。

修复了在针对完整 Chrome 二进制文件运行时 SnapEvents 测试中的逻辑,方法是舍入指针移动输入、强制执行滚动的 origin 参数,以及使用近似断言 (assert_approx_equals) 来处理小数滚动/偏移差异 (crrev.com/c/5097343)。

添加了 StringPrintfNonConstexpr() 辅助函数,用于在格式字符串不是编译时常量时区分 StringPrintf()(crrev.com/c/4950568、Bug: 1371963)。

确保 chromium::import! Rust 宏转义使用单射函数,以防止生成的 GN 目标名称发生冲突 (crrev.com/c/5132119, Bug: 1512174)。

通过在析构函数中添加构造函数和提前返回,清理了 ScopedTempDirWithRetry 实现 (crrev.com/c/5113843)。

ChromeDriver 121

新功能

测试:除了构建机器人上的标准 Chrome 浏览器之外,还添加了对针对 chrome-headless-shell 运行 ChromeDriver 集成测试 (chromedriver_py_test) 的支持。这包括根据 --browser-name 参数发现浏览器二进制文件的功能,以及有条件地运行特定测试集的功能(crrev.com/c/4995189、crrev.com/c/4989442、Bug: 4358)。

问题修复

稳定性:将默认 KeyboardLayoutEngine 初始化为 StubKeyboardLayoutEngine,以防止 ChromeDriver 因 KeyboardLayoutEngineManager::SetKeyboardLayoutEngine 中的 DCHECK 命中而崩溃(crrev.com/c/5017859,Bug: 4625)。

稳定性:修复了以下不稳定性问题:如果会话线程在客户端已请求关闭连接后请求关闭连接,ChromeDriver 可能会崩溃 (crrev.com/c/4994636,Bug: 4606)。

资源管理:通过确保即使 ChromeDriver 命令抛出异常,浏览器进程也会终止,修复了 ChromeDriver 集成测试中的资源泄漏问题 (RemoteBrowserTest)(crrev.com/c/5009554、Bug: 4614)。

资源管理:在 ChromeDriver 集成测试中实现了逻辑,以检测并终止 ChromeDriver 进程放弃的任何浏览器进程 (crrev.com/c/5014093, Bug: 4617)。

启动:修复了当浏览器名称为 chrome-headless-shell 时,通过将 data:, 参数附加到浏览器命令行来解决 chrome-headless-shell 返回空目标列表并阻止会话创建的问题(crrev.com/c/5010392、crrev.com/c/5009535、Bug: 4615、Bug: 4358)。

FedCM:新增了一个事件,用于在 FedCM 对话框关闭时进行通知,确保 dialogtype 和其他命令在对话框被外部关闭(例如通过 AbortController.abort 关闭)时不会返回过时的数据(crrev.com/c/5067504、Bug: 1506292)。

测试:修复并重新启用了之前因 chrome-headless-shell 而在 Windows 上停用的所有 ChromeDriver 集成测试 (crrev.com/c/5027594,错误: 4358)。

测试:在 testElementRegionTest 中放宽了过于严格的断言,以符合 WebDriver 标准,从而解决了由浏览器渲染特性引起的抖动问题(crrev.com/c/5017865,Bug: 4526)。

内部更改和重构

BiDi:更新了 BiDi Mapper 依赖项(crrev.com/c/4994305、Bug: 4226)。

由于存在 bug(crrev.com/c/5086571,还原 crrev.com/c/5083096,Bug:1500494),因此还原了 IS_OZONE_{X11, WAYLAND} 的使用,改用 OZONE_PLATFORM_*。

将 commands_unittest.cc 中的代码迁移为使用 base::BindLambdaForTesting 而不是已废弃的 base::Passed(crrev.com/c/5078589、Bug: 1326449)。

重构了 session.new,以将样板功能处理(例如 testName、binary、browserName)提取到专用方法中,并确保该命令以与经典命令类似的方式遵循功能(crrev.com/c/5004665、crrev.com/c/5001510、Bug: 4358、Bug: 4610)。

移除了对已废弃的 base/strings/string_piece_forward.h 标头的使用(crrev.com/c/5008994、Bug: 691162)。

通过使用 net::IOBufferWithSize 准备将 net::IOBuffer 转换为非所有权类(crrev.com/c/4996470、Bug: 1493389)。

引入并利用了 base::RandBytesAsVector(),以避免将二进制值存储在字符串中 (crrev.com/c/5018451)。

停用了 Mac 上几个持续失败的 Python 集成测试,以防止它们因 LUCI 分析免责而导致 build 变为绿色(crrev.com/c/4998771、bug:1486604、bug:1486520、bug:1486474、bug:1481915)。

将 webdriver_tests_suite(和 wpt_tests_suite)重命名为 chrome_wpt_tests,以标准化 Linux try build 上的 WPT 套件命名惯例(crrev.com/c/5014293、Bug: 1474702)。

将 ConfirmIdpLogin FedCM WebDriver 命令重新用于更具可扩展性的 ClickDialogButton 命令,该命令接受 DialogButton 参数(crrev.com/c/5003255、Bug: 1499341)。

更新了 crossbench 依赖项,其中包含多项修复和功能,包括改进的驱动程序类型解析、网络桩和 iOS 支持 (crrev.com/c/5009937)。

向 chrome_finder.h 添加了缺少的 #include ,以符合 IWYU 标准(crrev.com/c/4994605、Bug: 957519)。

ChromeDriver 120

新功能

BiDi:添加了对 session.new 和 session.end 命令的支持,允许用户直接通过 BiDi 命令创建和终止会话 (crrev.com/c/4941941, Bug: 4496)。

BiDi:添加了对 session.status PureBiDi 命令的支持,使用户能够建立不绑定到任何会话的 WebSocket 连接并检索会话状态 (crrev.com/c/4938596、Bug: 4496)。(在 crrev.com/c/4922097 中之前还原后重新着陆)

BiDi:提升了 BiDi Mapper 依赖项,并与新的简化版 Mapper 运行流程保持一致 (crrev.com/c/4952609,Bug: 4226)。

传感器:在 browser_protocol.pdl 和 CDP 层(模拟网域)中实现了虚拟传感器命令,为通用传感器规范的自动化部分添加了支持(crrev.com/c/4770864,Bug: 1278377)。

传感器:添加了用于虚拟传感器管理的 ChromeDriver 扩展命令,将 WebDriver 参数转换为新的 CDP 调用 (crrev.com/c/4770866,Bug: 1278377)。

传感器:添加了通过 testdriver.js 操作虚拟传感器的 content_shell 代码路径,完全绕过 ChromeDriver 进行 Web 测试(crrev.com/c/4770865,Bug:1278377)。

跟踪缓解措施:添加了对反弹跟踪缓解措施 (DIPS) 的 ChromeDriver 支持,从而实现了 nav-tracking-mitigations 规范的自动化(crrev.com/c/4873672,错误:1474656)。(注意:由于 crrev.com/c/4938394 中 Mac 上的测试失败,此功能暂时被还原)

问题修复

启动:向 ChromeDriver 添加了 Headless Shell 发现功能,使其能够在通过功能请求且未提供明确路径的情况下搜索 chrome-headless-shell 二进制文件 (crrev.com/c/4987262,Bug: 4358)。(在 crrev.com/c/4984449 中之前还原后重新着陆)

WebSockets:实现了对 WebSocket 关闭握手的局部支持,确保 ChromeDriver 在收到来自远程端的关闭握手时会以 CLOSE 帧进行响应(crrev.com/c/4931500,错误: 4499)。

权限:将 options.disclaim_responsibility 作为 build 标志公开,以允许供应商 build(例如 Microsoft Teams)将其关闭,从而防止 macOS 权限提示导致测试自动化停滞(crrev.com/c/4929495,错误: 1223643)。

C++ 标准合规性:通过添加范围检查,修复了将超出范围的双精度浮点数强制转换为整数时被 UBSan 捕获的未定义行为 (UB)(crrev.com/c/4980055,Bug: 1394755)。

FedCM:移除了对旧标头语法的支持,确保符合标准 login-status-http 语法(crrev.com/c/4957073,Bug: 1381501)。

内部更改和重构

添加了 testReturnFrameElement 集成测试,以验证 ChromeDriver 在将 window.frameElement 视为过时引用方面的行为 (crrev.com/c/4983549,Bug: 4477)。

改进了日志记录功能,确保 ChromeDriver 记录其尝试查找浏览器二进制文件的具体路径(crrev.com/c/4976116、Bug: 4539)。

重命名了各种 base::Time 函数,使其更具描述性(例如,将 FromDoubleT() 重命名为 FromSecondsSinceUnixEpoch())(crrev.com/c/4956111)。

重构了 net::StringIOBuffer 构造函数和 IOBuffer 实例化,以避免不必要的字符串复制和零长度分配 (crrev.com/c/4938384、crrev.com/c/4959174)。

通过在适用的情况下将 base::StrCat 替换为 + 并利用 base::AppendHexEncodedByte() 清理了字符串处理 (crrev.com/c/4963465、crrev.com/c/4977165)。

为清楚起见,已在 //chrome* 测试中将 DIR_SOURCE_ROOT 重命名为 DIR_SRC_TEST_DATA_ROOT(crrev.com/c/4916045、Bug: 1264897)。

在 Mac build 服务器上停用了不稳定的 PureBidiTest 测试(crrev.com/c/4983555、Bug: 1496826)。

ChromeDriver 119

新功能

BiDi:实现了对在远程函数调用期间解析远程端返回的弱本地对象引用的支持(crrev.com/c/4886760,错误: 4536)。

FedCM:添加了供应商前缀 confirmidpsignin 命令,以支持 IDP 登录状态 API 源试用 (crrev.com/c/4811725,Bug: 1451884)。

问题修复

移动设备模拟:修复了以下问题:通过使用合理的默认值填充没有客户端提示的预定义设备(例如,旧配置),导致这些设备出现故障 (crrev.com/c/4887254,Bug: 4550)。

经典版:修复了 Map 和 Set 对象的序列化问题;由于这些对象缺少 length 属性,因此现在可以正确序列化为 Object 而不是 Collection(crrev.com/c/4881378、错误: 4031)。

经典版:恢复了在测试期间始终下载并使用最新兼容版 ChromeDriver 的逻辑,仅在出现兼容性问题时回退到特定版本(crrev.com/c/4779613,还原 crrev.com/c/4778973)。

FedCM:通过将 Signin 重命名为 Login (confirmidplogin) 来标准化浏览器自动化命令,以符合最新的 FedCM 规范讨论(crrev.com/c/4901302、Bug: 1451884)。

测试:修复了在测试作业期间通过显式启用 IDP Sign-In Status API 导致第三方 Cookie 被停用时失败的 FedCM 测试(crrev.com/c/4889802、Bug: 1484833)。

测试:在测试运行程序中,将无效的网址占位符 ~NOTFOUND 替换为 ^NOTFOUND,以符合即将实施的 Chromium 网址标准强制执行变更 (crrev.com/c/4845589、Bug: 1416013)。

内部更改和重构

BiDi:将 BiDi Mapper 依赖项更新为版本 0.4.27,引入了最新的修复和功能 (crrev.com/c/4862031、crrev.com/c/4890322)。

将 //url 中的多个指针/长度 API 替换为 std::string_view,以提高安全性和便利性 (crrev.com/c/4897456)。

将 generateWebDriverValue 实用程序过渡为使用 BiDi 协议 (crrev.com/c/4889644) 原生提供的深度序列化选项 (serializationOptions.serialization: deep)。

添加了集成测试,以验证在过时的元素引用下进行搜索是否会正确返回“过时的元素引用”错误 (crrev.com/c/4886793,Bug: 4440)。

改进了 call_function.js 中的代码样式格式设置(crrev.com/c/4882511、Bug: 4031)。

通过在用户通过 WebSocket 连接时明确告知用户管道受支持且建议使用,从而增强用户反馈,以提高可靠性和安全性 (crrev.com/c/4882626,Bug: 3480)。

更新了 WPT 套件配置,以归档 webdriver_tests_suite 测试的 results.html,从而提供更出色的界面来查看结果 (crrev.com/c/4873223)。

通过标记 WebView WebContents 并将其开发者工具类型设置为 popup_page 而不是 other,修复了开发者工具与 WebView 的集成问题 (crrev.com/c/4842093)。

将 WPT build 目标 chrome_wpt 重命名为 chrome_wpt_tests,以保持一致性,并移除了冗余的 webdriver_wpt_tests 目标 (crrev.com/c/4847474, Bug: 1474702)。

已将 run_py_tests.py 从已弃用的 optparse 库迁移到 argparse (crrev.com/c/4849411, Bug: 4557)。

ChromeDriver 118

新功能

集成测试:为 ChromeDriver 引入了 C++ 集成测试,可针对真实的 CDP 流量测试特定类,填补了单元测试和 Python 集成测试之间的空白(crrev.com/c/4707855,Bug: 4528)。

Crossbench:更新了 crossbench 依赖项,其中包含多项改进,包括新的能耗基准故事、更好的平台和设备支持、增强的调试功能以及各种修复 (crrev.com/c/4803743)。

问题修复

功能:修复了默认配置中返回的功能缺少 debuggerAddress 的问题;现在,系统会正确返回该功能,以支持 Selenium 基于 CDP 的 BiDi 通信 (crrev.com/c/4789068,错误: 4533)。

功能:确保 ChromeDriver 按照 WebDriver 规范的要求返回标准 platformName 值(例如,“linux”“windows”“mac”)(crrev.com/c/4797735,Bug: 4548)。

内部更改和重构

将 MockSocket 中的迁移代码更改为首选 base::span<> 而不是原始指针,以提高安全性 (crrev.com/c/4832086)。

通过自动清理 (crrev.com/c/4773481),移除了 base::raw_ptr 和 base::raw_ref 的废弃用法,取而代之的是其非限定形式 raw_ptr 和 raw_ref。

暂时还原了一项始终使用最新 ChromeDriver 的更改,因为该更改导致 Windows 稳定版/Beta 版渠道出现崩溃(crrev.com/c/4778973,还原 crrev.com/c/4777430)。

调整了 WPT(Web 平台测试)配置,包括抑制 pointer_touch.py 中的仅调试失败,以及为受限框架实现浏览器端焦点验证 (crrev.com/c/4844810、crrev.com/c/4572517)。

为符合 IWYU 标准,向 client_hints.h 添加了缺失的 #include (crrev.com/c/4767547)。

将特定于 Apple 的基本类型(ScopedTypeRef、ScopedCFTypeRef、scoped_nsautorelease_pool)迁移到 base::apple:: 命名空间,为 Crashpad 留下临时转发标头(crrev.com/c/4799213、crrev.com/c/4790744、crrev.com/c/4790741、crrev.com/c/4784010)。

ChromeDriver 117

新功能

管道通信:将 ChromeDriver 和 Chrome 之间的默认通信模式从 WebSockets 更改为管道(--remote-debugging-in-pipe 和 --remote-debugging-out-pipe),适用于所有受支持的平台,包括 Windows (crrev.com/c/4634299、crrev.com/c/4628834、crrev.com/c/4635378、Bug: 3480)。

BiDi:更新了 BiDi Mapper 依赖项(crrev.com/c/4670516、Bug: 4226)。

问题修复

稳定性:修复了导致 ChromeDriver 崩溃的 null 指针访问问题,该问题反过来会导致测试运行期间出现 ConnectionRefused 错误(crrev.com/c/4675633、Bug: 1457101)。

导航:修复了导航期间 Chrome 的 NoSuchExecutionContext 和 NoSuchWindow 错误未得到统一处理的问题;现在,这两个错误都已正确映射为重试操作 (crrev.com/c/4667156、Bug: 4459)。

移动设备模拟:更正了 clientHints.mobile 的推理逻辑;现在,系统会根据 Android 上的 userAgent 正确推理出 clientHints.mobile,并在其他平台上默认设置为 false,从而修复了平板电脑被错误地报告为移动设备的问题 (crrev.com/c/4649348,Bug: 4243)。

会话创建:更新了会话创建,以便在失败时正确返回标准 SessionNotCreated 错误代码,严格遵守 W3C WebDriver 规范 (crrev.com/c/4638223,Bug: 4379)。注意:此变更随后被回滚,因为某些特定代码路径需要不同的错误代码 (crrev.com/c/4651188)。

内部更改和重构

消除了手动 ChromeDriver 发布流程脚本,因为 ChromeDriver 现在已完全集成到 Chrome 发布流程中,并且可通过 Chrome for Testing 基础架构 (crrev.com/c/4520687, Bug: 4142) 获取。

将 WPT(Web 平台测试)基础架构迁移为使用官方 wptrunner harness 而不是定制的 run_webdriver_tests.py,显著提高了执行速度和可靠性,并确保 ChromeDriver 在测试之间重新生成,以隔离崩溃问题 (crrev.com/c/4723147、crrev.com/c/4676070、crrev.com/c/4639168)。

对 ChromeLauncher 和相关类进行了广泛的重构,以支持向管道的过渡,放宽与 DevToolsHttpClient 的耦合,并将 WebSocket 逻辑移至专用分支 (crrev.com/c/4632801、crrev.com/c/4674345)。

为清楚起见,已将具有误导性的 BrowserInfo.is_headless 字段重命名为 BrowserInfo.is_headless_shell(crrev.com/c/4650452、Bug: 4358)。

在整个代码库中,将各种已废弃的 base::Value 方法替换为现代的 base::Value::Dict 等效方法(例如 FindDouble()、Set()、size())(crrev.com/c/4258936、crrev.com/c/4336805、crrev.com/c/4461067)。112.0.5603.0、113.0.5653.0、114.0.5733.0

移除了 [w]ctype.h 的使用,改用更安全的基字符串实用程序,并为 base::expected 实现了新功能(crrev.com/c/4749459、crrev.com/c/4755226)。

在 TestDriver 中为 FedCM WPT 实现 get_fedcm_dialog_title 和 select_fedcm_account 自动化命令 (crrev.com/c/4618303)。

更新了 BiDi 映射器 build 脚本,使其无论当前工作目录如何都能正常运行 (crrev.com/c/4670550)。

在 macOS build 中,将转换后的 /chrome/test/chromedriver 文件用于 ARC(自动引用计数),并添加了必要的样板代码 (crrev.com/c/4663602)。

尝试通过自动批准的提交默认停用管道通信,但相应更改仅触及配置,而未更改之前引入的默认管道行为 (crrev.com/c/4683947)。

ChromeDriver 116

新功能

FedCM:添加了一项新功能,允许客户端检查 ChromeDriver 是否支持 FedCM 命令,而无需执行这些命令并捕获错误 (crrev.com/c/4624924,Bug: 1356159)。

测试:在 wptrunner 中启用了通过 ChromeDriver 运行的 testharness 测试的测试窗口重用,以评估其对性能和不稳定性的影响(crrev.com/c/4515180,Bug: 1394572)。

问题修复

C++ 标准合规性:修复了因在格式字符串中直接错误使用作用域枚举 (enum class) 而导致的未定义行为,解决了新的 Clang 编译器警告 (crrev.com/c/4628112,Bug: 1456289)。

FedCM:修复了导致测试不稳定性的一个潜在原因,即修复了一个阻止 setdelayenabled 正常运行的极端情况(crrev.com/c/4606064,Bug: 1453412)。

内部更改和重构

BiDi:提升了 BiDi Mapper 依赖项,并更新了 build 脚本,以默认从“main”拉取最新修订版本(crrev.com/c/4615087、crrev.com/c/4615791、Bug: 4226)。

已将 ChromeDriver 迁移为使用 UTF-8 编码显式打开和写入所有文件 (crrev.com/c/4614522)。

重构了 ChromeImpl 以消除其对 DevToolsHttpClient 的依赖,并减少了 SyncWebSocketFactory 和 BrowserInfo 的使用,为通过管道而非 WebSocket 进行通信做准备(crrev.com/c/4571690、crrev.com/c/4571199、Bug: 3480)。

移除了围栏框架的已弃用“默认模式”,并更新了相关测试以启用新的功能标志,继续迁移到 FLEDGE 出价 (crrev.com/c/4558645)。

通过将通用 WaitForCondition 断言替换为 assertTrue 来改进 FedCM 测试,以清晰指示何时发生超时(crrev.com/c/4590211)。

在 linux-rel 单元测试中标记了已知的不稳定的悬空 raw_ptr 警告 (crrev.com/c/4598070)。

更新了 BiDi 映射器的 OWNERS 文件 (crrev.com/c/4614518)。

ChromeDriver 115

新功能

移动设备模拟:在移动设备模拟中实现了对 User-Agent 客户端提示的支持,从而允许 ChromeDriver 从 capability 和预设中解析客户端提示,并将其传递给 Chrome(crrev.com/c/4498667、crrev.com/c/4466129、Bug: 4243)。

移动设备模拟:更新了移动设备模拟预设,以在替换用户代理中的 %s 格式字符串时使用宿主浏览器的主版本,而不是 ChromeDriver 版本 (crrev.com/c/4502850,Bug: 4243)。

设置:添加了对下载给定渠道的特定 ChromeDriver 版本的支持,从而改进了 ChromeDriver 在不同平台(如 Android/WebView)上运行的自动化场景(crrev.com/c/4550281)。116.0.5791.0

问题修复

经典版:修复了以下问题:无法解析节点时,会错误地返回 UnknownError 而不是标准 NoSuchElement 错误(crrev.com/c/4508952、bug:4440)。

移动设备模拟:为移动设备模拟预设添加了更严格的断言,以强制执行以下规则:如果 userAgent 字符串包含“Mobile”,则 clientHints.mobile 标志必须为 true (crrev.com/c/4507142, Bug: 4243)。

移动设备模拟:迁移了 DeviceMetrics 替换项,以使用 Emulation.setDeviceMetricsOverride CDP 命令,而不是已废弃的 Page 网域等效项(crrev.com/c/4502614,Bug:4243)。

内部更改和重构

BiDi:更新了 BiDi Mapper 依赖项,从而启用了深度序列化功能(crrev.com/c/4535936、crrev.com/c/4512195)。

移除了 DevToolsClient 中已废弃的 Connect 方法,为迁移 ChromeDriver 以通过管道进行通信做准备(crrev.com/c/4521485、Bug: 3480)。

迁移了代码库,使其优先使用 base::Value::Dict 而不是 base::Value,并替换了已弃用的方法,例如 FindStringKey()、SetKey() 和 SetByDottedPath() (crrev.com/c/4529788、crrev.com/c/4522701、crrev.com/c/4515800、crrev.com/c/4507150)。

已切换为使用 string_util.h 函数代替 [w]ctype.h,以实现更安全的类型转换 (crrev.com/c/4529187)。

更改了种子文件加载逻辑,以使用绝对路径,确保脚本和 Chrome 在不同位置运行时保持一致性 (crrev.com/c/4504656)。

从 web_view.h 中移除了未使用的 CallAsyncFunction() 方法(crrev.com/c/4518363、Bug: 3376)。

根据样式指南偏好设置(crrev.com/c/4476651),将 base::raw_ptr 自动重命名为 raw_ptr。

ChromeDriver 114

新功能

传统版:将 MobileDevice 信息传递给 MobileEmulationOverrideManager,为未来的客户端提示和 UserAgent 替换奠定基础 (crrev.com/c/4447524)。

测试:为 ChromeDriver 添加了测试装置 (crrev.com/c/4459939)。

问题修复

无头:通过静默忽略脚本化打印预览请求(例如 window.print())修复了新无头模式中的崩溃问题,使行为与旧无头模式保持一致(crrev.com/c/4436313,Bug: 4385)。

功能:修复了 ChromeDriver 功能中的 use-after-move bug(crrev.com/c/4462094,Bug: 4243)。

DevTools:移除了 DevToolsClientImpl::SendCommandInternal 中的 DCHECK,以防止在开发者工具连接中断时发生崩溃,因为这并非不变量违规行为(crrev.com/c/4370486、Bug: 4385)。

内部更改和重构

BiDi:更新了 BiDi Mapper 依赖项 (crrev.com/c/4418727)。

通过在 WebViewImpl 和性能日志记录器测试中正确管理非自有引用和本地销毁,解决了单元测试作业期间出现的多个悬空指针警告问题(crrev.com/c/4374824、crrev.com/c/4368179)。

迁移了代码库以使用新的 base::Value v2 API,替换了已弃用的方法,例如 Value::SetPath()、Value::SetStringPath() 和 base::ListValue (crrev.com/c/4452309、crrev.com/c/4431420、crrev.com/c/4422897、crrev.com/c/4377520)。

已将所有 base::GUID 用法替换为 base::Uuid,以与核心基础库重命名 (crrev.com/c/4455083) 保持一致。

执行了各种代码清理,包括缩短代码、为 expected 使用 monad 操作、移除无效代码和修复样式违规问题 (crrev.com/c/4475368、crrev.com/c/4464199)。

更新了涉及围栏框架的测试,以使用 config 属性,而不是已弃用的 src 属性 (crrev.com/c/4382231)。

移除了无效的 ShadowDOMV0 用法 (crrev.com/c/4388302)。

还原了为 Skia PDF 修复添加标志 (SK_IGNORE_PDF_EOF_NEWLINE_FIX) 的操作,以允许重新基准化 (crrev.com/c/4401451)。

更新了 ChromeDriver 测试脚本的所有者,并进行了调整,以专门为 Pinpoint 生成配置 JSON (crrev.com/c/4437492、crrev.com/c/4298554)。

在 web_view_impl.cc 中为 std::strlen 添加了缺失的 include (),以修复 IWYU build 问题 (crrev.com/c/4376772)。

移除了未使用的测试文件 (orientation_test.html) (crrev.com/c/4335668)。

ChromeDriver 113.0.5672.63

支持 Chrome 113 版

解决了问题 4205:经典模式和 BiDi 中的对象 ID 相同 [Pri-1]

解决了问题 4302:不再假设 Mapper 位于 ExecuteGetWindowHandles 的第一个标签页中 [Pri-1]

解决了问题 4356:Chrome 110 未使用偏好设置值“download.default_directory”[Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 113.0.5672.24

支持 Chrome 113 版

解决了问题 4205:经典模式和 BiDi 中的对象 ID 相同 [Pri-1]

解决了问题 4302:不再假设 Mapper 位于 ExecuteGetWindowHandles 的第一个标签页中 [Pri-1]

解决了问题 4356:Chrome 110 未使用偏好设置值“download.default_directory”[Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 112.0.5615.49

支持 Chrome 版本 112

解决了问题 3517:为非无头设备启用了打印功能 [Pri-]

解决了问题 4419:使用 chromedriver 时,Speedometer 的开销过大 [Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 112.0.5615.28

支持 Chrome 版本 112

解决了问题 4357:Chromedriver 版本 110.0.5481.77 在使用 --headless 和 --user-data-dir 选项时出现的会话问题。[Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 111.0.5563.64

支持 Chrome 111 版

已解决问题 4216:使用自定义 BiDiMapper 运行 ChromeDriver [Pri-]

解决了问题 4300:窗口句柄在传统版和 BiDi 之间可互操作 [Pri-]

解决了问题 4325:call_function.js 的 jsonSerialize 中对 toJSON 的处理与标准不一致。[Pri-]

解决了问题 4330:DCHECK 在 DevToolsClientImpl::AddListener 处失败 [Pri-]

已解决问题 4357:使用 --headless 和 --user-data-dir 选项时 ChromeDriver 会话出现问题 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 111.0.5563.41

支持 Chrome 111 版

已解决问题 4357:使用 --headless 和 --user-data-dir 选项时 ChromeDriver 会话出现问题 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 111.0.5563.19

支持 Chrome 111 版

已解决问题 4216:使用自定义 BiDiMapper 运行 ChromeDriver [Pri-]

解决了问题 4300:窗口句柄在传统版和 BiDi 之间可互操作 [Pri-]

解决了问题 4325:call_function.js 的 jsonSerialize 中对 toJSON 的处理与标准不一致。[Pri-]

解决了问题 4330:DCHECK 在 DevToolsClientImpl::AddListener 处失败 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 110.0.5481.77

支持 Chrome 版本 110

解决了问题 4193:无法在 Android 13 上启动新会话 [Pri-]

解决了问题 4272:WebSocket 应将 code=0 视为 FIN 的指示 [Pri-]

解决了问题 4276:修复了 ChromeDriver 中的连接问题 [Pri-]

已解决问题 4295:带有 "webSocketUrl": true 的 ChromeDriver 存在竞争条件 [Pri-]

已解决问题 4297:ChromeDriver Bidi 序列化不正确 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 110.0.5481.30

支持 Chrome 版本 110

解决了问题 4193:无法在 Android 13 上启动新会话 [Pri-]

解决了问题 4272:WebSocket 应将 code=0 视为 FIN 的指示 [Pri-]

解决了问题 4276:修复了 ChromeDriver 中的连接问题 [Pri-]

已解决问题 4295:带有 "webSocketUrl": true 的 ChromeDriver 存在竞争条件 [Pri-]

已解决问题 4297:ChromeDriver Bidi 序列化不正确 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 109.0.5414.74

支持 Chrome 109 版

解决了问题 4179:BiDi 会话必须支持多个连接 [Pri-]

已解决问题 4203:改进了提供方信息 [Pri-]

解决了问题 4263:Meta+A 上的崩溃 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 109.0.5414.25

支持 Chrome 109 版

解决了问题 4179:BiDi 会话必须支持多个连接 [Pri-]

已解决问题 4203:改进了提供方信息 [Pri-]

解决了问题 4263:Meta+A 上的崩溃 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 108.0.5359.71

支持 Chrome 版本 108

如需了解详情,请参阅版本说明。

ChromeDriver 108.0.5359.22

支持 Chrome 108 版

解决了问题 4204:修复了失败的 WPT test_top_level_and_one_child [Pri-]

解决了问题 4215:将 chromedriver_mac64_m1 build 重命名为 chromedriver_mac_arm64 [Pri-]

解决了问题 4221:点击命令关闭浏览器时发生崩溃 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 107.0.5304.62

支持 Chrome 版本 107

如需了解详情,请参阅版本说明。

ChromeDriver 107.0.5304.18

支持 Chrome 版本 107

解决了问题 4180:禁止在收到 BiDiMapper 已启动的通知之前处理任何 BiDi 命令 [Pri-]

解决了问题 4198:ChromeDriver BiDi 不应假设 BiDiMapper 始终位于第一个标签页中 [Pri-]

已解决问题 4207:运行 WPT 时出现 WebDriver 错误 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 106.0.5249.61

支持 Chrome 版本 106

如需了解详情,请参阅版本说明。

ChromeDriver 106.0.5249.21

支持 Chrome 版本 106

已解决问题 4016:向 ChromeDriver(基于 Mapper)添加了基本的 BiDi 支持 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 105.0.5195.52

支持 Chrome 105 版

如需了解详情,请参阅版本说明。

ChromeDriver 105.0.5195.19

支持 Chrome 版本

如需了解详情,请参阅版本说明。

ChromeDriver 104.0.5112.79

支持 Chrome 版本 104

如需了解详情,请参阅版本说明。

ChromeDriver 104.0.5112.29

支持 Chrome 版本 104

解决了问题 4121:WebDriver 命令有时会因“意外的命令响应”而失败 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 104.0.5112.20

支持 Chrome 版本 104

解决了问题 4121:WebDriver 命令有时会因“意外的命令响应”而失败 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 103.0.5060.134

支持 Chrome 版本 103

解决了问题 4048:目标框架已分离 [Pri-]

解决了问题 4121:WebDriver 命令有时会因“意外的命令响应”而失败 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 103.0.5060.53

支持 Chrome 版本 103

解决了问题 4048:目标框架已分离 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 103.0.5060.24

支持 Chrome 版本 103

如需了解详情,请参阅版本说明。

ChromeDriver 102.0.5005.61

支持 Chrome 版本 102

解决了问题 1309282:chromedriver 不支持多值开关 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 102.0.5005.27

支持 Chrome 版本 102

解决了问题 1309282:chromedriver 不支持多值开关 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 101.0.4951.41

支持 Chrome 101 版

解决了问题 4046:附加空围栏框架时命中 DCHECK [Pri-]

解决了问题 4080:切换到嵌套框架失败 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 101.0.4951.15

支持 Chrome 101 版

解决了问题 4046:附加空围栏框架时命中 DCHECK [Pri-]

解决了问题 4080:切换到嵌套框架失败 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 100.0.4896.60

支持 Chrome 版本 100

解决了问题 4002:支持围栏框架 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 100.0.4896.20

支持 Chrome 版本 100

解决了问题 4002:支持围栏框架 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 99.0.4844.51

支持 Chrome 99 版

如需了解详情,请参阅版本说明。

ChromeDriver 99.0.4844.35

支持 Chrome 99 版

已恢复!!!解决了问题 2269:无法使用非 BMP 字符(代码点高于 U+FFFF)[Pri-3]

解决了问题 chromium:1295243:ChromeDriver sendKeys 中的回归 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 99.0.4844.17

支持 Chrome 99 版

如需了解详情,请参阅版本说明。

ChromeDriver 98.0.4758.102

支持 Chrome 98 版

解决了问题 3933:点击视口边缘无效,且没有错误 [Pri-]

已恢复!!!解决了问题 2269:无法使用非 BMP 字符(代码点高于 U+FFFF)[Pri-3]

解决了问题 chromium:1295243:ChromeDriver sendKeys 中的回归 [Pri-1]

如需了解详情,请参阅版本说明。

ChromeDriver 98.0.4758.80

支持 Chrome 98 版

解决了问题 3933:点击视口边缘无效,但没有错误 [Pri-]

解决了问题 2269:无法使用非 BMP 字符(代码点高于 U+FFFF)[Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 98.0.4758.48

支持 Chrome 98 版

解决了问题 3933:点击视口边缘无效,但没有错误 [Pri-]

解决了问题 2269:无法使用非 BMP 字符(代码点高于 U+FFFF)[Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 97.0.4692.71

支持 Chrome 版本 97

解决了问题 3878:更好地处理了元素点击的分数元素坐标 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 97.0.4692.36

支持 Chrome 版本 97

解决了问题 3878:更好地处理了元素点击的分数元素坐标 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 97.0.4692.20

支持 Chrome 版本 97

解决了问题 3878:更好地处理了元素点击的分数元素坐标 [Pri-]

如需了解详情,请参阅版本说明。

ChromeDriver 96.0.4664.45

支持 Chrome 96 版

解决了问题 3445:无法访问 shadow root 内 iframe 中的元素 [Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 96.0.4664.35

支持 Chrome 96 版

解决了问题 3445:无法访问 shadow root 内 iframe 中的元素 [Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 96.0.4664.18

支持 Chrome 96 版

解决了问题 3445:无法访问 shadow root 内 iframe 中的元素 [Pri-3]

如需了解详情,请参阅版本说明。

ChromeDriver 95.0.4638.69

支持 Chrome 95 版

已解决问题 3857:指定了主机标头或源标头,但该标头未加入白名单或不是 localhost [Pri-1]

添加了 --allowed-origins 实参

如需了解详情,请参阅版本说明。

ChromeDriver 95.0.4638.54

支持 Chrome 95 版

已解决问题 3857:指定了主机标头或源标头,但该标头未加入白名单或不是 localhost [Pri-1]

添加了 --allowed-origins 实参

如需了解详情,请参阅版本说明。

ChromeDriver 95.0.4638.17

支持 Chrome 95 版

已解决问题 3857:指定了主机标头或源标头,但该标头未加入白名单或不是 localhost [Pri-1]

添加了 --allowed-origins 实参

如需了解详情,请参阅版本说明。

ChromeDriver 95.0.4638.10

支持 Chrome 95 版

已解决问题 3857:指定了主机标头或源标头,但该标头未加入白名单或不是 localhost [Pri-1]

添加了 --allowed-origins 实参

如需了解详情,请参阅版本说明。

ChromeDriver 94.0.4606.113

支持 Chrome 版本 94

如需了解详情,请参阅版本说明。

ChromeDriver 94.0.4606.61

支持 Chrome 版本 94

如需了解详情,请参阅版本说明。

ChromeDriver 94.0.4606.41

支持 Chrome 版本 94

如需了解详情,请参阅版本说明。

ChromeDriver 93.0.4577.63

支持 Chrome 93 版

如需了解详情,请参阅版本说明。

ChromeDriver 93.0.4577.15

支持 Chrome 93 版

如需了解详情,请参阅版本说明。

ChromeDriver 92.0.4515.107

支持 Chrome 92 版

如需了解详情,请参阅版本说明。

ChromeDriver 92.0.4515.43

支持 Chrome 92 版

解决了问题 3389:针对 ChromeDriver 请求的主机验证

如需了解详情,请参阅版本说明。

ChromeDriver 91.0.4472.101

支持 Chrome 91 版

解决了问题 1205107:无法获取 Web 应用中字段的属性值。

如需了解详情,请参阅版本说明。

ChromeDriver 91.0.4472.19

支持 Chrome 91 版

解决了问题 3744:在链接导航后,SendKeys() 和 Click() 会静默失败

解决了问题 3746:属性端点错误地更新了值

如需了解详情,请参阅版本说明。

ChromeDriver 90.0.4430.24

支持 Chrome 版本 90

解决了问题 3708:对于 shadow DOM 中的元素,GetElementLocation 的 inView 失败

已解决问题 3721:启用时收集 Service Worker 的性能日志

解决了问题 3731:AdbImpl::GetPidByName 在非标准 Android 操作系统(例如 OnePlus)上无法正常运行

已解决问题 3733:本地主机上的网域出现灾难性故障

解决了问题 3734:驱动程序应在尝试在错误的网域上设置 Cookie 时报错

解决了问题 3743:重构了调用函数并修复了移除元素问题

如需了解详情,请参阅版本说明。

ChromeDriver 89.0.4389.23

支持 Chrome 版本 89

解决了问题 3667:接收来自渲染器的消息时超时

解决了问题 3675:GetElementLocation 使用 inView 方法,该方法错误地将布尔值作为数组处理

解决了问题 3682:对于部分超出视口的元素,GetElementRegion 返回的大小不正确

解决了问题 3690:如果扩展程序使用 chrome.windows API,ChromeDriver 会失败

如需了解详情,请参阅版本说明。

ChromeDriver 88.0.4324.96

支持 Chrome 88 版

解决了问题 3641:当浏览器窗口未处于焦点状态时,Chrome Beta 版 v87 和 chromedriver v(87/86) 无法加载/呈现网页

如需了解详情,请参阅版本说明。

ChromeDriver 88.0.4324.27

支持 Chrome 88 版

解决了问题 3611:protractor 中的 getText() 输出与 .innerText 不同

解决了问题 3625:提高了元素屏幕截图的兼容性

解决了问题 3628:报告了过时的元素引用和错误的网址,其中网址的路径中包含另一个网址

解决了问题 3631:添加了对 webauthn:extension:largeBlob 功能的支持

解决了问题 3635:Chromedriver 86 - chromedriver.quit() 似乎无法正确传递卸载事件

解决了问题 3649:在 Windows 10 上以无头模式运行时,无法将所选文本复制到剪贴板

如需了解详情,请参阅版本说明。

ChromeDriver 87.0.4280.88

支持 Chrome 87 版

解决了问题 3641:当浏览器窗口未处于焦点状态时,Chrome Beta 版 v87 和 chromedriver v(87/86) 无法加载/呈现网页

解决了问题 3657:屏幕截图后台浏览器超时

如需了解详情,请参阅版本说明。

ChromeDriver 87.0.4280.20

支持 Chrome 87 版

解决了问题 2421:在 Android adb-server 上删除了旧的端口转发通道

解决了问题 3474:模拟移动设备列表需要更新

解决了问题 3507:实现了“获取计算出的角色”

解决了问题 3508:实现了“获取计算出的标签”

解决了问题 3584:重命名了 ChromeDriver 命令行选项 --whitelisted-ips

解决了问题 3588:双向 WebSocket 连接

解决了问题 3594:如果 OOPIF 在主网页之前加载,导航会过早完成

解决了问题 3598:用于将开发者工具端口转发到 webview_devtools_remote 套接字的命令行选项

解决了问题 3608:Chromedriver debuggerAddress 不支持 IPv6

如需了解详情,请参阅版本说明。

ChromeDriver 86.0.4240.22

支持 Chrome 86 版

解决了问题 3370:正常关闭 Chrome,否则 Cookie 将无法正确保存到 SQLite 持久性文件

解决了问题 3401:Get Element Location JS 无法定位元素的可见中心

解决了问题 3462:对于 sendKeys,CMD 键在 MAC 上不起作用

解决了问题 3541:改进了客户端和 ChromeDriver 之间的日志

已解决问题 3559:当 ChromeDriver 报告不兼容时,输出 Chrome 版本

如需了解详情,请参阅版本说明。

ChromeDriver 85.0.4183.87

支持 Chrome 85 版

解决了问题 3578:Chrome 85 不再允许在打开提醒对话框时与窗口进行流畅的互动

如需了解详情,请参阅版本说明。

ChromeDriver 85.0.4183.83

支持 Chrome 85 版

解决了问题 3577:ChromeDriver 85 未检测到已更改的 Chrome 目录 (C:\Program Files)

如需了解详情,请参阅版本说明。

ChromeDriver 85.0.4183.38

支持 Chrome 85 版

已解决问题 3214:ChromeDriver78:Sendkeys 会重置 contenteditable 的文本选择

解决了问题 3376:从 ChromeDriver 中移除了 LaunchApp 命令

解决了问题 3432:有时 NavigationTracker 无法检测到网页何时加载完毕

解决了问题 3481:根据 W3C 规范新增了打印端点

解决了问题 3488:当代理配置错误时,driver.get 不会抛出错误

解决了问题 3502:使用 document.hasFocus() 检查元素是否处于聚焦状态

解决了问题 3515:selenium.common.exceptions.WebDriverException: Message: unknown error: bad inspector message

如需了解详情,请参阅版本说明。

ChromeDriver 84.0.4147.30

支持 Chrome 版本 84

解决了问题 3420:切换到打印窗口后,chromedriver 停止响应

解决了问题 3421:驱动程序返回不带样式的西里尔文本

解决了问题 3422:GetElementText 在使用 prototype 1.6.0.3 时中断

解决了问题 3434:无法从“浏览器”日志中获取“断言”消息

如需了解详情,请参阅版本说明。

ChromeDriver 83.0.4103.39

支持 Chrome 83 版

更新了 Chromedriver,使其能与 prototype.js 正常搭配使用。

如需了解详情,请参阅版本说明。

ChromeDriver 83.0.4103.14

支持 Chrome 83 版

解决了问题 1778:弃用了 ChromeDriver 中的 launchApp

解决了问题 2520:当 Chrome 无响应时,InitSession 可能会无限期等待

解决了问题 3120:从新标签页下载无头模式

已解决问题 3234:确认在子字符串之前找到分号

已解决问题 3240:ExecuteGetElementRect 不检查来自 GET_SIZE 的返回状态

解决了问题 3331:get_cookies() 方法在 W3C 模式下返回的“expiry”键的类型为 double,但应为 int64

解决了问题 3332:重试超时记录为严重

解决了问题 3339:Chromedriver 意外退出,代码为 null,信号为 SIGTRAP

解决了问题 3351:改进了“安全注意事项”消息

解决了问题 3352:支持针对颜色元素的 SendKeys

解决了问题 3353:在帧上下文销毁后,继续等待待处理的导航

已解决问题 3375:Chromedriver v80 在某些网站上停滞在 getPageSource

已解决问题 3383:Windows 上的 ChromeDriver 80 及更高版本似乎会在某些元素或点击命令上退出或停滞

已解决问题 3399:移除了 wasThrown 检查

ChromeDriver 81.0.4044.138

支持 Chrome 81 版

更新了 Chromedriver,使其能与 prototype.js 正常搭配使用。

如需了解详情,请参阅版本说明。

ChromeDriver 81.0.4044.69

支持 Chrome 81 版

已修复:Chromedriver 在某些网站上出现 getPageSource 崩溃问题。

已修复:ChromeDriver 在执行某些元素或点击命令时崩溃。

如需了解详情,请参阅版本说明。

ChromeDriver 81.0.4044.20

支持 Chrome 81 版

修复了尝试获取 HTML 元素位置时出现的错误。

Get 和 Add Cookie 命令现在是特定于框架的。

解决了重新定义标准 JavaScript 对象的网站上出现的一些问题。

在收到“目标已关闭”消息后,ChromeDriver 将继续等待加载完成。

Chromedriver 现在会针对超时返回符合规范的错误代码

已修复:ChromeDriver 在 NewSession 命令上出现意外的缓慢响应时间。

现在支持超过 10 分钟的用户定义超时时间。

修复了以下问题:由于 IPv4 与 IPv6 不匹配,ChromeDriver 无法连接到开发者工具。

恢复了 Linux 上 Chrome 二进制文件的搜索顺序。

如需了解详情,请参阅版本说明。

ChromeDriver 80.0.3987.106

支持 Chrome 80 版

恢复了 Linux 上 Chrome 二进制文件的搜索顺序

如需了解详情,请参阅版本说明。

ChromeDriver 80.0.3987.16

支持 Chrome 80 版

修复了使用代理时加载页面被中止的问题。

Chromedriver 现在会等待当前帧加载。

ChromeDriver 日志将包含驱动程序使用的端口。

为 W3C 模式启用了 SetGeoLocation。

为 UnexpectedAlertOpen 状态添加了缺失的提醒文本。

改进了加载 CRX2 扩展程序时的消息。

修复了 ExecuteGetPageSource 中潜在的竞态条件。

当 acceptInsecureCerts 功能为 true 时,ChromeDriver 将添加 --ignore-certificate-errors 标志

更新了“无此类执行上下文”的错误消息和返回状态

修复了以下问题:ChromeDriver 在等待待处理的导航时可能会无限期地阻塞。

向 AddCookie 和 GetCookie 添加了 SameSite 属性。

如需了解详情,请参阅版本说明。

ChromeDriver 79.0.3945.36

支持 Chrome 79 版

与版本 79.0.3945.16 相比,包含以下变更:

修复了元素坐标计算不正确的问题

如需了解详情,请参阅版本说明。

ChromeDriver 79.0.3945.16

支持 Chrome 79 版

修复了在命令执行期间因触发 JavaScript 提醒而导致的 ChromeDriver 崩溃问题

修复了在拍摄屏幕截图时触发提醒导致 Chromedriver 锁定的 bug

从 Chrome 启动命令中移除了 --ignore-certificate-errors

将 Win10 上的平台和 platformName 更改为 Windows

修复了排除“enable-automation”时出现的未定义 window.navigator.webdriver 问题

修复了 WPT 测试“test_not_editable_inputs[hidden]”

修复了使用无头模式时出现的“元素不可点击”问题

如需了解详情,请参阅版本说明。

ChromeDriver 78.0.3904.105

支持 Chrome 78 版

与版本 78.0.3904.70 相比,此版本包含以下更改:* 修复了元素坐标计算不正确的问题

如需了解详情,请参阅版本说明。

ChromeDriver 78.0.3904.70

支持 Chrome 78 版

与版本 78.0.3904.11 相比,包含以下更改:

由于报告了多个问题,因此还原了在 Retina 显示屏上调整屏幕截图大小的变更

如需了解详情,请参阅版本说明。

ChromeDriver 78.0.3904.11

支持 Chrome 78 版

修复了 JavaScript 对象序列化方面的多个问题

修复了 Android 版 Chrome 的功能匹配方面的 bug

实现了权限自动化

修复了 Retina 显示屏上的屏幕截图大小

修复了某些情况下的网页加载超时问题

改进了 platformName 功能匹配

修正了将指针移至下拉列表选项时返回的错误代码

修复了影响无头模式下下载的问题

如需了解详情,请参阅版本说明。

ChromeDriver 77.0.3865.40

支持 Chrome 77 版

与版本 77.0.3865.10 相比,此版本包含以下更改:

修复了在序列化和反序列化 JavaScript 对象时出现的两个 bug

修复了在匹配功能时对 platformName: android 的处理

如需了解详情,请参阅版本说明。

ChromeDriver 77.0.3865.10

支持 Chrome 77 版

修复了 Actions API 实现中的多个问题

改进了 JavaScript 代码执行和结果处理

修复了在 OSS 模式下错误拒绝正文为空的 POST 请求的 bug

更强大的导航追踪器

支持急切的网页加载策略

根据 W3C WebDriver 规范添加了“New Window”命令

支持在无头模式下保存文件下载

添加了对加载 CRX3 扩展程序的支持

如需了解详情,请参阅版本说明。

ChromeDriver 76.0.3809.126

支持 Chrome 76 版

与版本 76.0.3809.68 相比,包含以下更改:

修复了在序列化和反序列化 JavaScript 对象时出现的两个 bug

如需了解详情,请参阅版本说明。

ChromeDriver 76.0.3809.68

支持 Chrome 76 版

与版本 76.0.3809.25 相比,包含以下更改:

修复了检测 JavaScript 对象中的循环引用时出现的 bug

修复了在出现某些类型的 JavaScript 错误时导致 ChromeDriver 崩溃的 bug

修复了阻止操作 API 与 shadow DOM 内的元素互动的 bug

修复了在操作 API 命令之间跟踪辅助键状态的 bug

修复了在操作 API 命令之间跟踪指针位置时出现的 bug

在发生“Cannot call non W3C standard command while in W3C mode”错误时,将其保存到日志文件

如需了解详情,请参阅版本说明。

ChromeDriver 76.0.3809.25

支持 Chrome 76 版

包含自版本 76.0.3809.12 以来的以下更改:

修复了在 OSS 模式下错误拒绝正文为空的 POST 请求的 bug

添加了用于检索 Chrome 日志的新端点

在 W3C 模式下为“是否显示”命令添加了端点

如需了解详情,请参阅版本说明。

ChromeDriver 76.0.3809.12

支持 Chrome 76 版

完成了 Actions API 的实现

改进了脚本超时处理的规范合规性

改进了“执行脚本”命令的结果序列化

修复了将元素滚动到视图中的问题

添加了对 WebDriver 规范中定义的 Cancel 键的处理

修复了未处理的提醒错误响应的处理

修复了

元素的处理问题

更新了 excludeSwitches 选项,以允许在开关名称中使用可选的前导短划线

如需了解详情,请参阅版本说明。

ChromeDriver 75.0.3770.140

支持 Chrome 75 版

包含以下相对于版本 75.0.3770.90 的更改:

修复了当出现某些类型的 JavaScript 错误时导致 ChromeDriver 崩溃的 bug

修复了在操作之间保留辅助键状态的错误

如需了解详情,请参阅版本说明。

ChromeDriver 75.0.3770.90

支持 Chrome 75 版

与 75.0.3770.8 版相比,包含以下更改:

修复了在 OSS 模式下错误拒绝正文为空的 POST 请求的 bug

添加了用于检索 Chrome 日志的新端点

如需了解详情,请参阅版本说明。

ChromeDriver 75.0.3770.8

支持 Chrome 75 版

最明显的变化是 ChromeDriver 现在默认以符合 W3C 标准的模式运行。其他更改包括:

修复了在元素清除期间导致模糊事件被触发两次的 bug

根据 W3C 标准的要求,将功能 loggingPrefs 重命名为 goog:loggingPrefs

修复了 W3C 模式下的错误处理问题

正确处理了在域名中不带前导点的情况下创建 Cookie 的问题

允许将脚本超时时间设为 null

修复了“元素发送键”命令,以用于具有“multiple”属性的文件输入

修复了“获取有效元素”命令,使其在不存在有效元素时返回“没有此类元素”错误

修复了导航到格式错误的网址时返回“实参无效”错误的问题

修复了收到无效会话 ID 时的 HTTP 状态代码

修复了输入参数缺失或格式不正确时的错误响应

修复了“执行脚本”命令,以处理面向行的 JavaScript 注释

如需了解详情,请参阅版本说明。

ChromeDriver 74.0.3729.6

支持 Chrome 74 版

修复了在 Windows 上生成意外 debug.log 文件的 bug

修复了 SVG 文档中的鼠标点击和拖放问题

在 ChromeDriver 的响应中添加了 cache-control 标头

修正了点击被其他元素拦截时的错误类型

修复了以下 bug:导致 ChromeDriver 在没有 /dev/shm 的 Linux 设备上失败

修复了某些类型的双击事件

修复了“获取会话”命令

修复了“切换到框架”命令中的错误检查

修复了“获取网页源代码”命令

如需了解详情,请参阅版本说明。

ChromeDriver 73.0.3683.68

支持 Chrome 73 版

修复了在 Windows 上生成意外 debug.log 文件的 bug

修复了在某些情况下从“执行脚本”命令返回的错误代码

在 ChromeDriver 的响应中添加了 cache-control 标头

默认情况下,使 HTTP 服务器保持连接有效

修复了“关闭窗口”命令,以正确处理用户提示

修复了向已停用的元素发送键时返回的错误代码

改进了超时值处理的规范合规性

改进了“添加 Cookie”命令的规范合规性

增加了 HTTP 服务器侦听队列长度

修复了 v0 shadow DOM 中的“Is Element Displayed”命令

在日志文件中添加了有关 Element Clear 命令行为变更的警告

修复了“执行脚本”命令,以正确地将 document.all 转换为 JSON 格式

改进了对错误元素引用的处理

如需了解详情,请参阅版本说明。

ChromeDriver 2.46

支持 Chrome v71-73

修复了在某些情况下从“执行脚本”命令返回的错误代码

默认情况下,使 HTTP 服务器保持连接处于活动状态

修复了“关闭窗口”命令,以正确处理用户提示

修复了向已停用的元素发送键时返回的错误代码

改进了超时值处理的规范合规性

改进了“添加 Cookie”命令的规范合规性

改进了“切换到框架”命令的规范合规性

增加了 HTTP 服务器侦听队列长度

修复了 v0 Shadow DOM 中的“Is Element Displayed”命令

固定元素双击命令

在日志文件中添加了有关 Element Clear 命令行为变更的警告

修复了“执行脚本”命令,以正确地将 document.all 转换为 JSON 格式

改进了对错误元素引用的处理

如需了解详情,请参阅版本说明。

ChromeDriver 2.45

支持 Chrome v70-72

修复了“新会话”不符合规范的问题

修复了以下问题:如果 Chrome 和 ChromeDriver 版本不兼容,ChromeDriver 不应启动 Chrome

修复了以下问题:使用无效的定位器时,“查找元素”命令返回错误的错误代码

修复了部分 ChromeDriver 状态代码错误的问题

修复了 WebViewImpl::DispatchTouchEventsForMouseEvents 中 JS 的编译错误

固定窗口大小命令应处理用户提示

修复了以下问题:ChromeDriver 无法使用 Chrome 选项“user-data-dir=”正确启动 Chrome

固定状态命令不符合规范

修复了添加对 strictFileInteractability 的支持

ChromeDriver 2.44

支持 Chrome v69-71

修复了 Mac 上的 WindowMaximize

修复了窗口句柄调用出现的“提醒打开错误”

修复了以下问题:在 W3C 模式下,元素发送键应获取“文本”属性

修复了“Is Element Enabled”未按规范处理的 XML 特殊情况

修复了以下问题:未按规范处理获取元素 CSS 值的 XML 特殊情况

修复了“设置窗口矩形”需要检查无效输入的问题

修复了支持新的 unhandledPromptBehavior 模式

ChromeDriver 2.43

支持 Chrome v69-71

更改包括:

修复了代理配置解析不符合标准的问题

修复了“启动应用”命令不稳定的问题

修复了 iFrame 内元素的屏幕截图拍摄不正确的问题

添加了 ChromeDriver 对通过远程连接调整窗口大小的支持

修复了以下问题:未在 Clear 元素中处理错误代码

修复了“未等待元素可见”的问题

修复了“获取元素属性”功能未实现的问题

“固定切换到帧”不符合规范

修复了“执行异步脚本”不返回符合规范的错误代码的问题

修复了“执行脚本”不返回符合规范的错误代码的问题

修复了 ExecuteGet 中的错误代码不符合规范的问题

修复了“发送提醒文本”未返回符合规范的错误代码的问题

修复了输入类型为“date”的 clear() 假装元素不可供用户编辑的问题

修复了 Chromedriver 获取手动打开的标签页的窗口句柄的问题

修复了允许为 ChromeDriver 附加或启动新日志文件的问题

修复了以下问题:如果标志位于 firstMatch 中,则新会话不会调用 w3c 模式

ChromeDriver 2.42

支持 Chrome v68-70

更改包括:

修复了移动设备模拟中的 ClickElement

具有 IPv4 的固定白名单 IP

修复了在 Mac OS 上使用 whitelisted-ips 标志启动 ChromeDriver 的问题

修复了 SetTimeout 以接受 pre-W3C 和 W3C 格式

修复了拍摄元素屏幕截图

修复了固定 ChromeDriver 也在系统 PATH 中查找 Chrome 二进制文件的问题

修复了“最大化窗口”和“全屏”

实现了日志重放功能。(目前不适用于 Android 和远程浏览器)

修复了一些错误代码不符合 W3C 标准的问题

修复了未正确处理具有多个实参的 console.log 的问题

修复了 GetElementRect 应允许双精度浮点数的问题

修复了触控模拟

ChromeDriver 2.41

支持 Chrome v67-69

更改包括:

修复了 ChromeDriver 在使用“whitelisted-ips”选项运行时出现的问题

远程调试端口在功能中返回

实现了在 Android 上获取窗口大小

改进了桌面版 Chrome 启动错误消息

如果无法启动 Chrome 二进制文件,ChromeDriver 会快速失败

关闭窗口返回值符合规范