70 lines
3.2 KiB
Markdown
70 lines
3.2 KiB
Markdown
# #157 Client:兼容新版采购规格面板的确定按钮
|
||
|
||
- 工单号:#157
|
||
- 类型:缺陷
|
||
- 父级:Epic #96、MVP #97
|
||
- 版本:真实采购首单闭环(不支付)
|
||
- 状态:已完成,用户验收通过
|
||
- 日期:2026-08-11
|
||
- Gitea:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/157>
|
||
|
||
## 背景与目标
|
||
|
||
Client 采购商品 `897186799891` 时已经打开规格面板,但页面只有底部“确定”
|
||
按钮,不包含旧版“提交订单/确认购买”等文字。采购代码连续读取面板27次仍把
|
||
页面分类为 `unknown`,最终返回 `PURCHASE_PANEL_TIMEOUT`。
|
||
|
||
目标是在不放宽真实下单安全门禁的前提下,识别这种新版提交前规格面板。
|
||
|
||
## 最终方案
|
||
|
||
1. 只有以下证据位于同一个有界 PDD 面板中时,才接受底部“确定”:
|
||
- “确认款式/确认规格”标题;
|
||
- “已选/请选择”摘要;
|
||
- 颜色、尺码或规格标题;
|
||
- 唯一且有效的数量输入框、减少按钮和增加按钮;
|
||
- 底部唯一、可见、启用、可点击的“确定”按钮。
|
||
2. “确定”没有加入全局提交关键词。普通提示弹窗或散落在全窗口的相似文字
|
||
不会成为提交候选。
|
||
3. 页面等待、状态读取、键盘关闭后复核和一次性提交使用同一个候选函数,避免
|
||
各阶段判断不一致。
|
||
4. dry-run 只识别和复核,不点击底部按钮;live 仍由原流程先持久化不可逆时间,
|
||
再通过窄接口最多提交一次。
|
||
5. 诊断 XML 增加安全语义标记,但具体商品、规格、账号和收货文字仍会脱敏。
|
||
|
||
最终实现与建单方案一致,没有修改数据库、Admin 接口、任务状态或付款逻辑。
|
||
|
||
## 改了哪些文件
|
||
|
||
- `client/src/pdd_u2_purchase_adapter.py`:增加上下文确认面板和“确定”候选识别。
|
||
- `client/test/test_pdd_u2_purchase_adapter.py`:增加新版面板、普通弹窗、dry-run
|
||
和 live 单次点击回归测试。
|
||
|
||
## 验收结果
|
||
|
||
- [x] 本商品的既有真实 XML 被识别为提交前确认页。
|
||
- [x] 得到唯一按钮坐标 `(0, 2067, 1080, 2214)`。
|
||
- [x] 普通“确定”弹窗保持 `unknown`,没有提交候选。
|
||
- [x] 颜色、尺码、数量、价格和唯一按钮复核保持启用。
|
||
- [x] dry-run 不点击“确定”,Fake live 最多点击一次。
|
||
- [x] 现有验证码、登录、风控、支付页和旧版提交按钮测试通过。
|
||
- [x] 采购 Adapter 精确测试、Client 完整测试和语法检查通过。
|
||
- [ ] 用户使用真机重新采购商品 `897186799891` 验收。
|
||
|
||
## 测试
|
||
|
||
在 `client/` 目录执行:
|
||
|
||
```powershell
|
||
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_*.py"
|
||
C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_adapter.py test/test_pdd_u2_purchase_adapter.py
|
||
```
|
||
|
||
结果:采购 Adapter 25项通过,Client 完整399项通过,语法检查通过。对本商品
|
||
既有真实 XML 只读复验得到 `order_confirmation`、数量1、价格817分以及唯一
|
||
“确定”候选。
|
||
|
||
未验证到的部分:未运行真机采购,未点击真实“确定”按钮,未创建订单,未进入
|
||
支付页,也未执行付款。
|