Files
ArtPlayer/refactor/docs-browser-testing.md
T

8.6 KiB
Raw Blame History

复用 docs HTML 与在线编辑器进行真实测试

2026-09-10 首次清点时仅核对源码。后续实际运行以各任务证据为准:IFRAME-05 已验证真实iframe页面、Monaco Run和桌面历史导航,见播放器/编辑器记录及缓存/中断记录。保留旧 URL/参数和编辑器功能,补可靠断言、状态隔离和报告,不把演示能打开当作兼容性通过。

入口与实际加载方式

本地路径 源码入口 已有行为 测试用途
/ index.html、common.js Monaco 编辑器;libs 加载额外 JS/CSS,example 读取示例,code 接收代码;Run 重新执行 旧示例、插件组合、重复 Run、错误反馈、编辑器声明与用户交互
/esm.html esm.html import map 加载 compiled 中核心、danmuku、document-pip 与语言包 实际 ESM/资源加载及组合行为
/i18n.html i18n.html compiled 全局脚本和多个语言包,示例选择 id 全局名称、语言注册;需补操作用例验证语言切换
/mobile.html mobile.html uncompiled 核心、mobile.js 与移动 viewport 移动布局、触摸和全屏;实际媒体行为另用真机确认
/iframe.html iframe.html、iframe 示例 uncompiled 核心与 iframe tool,子页面 inject;父示例创建 iframe 并通信 父子通信、全屏及卸载;只打开子页面不能完成集成验收
/test/ test/index.html、build-test.js Mocha/Chai,compiled 核心及部分插件,生成的文档用例与外部播放依赖 文档 smoke 的现有入口,补充状态断言与自动化结果读取

开发入口继续采用仓库脚本:yarn dev 交互选择包,在 http://localhost:8082 验证。dev.js 当前只构建所选包到 docs/uncompiled/<name>/index.js,不能假设所有插件同时更新。正常构建产生分发文件,不手改 compiled/uncompiled/dist 或生成的 test.js。

chapter 试点可使用 http://localhost:8082/?libs=./uncompiled/artplayer-plugin-chapter/index.js&example=chapter,测试前确认核心及插件已构建。这是已有路由的用法,不表示当前服务已启动或页面已通过。

测试前必须固定的状态

  1. 编辑器核心由 localStorage.prod 决定:true 加载 compiled/artplayer.js,否则加载 uncompiled/artplayer/index.js;插件由 libs 决定。Prod 开关不保证插件一并变为生产构建,也不能单靠文件夹名证明是当前候选。
  2. 每次记录核心、插件、语言包和外部 SDK 的实际 URL、版本及产物内容标识。旧/新组合必须有意指定,不能把陈旧构建或误混版本作为候选验收证据。
  3. 独立用例使用隔离测试上下文或测试专属 origin,并明确 prod/ts/code/log 状态。不要清除用户日常 Chrome 的全部存储。单独设置连续 Run 用例,检查多实例全部销毁、监听器/DOM/资源清理及重复加载依赖的影响。
  4. common.js 在移动设备判断成立时转到 mobile.html;报告记录最终 URL,移动页通过不能计作桌面 Monaco 编辑器通过。
  5. TS 模式已由 Monaco worker 先检查语法并生成 JavaScript,再交给执行器;编译失败保留现有播放器。语义诊断不会自动阻止 Run,因此能够运行不等于严格类型检查通过。类型验收继续使用固定版本 tsc、Monaco 语义诊断和真实消费者。
  6. 优先使用许可明确的本地样本。外部 CDN、广告、流媒体和模型请求逐项登记;网络失败与播放器回归区分。受控测试可隔离无关外部请求并记录,实际 SDK 集成保留独立验收,不能一概屏蔽后声称完整通过。

从演示补成可靠回归

现有 build-test.js 从中文文档 Run Code 块提取示例,排除 en/plugin 等目录。生成器通常在执行代码后等待 100ms 调用 done,外层 try/catch 不足以证明异步播放成功;测试页加载了插件也不等于覆盖了全部插件文档。

保留该 smoke 用途,并逐场景补充可失败的语义断言:实际播放时间推进/暂停停止、seek 结果、媒体和播放器事件、字幕及清晰度状态、切源并发、销毁重建。异步等待使用明确事件/状态条件,捕获 error/unhandledrejection,明确清理和超时。生成器改源码后重新生成,不手补生成文件掩盖问题。

在线编辑器兼容用例继续通过实际 Run、键盘和控件交互验证;大量核心状态回归可以复用同一示例和样本在轻量测试页面运行,避免每项测试都依赖 Monaco 初始化。两类用例均保留,不能用轻量页面通过替代编辑器验收。

ENG-05 已提供 yarn test:browser、8084 隔离服务和 ARTPLAYER_BROWSER_ARTIFACTS 文件映射,见 浏览器入口。当前支持 core/chapter 的 compiled/uncompiled 别名,未映射的构建资源明确失败;每次报告保存实际文件 SHA-256。ENG-07 继续负责生成及核验候选 tarball,不能只检查开发 bundle 就批准 npm 发布。

任务归属与验收

IFRAME-05 的 yarn test:iframe-history 使用8085的独立缓存页面及完整Chromium通道, 移除Playwright默认禁用BFCache的参数。原8084配置保持不变。只有父子文档标识连续且 原生pageshow.persisted为true才记为缓存恢复;Firefox/WebKit的reload-control单独计数。 该命令还验证真实停止加载、HTTP 204、截断文档响应和后续导航/销毁,GitHub浏览器任务 运行并上传对应报告。它不替代8082实际分发、完整站点、物理设备或其他缓存引擎的验收。

任务 负责交付
BASE-04 记录上述页面、核心/插件加载路径、存储状态及核心/chapter 的真实行为基线
ENG-05 复用页面/样本,建立隔离状态、受控媒体、错误采集、语义断言和浏览器报告;支持候选资源映射
ENG-07 提供可追溯的候选 tarball 和隔离消费者内容,供页面验收复用
SITE-01 核对编辑器、声明注入、示例和生成链的完整清单
SITE-02 修正文档测试生成流程,区分 smoke 与行为测试,不伪造异步通过
EX-03 全量验收旧页面/参数、编辑器 Run、ESM/i18n/mobile/iframe 和外部播放集成
REVIEW-02/03 分别复查真实浏览器覆盖与待发布内容的一致性

页面行为和媒体验证按 测试规范 留证,发布结论按 多轮复盘 核对。该清单不新增重复实施任务;真实状态以 tasks.json 为准。

BASE-04 已落地的记录

完整路径台账 已覆盖 29 个示例、36 个 HTML 和 22 包,包括生成文档、独立 upscaler 与站点验证页面。源脚本/菜单参数与 editor prod/ts/code/log 规则已有记录;这些官方入口尚未运行,运行时实际存储值和网络来源仍待 EX-03 采集。

以上是冻结的 BASE-04 快照。新增页面和示例应写入 增量台账,不得重拍历史快照来消除覆盖失败。 当前增量包含 asr.local 示例和九个生成文档 HTML,合计30示例、45 HTML。 每个新增HTML登记 source、对应route、引入依据、责任task和finalDemoOwner。 已提交页面用introducedBy记录实际引入commit;与页面同次提交的新记录用introducedAfter 记录修改前的HEAD,配合owner任务追踪引入,避免要求提交包含自身未来的Git哈希。 两字段只能选一项;introducedAfter只是起点,不代表实际引入commit已确定。 运行 node refactor/scripts/demos.mjs --check 以及 node --test refactor/scripts/demos.test.mjs; 校验保留所有历史路径,并拒绝未登记、重复、越界或缺少责任的新增页面。 提交来源在登记时用Git核实;校验器检查提交ID格式,不把它当作已完成语义审查。 各指南的实际浏览器结果保留在各自任务证据中;路径登记本身不新增浏览器通过结论。

独立发布包夹具的 DOM/CSS、Tab/热键、设置与网页全屏已在内置浏览器两次实测,见 覆盖及问题。它没有运行 Monaco,不代表编辑器 Run 或官方 chapter demo 通过。thumbnail 无菜单示例依赖不在当前 workspace 的旧插件,已交 SITE-01/EX-03 核实。