3.8 KiB
3.8 KiB
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.pyC:/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.pyC:/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增强双微信选择器识别。