fix: capture invalid product toast and close failed tabs

This commit is contained in:
chengma
2026-07-02 21:46:32 +08:00
parent f3e0956cf6
commit b9f614b8e7
11 changed files with 378 additions and 28 deletions
+28 -1
View File
@@ -1045,4 +1045,31 @@
- 边界:只清空 GUI 文本显示,不删除 SQLite `run_logs/run_log_events` 或本地 `logs/`;未改 AI HTTP、DB schema、Excel、Shopee/CDP 更新流程。
- 测试:更新 `tests/test_gui.py`,覆盖②/③进入页面不自动混入历史日志,以及②开始生成、③检查/真实更新启动时旧日志被清掉且本轮摘要出现。
- 文档:`docs/06-tasks.md` 将 T-523a 标为 DONE;同步 `docs/current-state.md`,下一个可领取任务更新为 T-524。
- 验证:`python -m unittest discover -s tests -p "test_gui.py"` 通过(72 tests)。
- 验证:`python -m unittest discover -s tests -p "test_gui.py"` 通过(72 tests)。
## 【2026-07-02】文档 · T-404b 商品详情页加载失败 toast 自动捕获
- 需求:商品 ID 失效、无权限或店铺不匹配时,Shopee 商品详情页可能只弹出很快消失的错误 toast,例如 `please input correct product id`;用户来不及复制 HTML,当前错误也可能只表现为商品详情页等待超时。
- 方案:新增 T-404b。`open_product()`/等待商品详情页就绪前安装或启用 `.eds-toasts .eds-toast__content` 捕获,保存 toast 文本、`outerHTML`、当前 URL、时间和可见状态;详情页关键元素超时或页面不符合商品编辑页时,把最近错误 toast 上浮到 `tasks.last_error`、`run_logs/run_log_events`、③/①可见日志和本地 `logs/` 诊断日志。可保存失败现场 HTML/toast JSON,禁止记录 Cookie、密码、token。
- 文档:同步 `docs/02-requirements.md`、`docs/04-architecture.md`、`docs/routes.md`、`docs/api.md`、`docs/06-tasks.md`、`docs/current-state.md`;当前下一个可领取任务改为 T-404b。
- 验证:文档-only 更新,未运行单元测试。
## 【2026-07-02】文档补充 · T-404b 商品失效显示边界
- 需求补充:用户确认①导入采集列表可以在商品 ID 失效时显示更直观的“商品失效”,但必须确认不会影响②AI生成、③更新shopee、进度统计和 Excel 回写。
- 决策:只做 UI 显示映射,不新增或改写数据库 `stage` 枚举。捕获到明确商品失效/商品不存在/无权限类 toast 时,任务底层保持 `stage=imported/status=failed/last_error=商品失效:<原始toast>`,①列表“阶段”列显示“商品失效”;网络、CDP、未登录、页面超时、风控等其他打开失败仍显示“失败”。
- 文档:同步 `docs/02-requirements.md`、`docs/04-architecture.md`、`docs/routes.md`、`docs/api.md`、`docs/06-tasks.md`、`docs/current-state.md`。
- 验证:文档-only 更新,未运行单元测试。
## 【2026-07-02】T-404b 完成 · 商品详情页加载失败 toast 自动捕获
- 代码:`app/editor.py` 在 `open_product()` 导航商品详情页前后安装 toast 观察器,缓存最近 toast 的文本、HTML、URL、可见状态和时间;`_wait_ready()` 超时或检测到失效 toast 时,将商品失效/商品不存在/无权限类文案上浮为 `商品失效:<原始toast>`,其他打开失败仍保持普通失败原因。
- GUI:①导入采集任务表只在 `last_error` 明确包含商品失效类错误时把“阶段”列显示为“商品失效”;底层 DB 不新增 stage 枚举,仍保持 `stage=imported/status=failed`,其他超时、网络、登录、风控类错误仍显示“失败”。
- 测试:`tests/test_editor_login.py` 覆盖隐藏 toast 捕获、失效 toast 错误上浮和 open_product 安装观察器;`tests/test_gui.py` 覆盖只有明确失效错误才显示“商品失效”。
- 验证:已通过相关测试;全量验证见本轮最终结果。
## 【2026-07-02】文档补充 · T-404b 商品失效失败 tab 清理
- 问题:商品 ID 失效时,`_wait_ready()` 在 `open_product()` 内部抛出 `商品失效:...`,上层 `collect()` / `apply_task()` 尚未拿到 `cdp`,因此上层 finally 无法关闭本轮自动新建的商品 tab。
- 方案:补充 T-404b 边界。`open_product()` 如果在返回 `cdp` 前失败,要自行清理:本轮自动新建 tab 先断开 CDP 再调用 `close_tab(target_id, host=...)`;复用用户原本打开的 tab 只断开 CDP,不关闭页面。进入编辑页后的更新失败仍按原设计保留现场。
- 文档:同步 `docs/02-requirements.md`、`docs/04-architecture.md`、`docs/routes.md`、`docs/api.md`、`docs/06-tasks.md`、`docs/current-state.md`。
- 验证:文档-only 更新,未运行单元测试。
## 【2026-07-02】T-404b 补丁完成 · 商品失效失败 tab 自动清理
- 代码:`app/editor.py` 新增 `open_product()` 内部失败清理。若 `_wait_ready()` 因商品失效 toast 或其他打开页异常在返回 `cdp` 前抛错,会先断开 CDP;本轮自动新建的商品 tab 继续调用 `close_tab(target_id, host=...)` 关闭,复用用户已有 tab 不关闭。
- 边界:只处理 `open_product()` 内部打开失败导致的残留 tab;进入编辑页后的更新失败仍按原设计保留现场,成功提交后的关闭仍受 ⑤ `close_success_tab` 控制。
- 测试:`tests/test_editor_login.py` 增加自动新建 tab 商品失效时关闭、复用 tab 商品失效时不关闭的覆盖。
- 验证:`python -m unittest discover -s tests -p "test_editor_login.py"` 通过(36 tests)。