浏览器验证与截图基线
简体中文 | English
E2E 参与自动 CI 和正式发布检查。单元测试与完整普通浏览器比较通过后,工作流构建并发布下载包。应用与文档站各自记录测试结果。开发与发布
测试实际覆盖什么?
| 范围 | 实际运行 | 环境 |
|---|---|---|
| Sensa 应用 | 真实服务、HTTP/WebSocket、浏览器与回环模拟传输 | Actions 中的独立应用进程与模拟输入 |
| 独立参数图解 | 打包模型/视图资源、SVG、软件 WebGL2、拖动、录制与回退 | 浏览器软件渲染 |
| WebSensa | 静态浏览器控制器、脚本、共用入口和模拟设备 API | 浏览器与隔离 WebSocket/GATT 对端 |
| 桌面实例 | 重复启动、命名配置、实际分配端口与页面存活 | Actions 独立应用进程 |
| 文档站 | 构建产物的导航、双语章节定位与窄屏滚动 | 构建后的静态站点 |
大量参数用例持续更新 4096 条模拟参数,检查每页最多 100 行、直接跳页、全目录筛选、冻结和同来源详情。其他用例检查实际输入许可、模式、映射保存、断线与失效停止,并核对模拟传输。测试使用独立设备配置。
Contact 直接定位用例按 SDK 的原生字段名模拟米制位置与相对速度,覆盖位置/速度端点校准、Depth/V0 映射、类型变为 0 后停止,以及速度持续变化时活动 Sample 冻结仍会停止。图解检查十二个参数的字典序、中英文含义、单球覆盖、负坐标、零位置与零速度,以及 SDK 参数和 Sensa 活动字段的区别。站点用例同时打开新图解与 Contact SDK 指南。
Shader 用例使用十二字段模拟包,检查位置、Right/Forward 和 AvatarScale 的展示、七个新增指标的端点校准及失效清空。参数图解逐格核对 49×49 QR 黑白布局、定位标记、白色留白、Reed–Solomon 纠错与 CRC32。Windows 构建任务另用合成原生 PNG 经过桥、OSC 和实际服务,检查缺失恢复、有效观察与冻结停止;实际 GPU 像素由独立 Unity 图形契约验收。
空间计算用例通过中英文界面保存七种运算,核对倾斜平面的正负深度、横向偏移、两点距离和角度,并采集有实际数值的 XYZ 分组图片。跟随平面模板使用同一模拟 OSC 来源的 Contact 标记,检查生成五个计算草稿、旋转后的结果,以及零朝向和 Forward 活动停止后的失效与恢复。保存后输入保持关闭,显示值来自后端求值结果。
信号流程用例通过中英文界面建立手动与 OSC 的加权计算、迟滞和时间平滑,核对实际 UDP 消息中的 Float/Int/Bool、量程与停止值。会话用例检查 JSON Lines/CSV 的原始值、换算值和无效区间,下载文件后核对内容,再将原始值回放到 OSC,检查暂停和跳转。整套方案覆盖导出、导入预览、轴配置保留,以及应用后关闭输入和输出;异常名称或输出条目应在导入面板显示错误,保持当前配置和输入状态,并允许随后导入有效方案。信号流程
Pages 用例检查首页的三步上手、输入—计算—输出、下载与帮助入口,逐一核对多处上手链接的语言路径。首页和首次使用指南按两种语言、两个视口采集完整原图,共八张,供逐张审阅。站点行为与可访问性检查通过后部署同一构建产物。
帮助页另检查实际 CSS 布局、深层路径、过期指纹资源的恢复,以及桌面→窄屏→桌面切换时图片的 currentSrc 和解码状态。窄屏计算说明选择对应的设置截图,让文字保持可读。
funscript 录制用例检查默认格式、L0/R0 独立轨道、换算后的 0~100 位置与整数毫秒、失效后独立分段及原时间线偏移。用例逐个下载完成的文件核对内容,再分别载入信号回放和脚本播放器,检查实际 OSC 输出、暂停停止值及载入后保持输入关闭。
共享会话用例分别使用 SharedWorker 和 BroadcastChannel/Web Locks,打开二十个同源页面并检查后端连接数、请求关联和跨页状态。用例关闭部分页面及连接持有页后检查其余页面可用,再检查全部关闭后的连接释放,以及重新打开时保持当前数值、控制请求仅交付一次。页面缓存挂起与恢复由隔离的生命周期单元测试检查。
桌面 1280×900、窄屏 390×844 使用固定浏览器环境;320px 另作重排检查。测试源码
到哪里看本次结果?
打开对应 Actions 运行的 Job summary,并下载应用的 e2e-report 或文档站的 pages-verification。summary.json/summary.md 记录提交、运行次数、套件、截图模式、项目、视口和失败信息。验证记录根据实际运行结果更新。
| 结果 | 含义 |
|---|---|
passed/failed |
实际通过/失败的用例 |
expectedFailure/flaky |
预期失败/多次尝试结果不一致,不算干净通过 |
skipped |
明确跳过 |
notRun/interrupted |
没有执行/执行中被中断 |
| Runner/Command | 浏览器程序报告的状态/Actions 命令最终状态,两者都要核对 |
有效的发布比较要求:当前提交、同一次运行、桌面和窄屏完整套件全部通过,使用普通截图比较。空运行、过滤/分片、跳过、重试通过和候选模式均不满足此要求。尚未取得本次有效报告时,摘要记录未运行和零条已观测用例。
截图失败怎样处理?
先查看 expected/actual/diff、trace、服务日志与最后观测值。行为或布局错误应修实现;有意改变的界面,审阅图片后更新基线。普通 CI 比较现有基线,缺图记为失败。
怎样手动更新 E2E?
在 Actions 运行 update-e2e.yml。默认 screenshots 模式基于当前代码运行浏览器,生成候选图片、报告和待审 PR,由审阅者决定合并。
工作流开始时固定最新 main 的提交,使用该源码运行完整应用与站点用例。全部通过后,待审 PR 同时提供应用基线候选和八张站点原图。PR 中的图片链接固定到候选提交,可直接在 GitHub 逐张打开;每次采集都记录源码、Actions 运行及 attempt,并核对站点构建清单与图片摘要。
站点原图保存在 tests/e2e/__review__/site/{desktop,mobile}/:home-en-US.png、home-zh-CN.png、guide-en-US.png、guide-zh-CN.png。它们用于人工检查页面布局、文字和阅读体验;应用基线位于 tests/e2e/__screenshots__/,由普通 CI 做截图比较。普通 CI 与 Pages 将站点原图留在本次报告附件中,只有手动 Update E2E 的候选导出会更新仓库中的八张原图。
推送候选分支和创建待审 PR 使用仓库 Actions secret SENSA_PAT,PR 事件自动启动普通 CI。工作流密钥
选择 agent 模式时,还需配置仓库 Actions secret OPENAI_API_KEY。代理维护 tests/e2e/ 中的测试,再运行候选采集。
打开生成的 PR,按语言和视口查看应用的 actual/expected/diff、八张站点原图、测试改动及运行结果。接受有意的界面变化,保留必要行为断言。候选采集与普通比较分别记录;普通比较通过并完成审阅后,再合并 PR。
只需要报告附件时,可手动运行 e2e.yml 的 update_snapshots=true,下载 e2e-baselines 和 e2e-report。失败任务的部分截图用于诊断。
人工和真实环境的边界
按 V1–V6评估层级、字体、分组、配色、对齐和双语完整性。axe 与键盘检查覆盖可自动检测的项目,报告同时保留 incomplete 和未执行项,其余无障碍要求由人工审阅。历史接受范围见视觉评审存档。
Unity 上传、真实 Contacts/OSC、HMD/桌面编码与机械停止另行验收,报告分别注明浏览器、模拟传输和真实环境的验证结果。