Files
cmautobuy/docs/task/115-修复PDD页面和规格面板误超时.md
T
2026-08-10 18:39:49 +08:00

3.7 KiB

115 修复慢速前台查询导致 PDD 页面和规格面板误超时

背景与目标

真机的 app_current() 一次耗时约 10.688 秒,并把已经显示 PDD 的页面错误报告为 系统设置。采购规格面板等待上限为 10 秒,旧实现每轮读取控件树后再查询前台包名, 导致规格面板已经打开仍报 PURCHASE_PANEL_TIMEOUT。采集和采购的商品页等待也有 相同的慢调用风险。本任务改为优先使用最新控件树,保留安全超时和错误分类。

最终方案

  • 采集和采购只在设备连接时读取一次前台状态,商品页轮询不再每轮调用 app_current();连接时确认的 PDD 包名只作为提示,控件树中的 PDD 节点仍是 焦点误报设备的主要依据。
  • 采购规格面板轮询完全使用最新控件树,必须同时识别提交前页面和“增加数量”控件 才允许继续选择规格。
  • 单次控件树读取跨过截止时间时,仍先分析刚返回的结果;真正未打开面板才安全超时。
  • 采购 Adapter 记住当前任务最后一次控件树。面板超时诊断记录页面类型、总读取次数、 面板阶段读取次数,并把脱敏 XML 保存到 data/artifacts/purchase/<goods_id>/。
  • XML 中商品、账号、收货等文字统一替换为“[已脱敏]”,只保留页面判断所需标志。
  • 未修改 Admin API、SQLite、pdd_data、任务状态、规格价格规则和不可逆安全门禁。

改了哪些

  • client/src/pdd_collect_service.py:商品页轮询移除重复前台查询。
  • client/src/pdd_u2_purchase_adapter.py:修复商品页和规格面板等待,增加脱敏诊断。
  • client/test/test_pdd_collect_service.py:覆盖慢速错误焦点和首页受控重开。
  • client/test/test_pdd_u2_purchase_adapter.py:覆盖慢查询、面板成功、真实超时及脱敏文件。
  • docs/client/06-quality-security.md:明确商品页和规格面板轮询规则。

验收结果

验收标准 结果
11 秒慢速前台查询不再耗尽规格面板超时 通过
焦点误报设置页时仍按 PDD 控件树识别 通过
采购规格面板轮询不再调用 app_current() 通过
采集和采购商品页受控重开不被慢查询耗尽 通过
真正未打开面板仍安全失败且不选择规格 通过
超时包含页面类型、读取次数和脱敏 XML 通过
登录、验证码、风控、网络和外部应用分类保持 通过(全量回归)
真实下单安全边界未扩大 通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py"
    • C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py"
    • C:/Python310/python.exe -m unittest discover -s test -p "test_purchase_task_service.py"
    • C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
    • 设置 QT_QPA_PLATFORM=offscreen 后实例化 src.ui_main.MainWindow
  • 结果:专项测试通过;Client 全量 330 个测试通过;离屏启动输出 OK。
  • 没验证到的部分:没有重新执行失败采购任务。真机只读取当前控件树,约 860 ms 正确分类为 order_confirmation;未点击规格、未点击最终提交、未下单、未付款。

相关提交

  • 24f4ad1 fix: 记录规格面板误超时诊断 (#115)
  • 8942385 fix: 采集商品页轮询避开慢速前台查询 (#115)