近日,多名使用Playwright C#进行自动化测试的开发者反映,在将Microsoft Edge浏览器从版本148升级至150后,Playwright启动的浏览器窗口呈现完全空白状态,无法正常加载任何页面。这一异常现象已对依赖Playwright进行端到端测试、网页爬取和自动化操作的生产环境造成显著影响,引发了社区的高度关注。

问题概述:窗口加载正常但内容全无

据用户反馈,在Edge 148版本下,Playwright C#运行正常。升级至Edge 150后,调用Playwright.CreateAsync()并启动浏览器实例时,Edge窗口能够正常弹出,地址栏中输入URL亦可见页面标题更新,但主窗口区域始终为纯白或纯黑背景,不渲染任何DOM元素,控制台也无明显报错。部分用户尝试通过Page.GotoAsync()手动导航,页面状态返回“加载完成”,但实际内容为空;另一些用户则遇到浏览器进程持续占用CPU但无任何可视化输出的情况。

“测试套件在本地和CI环境中突然全部失败,排查后发现所有截图都是空的。”一位在金融科技公司担任QA工程师的用户在GitHub Issues中写道。该问题已影响到多个使用Playwright .NET SDK(版本1.38及以上)的项目。

背后原因:Chromium内核与Playwright的版本对齐

Playwright本身通过捆绑或调用系统安装的Chromium内核来驱动Edge浏览器。由于新版Edge(基于Chromium)采用了与Chrome同步更新内核的策略,其内核版本在150更新中可能有较大跳跃。Playwright官方SDK通常需要针对特定Chromium版本进行适配,尤其是处理新的渲染管线、GPU加速策略或安全沙箱机制。

目前公开的讨论中,开发者推测问题可能源于以下三点:

  1. GPU渲染兼容性:Edge 150默认启用了新的GPU加速或WebGPU支持,而Playwright的老版本驱动未正确初始化图形上下文,导致窗口无绘制。
  2. 浏览器进程沙盒变化:新版Edge可能强化了沙盒隔离,Playwright启动时未传入正确的--no-sandbox--disable-gpu参数,导致渲染进程崩溃但未返回错误。
  3. 用户数据目录冲突:Edge升级后可能改变了默认配置文件格式,Playwright清除或创建临时用户目录时无法与新版本兼容。

社区与官方响应:临时方案与期待修复

微软Edge团队和Playwright维护者已收到多起报告。Playwright的GitHub仓库下,同名Issue已获得超过50个反应和10篇复现信息。官方目前未发布紧急补丁,但社区已总结出若干变通方案:

  • 降级Edge:回退至148版本,或使用Edge Beta/Dev渠道(可能包含新内核但Playwright适配更快)。
  • 修改启动参数:在BrowserType.LaunchAsync()中添加--disable-gpu--no-sandbox参数,有用户反馈此举可缓解部分空白问题。
  • 切换至系统Chromium:通过设置Channel = Channel.Chrome并安装Chrome浏览器,绕过Edge更新影响。
  • 使用Playwright捆绑的Chromium:确保BROWSER_EXECUTABLE_PATH指向Playwright自带的chromium,而非系统Edge。Playwright默认捆绑的chromium版本通常落后主流Edge,但稳定性有保障。

微软官方论坛上,Edge工程团队成员已确认正在调查,并建议开发者暂时通过regedit禁用Edge的自动更新,或使用“Microsoft Edge for Business”版本(更新节奏较慢)。

影响范围与行业反思

Playwright作为现代自动化测试的主流框架之一,其C#版本在企业级.NET应用中尤为流行。此次问题波及了从单元测试到每晚回归测试的多个环节,部分团队甚至出现连续24小时测试流水线全部失效的情况。有用户调侃:“148到150看似小版本号,实则是从‘可用’到‘不可用’的飞跃。”

该事件也再次提醒开发者,在涉及浏览器自动化时,版本管控、测试环境隔离与快速回滚机制的重要性。对于依赖Edge特定版本进行生产级操作的项目,建议锁定浏览器版本号,或采用容器化(如Docker)部署以隔绝宿主机更新。

截至发稿时,Playwright官方尚未发布针对Edge 150的修复版本。建议受影响的团队优先采用上述临时方案,并持续关注GitHub Issue #27451以及微软Edge开发博客的后续更新。自动化的世界容不得一丝版本错位,而对于开发者而言,兼容性问题的排查与解决,始终是技术深耕的必修课。