无头模式与有头调试
无头模式在 CI 上默认运行:Playwright 默认无头,Selenium 用参数切换;本地调试切有头模式观察页面。两种环境存在字体、GPU、时区与窗口尺寸差异,需要在 CI 配置里对齐,否则会出现「本地通过、CI 失败」的幽灵问题,排查无从下手。
基本信息
| 默认行为 | Playwright 默认无头;Selenium 显式传参启用 |
|---|---|
| 本地调试 | 切有头模式观察真实交互与渲染 |
| 差异来源 | 字体、GPU 加速、时区、窗口尺寸、语言 |
| 证据留存 | 失败保留截图、视频与 trace |
| 对齐手段 | 固定视口、字体与语言,锁定随机因素 |
| 并行场景 | 无头资源占用低,适合容器并行 |
| 排查顺序 | 先对比本地与 CI 的启动参数、字体与时区 |
切换方式
切换方式
npx playwright test --headed # 本地有头调试
# Selenium:
# options.add_argument("--headless=new")
# CI 失败先看 trace、截图与视频,再定位环境差异典型使用场景
- CI 回归:无头模式跑全量,降低资源占用。
- 本地调试:有头模式观察点击、滚动与渲染细节。
- 视觉对照:截图基线在无头环境生成,保持条件一致。
- 慢网络模拟:无头配合网络节流复现加载问题。
- 并行执行:容器里无头并行,提高吞吐。
- 兼容排查:无头专属失败时,比对两条路径的环境差异。
- 容器基线:固定基础镜像与字体包,减少环境漂移。
- 性能对比:无头启动更快、资源更低,适合大规模回归。
- 定时任务:夜间无头跑全量回归,早上直接看简报。
无头环境字体渲染差异未固定,视觉基线会频繁抖动。
排查无头专属失败时,先在 CI 容器里跑有头模式对比,再定位环境差异。
无头不等于没有界面问题:渲染差异可能掩盖真实缺陷,视觉验证条件要一致。
在 CI 里跑有头模式需要虚拟显示服务(如 xvfb)支撑。