Client:修复自绘颜色行与款式节点导致的安全点击误判 #270

Open
opened 2026-08-18 16:37:16 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#96(Client Epic #1)
  • 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环
  • 阶段:规格面板颜色区域兼容
  • 依赖:#264、#268

要解决什么

采购目标颜色为长繁体文字时,PDD 规格面板是没有 scrollable 属性的自绘横向颜色行,且同一行存在文本“款式”。Client 可能把颜色选项“款式”误判为颜色分类标题,导致颜色区域坐标错误;目标颜色虽在控件树中,却被判定为没有完整安全点击位置,报错 PURCHASE_OPTIONS_MISMATCH。

本地诊断 XML 显示目标卡片在 [36,1081][216,1134],同一行另有“款式”节点,颜色行没有 scrollable=true。

做什么 / 不做什么

  • 做:修正标题与颜色选项识别;为无滚动属性的自绘颜色行使用目标卡片和父级点击行计算安全区域;目标完整可见时按原始页面文字对应坐标点击;保留繁简归���化比较、原文点击和繁简歧义停止;增加脱敏 XML 回归测试。
  • 不做:不改颜色/尺码原始数据,不取消安全检查,不使用盲点;不改 Admin、数据库、数量、价格、地址、下单、不可逆门禁;不自动重试采购。

怎么做

  1. 区分规格标题节点和颜色选项节点,结合可点击属性、父级布局和颜色行结构判断标题。
  2. 优先使用目标节点最近完整点击卡片与横向颜色行边界计算安全区域。
  3. normalize_spec_text 只用于比较;点击、保存、候选和审计继续使用原始文字。
  4. 用最小脱敏 XML 覆盖长繁体颜色、同名“款式”、无滚动属性、自绘颜色行、繁简等价和歧义。

验收标准

  • 同行存在“款式”颜色选项时,不再误判颜色分类标题。
  • 无 scrollable=true 的自绘颜色行中,完整可见目标颜色可安全点击并确认。
  • 长繁体目标可匹配页面原文,点击和保存仍使用原始文字。
  • 繁简归一化后有多个候选时仍停止并报告歧义。
  • 既有简体颜色、尺码、套餐和多行颜色测试通过。
  • 数量、价格、地址、不可逆下单和只读核单门禁不变。
  • Python 3.10 单元测试、脱敏 XML 回归和离屏 UI 冒烟通过。

怎么验证

从 client 目录执行:
C:/Python310/python.exe -m pytest test/test_pdd_u2_purchase_adapter.py test/test_select_color_size.py -q
C:/Python310/python.exe -m py_compile src/util/select_color_size.py src/pdd_u2_purchase_adapter.py

真实 Android 回归需单独记录,不执行自动付款。

风险和回退

错误扩大区域可能点击其他控件;只有目标卡片完整、唯一且位于颜色行内才允许点击,否则继续安全失败。繁简等价产生多个候选时停止。回退为恢复旧安全失败路径,保留诊断和历史记录。

## 基本信息 - 类型:缺陷 - 父级大工单:#96(Client Epic #1) - 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环 - 阶段:规格面板颜色区域兼容 - 依赖:#264、#268 ## 要解决什么 采购目标颜色为长繁体文字时,PDD 规格面板是没有 scrollable 属性的自绘横向颜色行,且同一行存在文本“款式”。Client 可能把颜色选项“款式”误判为颜色分类标题,导致颜色区域坐标错误;目标颜色虽在控件树中,却被判定为没有完整安全点击位置,报错 PURCHASE_OPTIONS_MISMATCH。 本地诊断 XML 显示目标卡片在 [36,1081][216,1134],同一行另有“款式”节点,颜色行没有 scrollable=true。 ## 做什么 / 不做什么 - 做:修正标题与颜色选项识别;为无滚动属性的自绘颜色行使用目标卡片和父级点击行计算安全区域;目标完整可见时按原始页面文字对应坐标点击;保留繁简归���化比较、原文点击和繁简歧义停止;增加脱敏 XML 回归测试。 - 不做:不改颜色/尺码原始数据,不取消安全检查,不使用盲点;不改 Admin、数据库、数量、价格、地址、下单、不可逆门禁;不自动重试采购。 ## 怎么做 1. 区分规格标题节点和颜色选项节点,结合可点击属性、父级布局和颜色行结构判断标题。 2. 优先使用目标节点最近完整点击卡片与横向颜色行边界计算安全区域。 3. normalize_spec_text 只用于比较;点击、保存、候选和审计继续使用原始文字。 4. 用最小脱敏 XML 覆盖长繁体颜色、同名“款式”、无滚动属性、自绘颜色行、繁简等价和歧义。 ## 验收标准 - [ ] 同行存在“款式”颜色选项时,不再误判颜色分类标题。 - [ ] 无 scrollable=true 的自绘颜色行中,完整可见目标颜色可安全点击并确认。 - [ ] 长繁体目标可匹配页面原文,点击和保存仍使用原始文字。 - [ ] 繁简归一化后有多个候选时仍停止并报告歧义。 - [ ] 既有简体颜色、尺码、套餐和多行颜色测试通过。 - [ ] 数量、价格、地址、不可逆下单和只读核单门禁不变。 - [ ] Python 3.10 单元测试、脱敏 XML 回归和离屏 UI 冒烟通过。 ## 怎么验证 从 client 目录执行: C:/Python310/python.exe -m pytest test/test_pdd_u2_purchase_adapter.py test/test_select_color_size.py -q C:/Python310/python.exe -m py_compile src/util/select_color_size.py src/pdd_u2_purchase_adapter.py 真实 Android 回归需单独记录,不执行自动付款。 ## 风险和回退 错误扩大区域可能点击其他控件;只有目标卡片完整、唯一且位于颜色行内才允许点击,否则继续安全失败。繁简等价产生多个候选时停止。回退为恢复旧安全失败路径,保留诊断和历史记录。
Author
Owner

#270 已完成实现,现进入待验收。

实现

  • 对无 scrollable 属性的自绘横向颜色行,优先从目标颜色节点向上识别完整父级点击行。
  • 避免把同一行颜色选项“款式”误判为规格标题。
  • 繁简归一化仍只用于比较,实际点击和保存继续使用原始规格文字。
  • 增加长繁体颜色、同名“款式”节点和无滚动属性的脱敏 XML 回归测试。

验证

  • 规格选择与采购适配器测试:84 passed。
  • Client 全量测试:533 passed,2 failed;失败为现有版本号 0.1.3 与旧测试期望 0.1.0 不一致,与本工单无关。
  • Python 编译检查通过。
  • PyQt5 离屏 MainWindow 检查通过。
  • 真机和真实 Admin 端到端验证未执行,未执行自动付款。

提交与归档

  • 实现:e2ed00c38c0e98afbcd2f08940dec0c1b7861aa0
  • 归档:ee05a063ad20d395a38459b8fbc10184157d82d3
  • 文档:docs/task/270-client自绘颜色行安全点击误判.md

请验收后再关闭工单。

#270 已完成实现,现进入待验收。 ## 实现 - 对无 scrollable 属性的自绘横向颜色行,优先从目标颜色节点向上识别完整父级点击行。 - 避免把同一行颜色选项“款式”误判为规格标题。 - 繁简归一化仍只用于比较,实际点击和保存继续使用原始规格文字。 - 增加长繁体颜色、同名“款式”节点和无滚动属性的脱敏 XML 回归测试。 ## 验证 - 规格选择与采购适配器测试:84 passed。 - Client 全量测试:533 passed,2 failed;失败为现有版本号 0.1.3 与旧测试期望 0.1.0 不一致,与本工单无关。 - Python 编译检查通过。 - PyQt5 离屏 MainWindow 检查通过。 - 真机和真实 Admin 端到端验证未执行,未执行自动付款。 ## 提交与归档 - 实现:e2ed00c38c0e98afbcd2f08940dec0c1b7861aa0 - 归档:ee05a063ad20d395a38459b8fbc10184157d82d3 - 文档:docs/task/270-client自绘颜色行安全点击误判.md 请验收后再关闭工单。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#270