# 三维编辑器 E2E 测试报告 ## 当前状态 - 用例状态:已完成测试设计、选择器审查、TypeScript 静态检查和无凭据浏览器烟测。 - 服务状态:Gateway、Auth、Tran 与 Web 已在前台 Windows Terminal 中启动;三个 API 健康检查及 Web 本机/局域网访问均正常。 - 执行状态:**完整 Playwright 业务用例尚未运行**。当前仅缺本机 `E2E_ADMIN_USERNAME`、`E2E_ADMIN_PASSWORD`(或忽略提交的 `.env`)提供的可登录测试账号;不会猜测、重置或在报告中记录密码。 - 本报告不记录账号、密码、访问令牌、请求头或本机绝对资源路径。 ## 验收范围 | 模块 | 验收项 | 自动化方式 | | --- | --- | --- | | 模型编辑器 | 无 iframe、原生 Three.js canvas | DOM 合同断言 | | 模型资源 | 真实 `excavator-a.glb` 上传、进度、服务端保存 | UI + 上传凭证 + SHA-256/长度 + HEAD + Range 206/416 | | 模型编辑 | 节点选择、变换、软删除、刷新后恢复 | 场景树/属性面板 UI + 服务端工程 JSON | | 动画与蓝图 | 新增时间轴关键帧、新增蓝图节点 | 编辑器 DOM + 保存刷新 + 工程 JSON | | 模型发布 | 发布检查、发布状态、精确发布版本 | UI + API 状态 | | 场景编辑器 | 无 iframe、原生 Three.js canvas | DOM 合同断言 | | 真实车间 | 真实车间模板、车间部件软删除/恢复 | UI + 保存刷新 + 工程 JSON | | 场景编排 | 从已发布模型目录放置、变换、设备语义 | UI + 工程 JSON | | 版本依赖 | `SCENE_MODEL` 精确引用项目和发布版本 | API 合同断言 | | 场景发布 | 8 项发布校验与发布状态 | UI + API 状态 | | 清理 | 场景优先、模型随后删除 | `finally` API 清理 + JSON 附件 | ## 最终选择器基线 ### 模型编辑器 - 宿主:`.model-editor-host` - 原生画布:`.render-host canvas` - 上传文件框:`#model-file-input` - 场景树:`#scene-tree [data-object-id]` - 变换值:`[data-vector="position|rotation|scale"]` - 软删除/恢复:`[data-object-delete]`、`[data-action="toggle-deleted"]` - 时间轴:`[data-bottom-tab="timeline"]`、`[data-action="add-key"]` - 蓝图:`[data-bottom-tab="blueprint"]`、`.bp-toolbar [data-command="add"]` - 保存/发布:`[data-action="save"]`、`[data-action="publish"]`、`[data-action="publish-model-asset"]` ### 场景编辑器 - 根节点:`.scene-workspace` - 原生画布:`.viewport-host canvas.scene-editor-canvas` - 左侧页签:`.panel-tabs button` - 已发布模型卡:`.asset-card` - 真实车间模板:`.template-card` - 车间部件:`.tree-row.child` - 部件软删除/恢复:`.danger-zone button.danger`、`.restore-notice button` - 属性变换:`.property-section .vector-field input` - 持久化引用:`.reference-card` - 校验/发布:`.validation-grid`、`.publish-button` ## 自动化边界 Three.js gizmo 的像素坐标会随视口尺寸、相机、模型包围盒和显卡时序变化,因此不把鼠标拖拽作为稳定合同。用例仍通过编辑器自己的属性面板修改同一变换数据,并在保存后读取服务端工程 JSON 二次校验,覆盖真实业务结果。 蓝图自由画布的连线拖拽同样不作为稳定入口;用例通过蓝图工具栏新增节点,保存并刷新后核对节点集合。时间轴使用可定位的 DOM 轨道设置播放头并新增关键帧。 ## 计划生成的关键截图 1. `three-model-native-canvas` 2. `three-model-real-glb-upload-progress` 3. `three-model-soft-delete-persisted` 4. `three-model-transform-timeline-blueprint` 5. `three-model-saved-and-restored` 6. `three-model-published` 7. `three-scene-workshop-part-deleted-after-refresh` 8. `three-scene-published-model-reference` 9. `three-scene-saved-and-restored` 10. `three-scene-eight-checks-passed` 11. `three-scene-published` 截图写入 `artifacts/screenshots`,HTML/JSON 报告同时附带;截图阶段均在登录完成后,不包含登录密码或访问令牌。 ## 执行命令(服务版本确认后) ```powershell pnpm run typecheck pnpm test -- content-authoring.spec.ts ``` ## 执行结果 | 项目 | 结果 | | --- | --- | | TypeScript 静态检查 | 通过 | | 登录页浏览器烟测 | 通过(1440×900) | | Playwright E2E | 待执行 | | 模型工程清理 | 待执行 | | 场景工程清理 | 待执行 | 无凭据烟测截图:`artifacts/final-smoke/login-page.png`。该截图仅验证最终 Web 服务可加载、登录页布局完整、四角色入口与认证服务状态可见,不替代登录后的三维编辑器业务验收。 运行时用例会额外生成 UTF-8 Markdown 执行摘要和 JSON 清理结果附件。工程删除为服务端软删除;SHA-256 内容寻址对象可能被其它版本复用,因此不会做破坏性的物理文件强删。 ## 2026-08-09 编辑器专项烟测 本轮在不使用登录凭据、不修改业务数据的条件下,对 Vite 最终源码执行独立浏览器挂载: - 登录页:局域网访问时管理员角色默认选中,账号输入框显示管理员占位提示。 - 模型编辑器:分别以明亮/暗黑主题挂载原生 Shadow DOM 工作台;1366、1440、1920 三档宽度均无编辑器、顶部工具栏或按钮横向溢出,18 个可见工具按钮全部保留。 - 场景编辑器:在 `isSecureContext=false`、`crypto.randomUUID` 不存在的真实局域网 HTTP 环境中成功生成场景 UUID、挂载 Three.js canvas 和 4 个初始对象。 - 场景历史:修复响应式 Proxy 导致的 `structuredClone` 异常后,浏览器挂载期间无 `randomUUID`、`DataCloneError`、`TypeError` 或未处理异常。 专项截图: 1. `artifacts/final-smoke/login-admin-default.png` 2. `artifacts/final-smoke/model-editor-light-1440.png` 3. `artifacts/final-smoke/model-editor-dark-1920.png` 4. `artifacts/final-smoke/scene-editor-lan-loaded.png` 上述专项烟测验证页面初始化、主题和布局,不替代需要管理员测试凭据的完整创建、服务端保存、刷新恢复与发布 E2E。