Files
cmautobuy/docs/task/178-兼容非滚动图片颜色采购选择.md
T

55 lines
3.0 KiB
Markdown

# 178 兼容非滚动图片颜色卡片的采购选择
- 类型:缺陷
- 父级大工单:#1
- 所属 MVP / 版本:#2
- 状态:已完成,用户验收通过
- 日期:2026-08-12
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/178>
## 背景与目标
采购非滚动自绘规格面板时,代码使用固定高度估算颜色区域。较高的图片颜色卡片被区域下边界截断,安全校验拒绝点击,随后又执行无意义的横向滑动,最终误报“没有精确选中颜色”。本任务在保留精确匹配和点击后确认的前提下兼容这类卡片。
## 最终方案
- 目标没有可滚动祖先但已经出现在当前树时,使用完整可点击卡片、颜色标题、下一规格标题和屏幕边界计算静态颜色区域。
- 左右部分露出或纵向越过下一规格标题的卡片仍拒绝点击。
- 静态目标点击后未确认时立即失败,不再盲目横向滑动;明确滚动容器仍使用原左右扫描。
- 点击后继续要求最新控件树提供 `selected/checked` 或“已选”摘要,不能以发出点击代替成功。
- Adapter 区分目标不可见、缺少安全坐标和点击后未确认,并在失败时保存脱敏控件树。
## 改了哪些
- `client/src/util/select_color_size.py`:增加静态图片颜色区域、安全坐标计算、停止条件和失败阶段诊断。
- `client/src/pdd_u2_purchase_adapter.py`:输出准确错误并保存脱敏选项失败控件树。
- `client/test/test_select_color_size.py`:覆盖高图片卡片成功、未确认、部分露出和越过尺码标题。
- `client/test/test_pdd_u2_purchase_adapter.py`:覆盖错误原因和脱敏诊断文件。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 完整显示的非滚动高图片卡片可以生成安全坐标 | 通过 |
| 点击后必须由最新树确认选中 | 通过 |
| 静态目标可见时不执行横向滑动 | 通过 |
| 部分露出或越过下一规格标题仍拒绝点击 | 通过 |
| 失败原因明确且保存脱敏诊断 | 通过 |
| 尺码选择及采购不可逆门禁不变 | 通过 |
| Client 全量测试通过 | 通过 |
## 测试
- 执行的命令:在 `client` 目录执行 `C:/Python310/python.exe -m unittest discover -s test -p 'test_select_color_size.py'`
- 结果:4 个颜色选择测试全部通过。
- 执行的命令:在 `client` 目录执行 `C:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_u2_purchase_adapter.py'`
- 结果:29 个采购 Adapter 测试全部通过。
- 执行的命令:在 `client` 目录执行 `$env:QT_QPA_PLATFORM='offscreen'; C:/Python310/python.exe -m unittest discover -s test -p 'test_*.py'`
- 结果:447 个 Client 测试全部通过。
- 额外验证:手机当前控件树只读计算得到藏青色卡片 `[36,1188][352,1591]`,唯一中心点 `(194,1389)`;未点击手机。
- **没验证到的部分**:未在真机重新执行采购;未进行任何真实下单或不可逆操作。
## 相关提交
- `cd9c552` fix: 兼容非滚动图片颜色采购选择 (#178)