You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9.0 KiB
9.0 KiB
票 04 — Agent 浏览器自测报告(opportunity-acceptance)
- 执行时间:2026-08-31 15:20 ~ 16:12(多轮:诊断 → 修复 → 复测,终轮全绿)
- 被测对象:
.scratch/opportunity-e2e/demo/index.html(file:// 打开,AJAX 直连localhost:8080)× verify 后端(fat jar,远程 DB 8.129.84.155/crm,MinIO 凭据注入) - 自动化:Playwright(headless Chromium 1440×900),脚本
accept-selftest.py(本目录),结果selftest-result.json,截图shots/accept-*.png - 终轮结果:31/31 PASS,0 FAIL,page_errors 0,console_errors 0
一、结论
「后端修复可信、测试全绿、Demo 可演示」三条件在浏览器 UI 层面全部成立:
- 后端修复可信(与票 01 白盒 / 票 02 E2E 相互印证):
- D-01(opportunity-fix 口径)UI 端到端验证:新建商机 → toast 含 id → 直达详情 → 阶段进度 5 节点、落首阶段 CURRENT(accept-22;库证 progress nodes=[CURRENT,PENDING×4]);
- 六必填(D-14)前端拦截 errbox 逐字段提示与后端 66001 同款(accept-21);
- 状态机 E4/E5:暂缓 → badge=暂缓中(accept-24),取消暂缓 → badge=推进中(accept-25),两次均有库证(oppStatus 2→3→2)。
- 测试全绿:31 断言全过,全程 0 页面异常、0 console error。
- Demo 可演示:列表多视图 / 看板 / 详情九子表 / 工作计划 / 规则三族 / 用户切换全功能面可操作;20260829 四修复点无回归。
二、自测发现并修复的 3 个 Demo 缺陷(本轮核心价值)
前序 effort(票 02 E2E 为 API 级、票 03 subapi 为 requests 直测)均未覆盖的 UI 集成面缺陷,本轮浏览器自测暴露,已当场修复并复测:
| # | 缺陷 | 根因 | 修复 | 复测 |
|---|---|---|---|---|
| demo-B1 | 切视图后列表显示空页/错误页码(如公海显示「共 3 条 · 第 2 页」且无数据) | pickView/查询切换后 S.total 残留旧视图值,loadList(1) 用旧 total 误自动翻页 |
pickView、onCview、查询按钮三处补 S.total = 0(查询同时重置 S.page=1) |
accept-03 第 1 页 3 条 ✓、accept-04 筛选 2 行 ✓ |
| demo-B2(高危) | 全部无返回值写端点在 UI 上静默失败:暂缓/恢复/领取/分配/关闭/重启/移交/抛公海/切阶段/关注/编辑/存视图/规则发布·停用·删除等,点击后请求成功但页面无任何反应(框不关、无成功 toast、不刷新),人工会误判为功能故障并重复点击触发业务错 | 成功判定 await tryApi(step, fn) != null:这些端点响应 data=null(实锤 {"code":0,"success":true,"data":null}),api() 返回 null → 判定 false → 成功路径被跳过 |
新增 okApi(「不抛错即成功」,失败 err toast),替换 19 处判定(fix-demo-b2.py 留档) |
暂缓/恢复 UI 闭环 ✓(accept-24/25,badge 实时变化) |
| demo-B3 | 新增/编辑工作计划:浏览器分钟精度 deadline(2026-09-02 10:00)被后端拒绝(DTO @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 强制带秒),保存报错,人工演示必踩 |
doWorkPlanSave 未补秒 |
dl.length === 16 ? dl + ':00' : dl |
accept-17~20 工作计划全闭环 ✓ |
修复后全量复跑 31/31 全绿。demo 三处修复均为前端改动,不触碰已验收的后端。
三、断言清单与截图索引
| # | 断言 | 结果 | 证据 |
|---|---|---|---|
| 00 | 启动自动登录(管理员罗伟健) | PASS | whoBox 文本 |
| 01 | 列表-我负责的(admin,1 条) | PASS | accept-01 |
| 02 | 列表-管理全量(14→17 条,随自测新增递增) | PASS | accept-02 |
| 03 | 列表-公海(3 条待领取,第 1 页) | PASS | accept-03 |
| 04 | 关键词筛选「智慧园区」(2 行全命中) | PASS | accept-04 |
| 05 | 看板汇总(阶段节点渲染) | PASS | accept-05 |
| 06 | 详情总览 + 阶段进度 5 节点(e2e-A-二期) | PASS | accept-06 |
| 07 | 跟进子表 toolbar(20260829 修复点①) | PASS | 同 08 截图 |
| 08 | 写跟进成功 + loadDetail 刷新最近有效跟进锚点(修复点③;15:47:07→16:10:28 库证) | PASS | accept-08 |
| 09 | 勘察子表 toolbar(修复点①) | PASS | accept-09 |
| 10 | 关联客户(3 条) | PASS | accept-10 |
| 11 | 团队成员(3 条) | PASS | accept-11 |
| 12 | 方案卡详情 d.fields 键值 8 项(修复点②) | PASS | accept-12 |
| — | 方案卡列表(3 卡) | — | accept-13 |
| 14 | 附件(空态文案正确) | PASS | accept-14 |
| 15 | 操作日志分形态渲染(修复点④,4329 字符) | PASS | accept-15 |
| 16 | 阶段历史 | PASS | accept-16 |
| 17 | 工作计划入口(票 03 接入) | PASS | 同 18 截图 |
| 18 | 工作计划三形态实时判定(badge 逾期/临期/进行中) | PASS | accept-17 |
| 19 | 登记完成 + finishTime 服务端回填 | PASS | accept-18 |
| 20 | 编辑部分更新 | PASS | accept-19 |
| 21 | 删除软删(列表消失 + 库证) | PASS | accept-20 |
| 22 | 新建-六必填前端拦截(errbox 6 字段) | PASS | accept-21 |
| 23 | 新建成功直达详情落首阶段 5 节点(D-01) | PASS | accept-22 |
| 24 | 暂缓对话框(E4,原因下拉字典化) | PASS | accept-23 |
| 25 | 暂缓成功(badge=暂缓中) | PASS | accept-24 |
| 26 | 取消暂缓(badge=推进中) | PASS | accept-25 |
| 27 | 规则-公海与提醒族 | PASS | accept-26 |
| 28 | 规则-商机阶段设置(OPP_STAGE_TPL_01 预设模板在列,64018 保护对象可见) | PASS | accept-27 |
| 29 | 规则-方案卡模板(24 行) | PASS | accept-28 |
| 30 | 规则详情对话框(版本/状态/节点·字段明细) | PASS | accept-29 |
| 31 | 切换用户 A 赖永利(数据权限视图) | PASS | accept-30 |
四、已知形态(非缺陷,人工验收预期管理)
- 阶段历史行显示原始 stageId(
→ 7478313028):seed 直插历史的 fromStageName/toStageName 快照为空,demo 回退显示 id——seed 数据形态,非渲染缺陷; - 附件 Tab 空态:上传依赖 MinIO(F08 ⚠ 外部依赖),E2E 单独验证过;
- 关联客户/团队成员的 demo 写入口缺失(后端六端点已修复=票 04,demo 前端未实现添加/编辑按钮,仅只读展示);
- 页面顶部 D-xx mark 徽标为写死的过时标注:对应后端缺陷已在 bugfix effort 全部闭环(19 修 + 3 翻案 D-08/18/19),徽标仅提示历史缺陷位置,非现存缺陷(现存问题总清单见 acceptance-checklist.md §四);
五、测试数据留存(无碍 E2E 基线)
- e2e-A-推进-智慧园区二期:新增 3 条 accept-自测跟进(lastValidFollowTime=最新一条,状态未动);
- demo-验收-新建闭环:wp 已清空(三形态闭环建→完成→编辑→删验证后清理);
- 新建 3 个商机:accept-自测-新建{3 个时间戳}(终轮 id=749662392819908608,暂缓→已恢复=推进中);
- 全部数据以 accept- 前缀命名,不影响 seed v2 基线与后续 E2E 重跑(seed 全量重置可清)。
六、复跑方式
python -X utf8 .scratch\opportunity-acceptance\accept-selftest.py
前置:后端 8080 在跑(起服命令见 map.md 环境节);WP_OPP(demo-验收-新建闭环)的 wp 为空(脚本自建自清,异常中断后手工清理即可)。
附:过程文件
accept-selftest.py:终版自测脚本(Python 轮询等待,31 断言)fix-demo-b2.py:demo-B2 修复脚本(okApi + 19 处判定替换,含替换前原文)fix-wait-helpers.py:自测脚本等待机制改造脚本(wait_for_function → Python 轮询)probe-wff.py/check-syntax.py:诊断与语法检查辅助selftest-result.json:终轮机器可读结果