docs: 归档任务 #263
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# 263 增强双微信系统选择器识别并安全返回 PDD
|
||||
|
||||
- 类型:缺陷
|
||||
- 父级大工单:#96
|
||||
- 所属 MVP / 版本:#97 真实采购首单闭环(不支付)
|
||||
- 状态:已完成
|
||||
- 日期:2026-08-18
|
||||
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/263>
|
||||
|
||||
## 背景与目标
|
||||
|
||||
真实采购提交订单后按设计进入只读核单。真机显示两个微信候选的 Android 应用选择器时,#261 的识别没有命中,代码尝试启动 PDD 后仍被选择器覆盖,最终以 `RECONCILE_ORDER_PAGE_TIMEOUT` 转人工。
|
||||
|
||||
本任务增强选择器识别,兼容混合节点包名、重复无障碍值和 Android Resolver 变体;证据完整时仍只按一次返回键,绝不选择微信、点击支付或重新下单。
|
||||
|
||||
## 最终方案
|
||||
|
||||
- 分别读取每个节点的 `text` 和 `content-desc`,不再使用拼接标签做精确判断。
|
||||
- 使用白名单标题和以“微信”开头的候选名称识别页面语义,兼容微信分身的显示名称差异。
|
||||
- 页面语义命中后读取 `app_current()`,同时校验 Android 标准 Resolver 包和 `ChooserActivity` / `ResolverActivity` 精确值或安全后缀。
|
||||
- 选择器判断先于 PDD 控件树判断,兼容选择器与底层 PDD 节点同时出现在控件树中的情况。
|
||||
- 可信选择器最多按一次返回;一次返回后仍存在时返回 `RECONCILE_ANDROID_CHOOSER_STUCK`,前台系统组件不可信时返回 `RECONCILE_ANDROID_CHOOSER_UNRECOGNIZED`。
|
||||
- 保留原外部应用恢复、登录/验证/风控停止和 PDD 支付页一次返回规则。
|
||||
|
||||
最终实现与建单方案一致,没有修改订单提交、`PURCHASE_OUTCOME_UNKNOWN`、数据库、Admin 接口或存量任务。
|
||||
|
||||
## 改了哪些
|
||||
|
||||
- `client/src/pdd_u2_purchase_reconcile_adapter.py`:重构选择器语义和前台组件证据,调整判断顺序并保留一次返回门禁。
|
||||
- `client/test/test_pdd_u2_purchase_reconcile_adapter.py`:增加混合包名、重复 `text/content-desc`、微信名称变体和独立 Resolver 包测试。
|
||||
- `docs/client/06-quality-security.md`:同步多微信选择器的组合证据及安全返回规则。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 混合节点包名和底层 PDD 节点存在时仍识别选择器 | 通过 |
|
||||
| `text/content-desc` 重复时仍识别标题和微信候选 | 通过 |
|
||||
| Android 标准 Resolver 包、标题和 Activity 变体通过 | 通过 |
|
||||
| 前台 package/activity 不可信时停止且不按返回 | 通过 |
|
||||
| 未知系统页面不触发返回,普通外部跳转保持兼容 | 通过 |
|
||||
| 一次返回后选择器仍存在时停止,不重复返回 | 通过 |
|
||||
| 不选择微信、不点击支付、不重新下单或付款 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行的命令:
|
||||
- `C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_reconcile_adapter.py test/test_pdd_u2_purchase_reconcile_adapter.py`
|
||||
- `C:/Python310/python.exe -m pytest -q --disable-warnings test/test_pdd_u2_purchase_reconcile_adapter.py test/test_purchase_recovery.py test/test_purchase_task_service.py`
|
||||
- `C:/Python310/python.exe -m pytest -q test`
|
||||
- 设置 `QT_QPA_PLATFORM=offscreen` 后创建 `MainWindow`。
|
||||
- 结果:语法检查通过;定向测试 47 项全部通过;完整 Client 测试 513 项通过、2 项与本工单无关的既有版本号断言失败;离屏界面冒烟输出 `OK`。
|
||||
- **没验证到的部分**:未连接真机执行继续核单。诊断时 ADB 服务因客户端版本不一致自动重启,设备当前需要重新确认调试授权;没有重新提交订单、触发支付或修改 `cg46` 数据。
|
||||
|
||||
## 遗留问题
|
||||
|
||||
- 真机确认 ADB 调试授权后,需要通过 #262 的同一入口对已提交订单执行一次“继续核单”验收。
|
||||
- 工作区 Client 版本为 `0.1.2`,两项更新模块测试仍固定期待 `0.1.0`,不属于本工单范围。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `2a0c17a` 增强双微信选择器识别。
|
||||
Reference in New Issue
Block a user