安全设置采购数量并关闭输入法遮挡 #117

Closed
opened 2026-08-10 18:49:14 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:缺陷修复
  • 父级大工单:#1
  • 所属 MVP/版本:Client 采购自动化
  • 阶段:规格选择与下单前校验

要解决什么

采购任务已经选中颜色和尺码后,现有代码无论目标数量是否等于当前数量,都会聚焦数量输入框并调用 set_text。这会弹出安卓输入法,遮挡规格面板底部的下单按钮,后续控件树无法可靠识别按钮,导致采购演练失败。

做什么 / 不做什么

做什么

  • 先读取规格面板当前数量;已经等于目标数量时不操作输入框。
  • 数量差较小时优先点击唯一的“增加数量”或“减少数量”按钮,每次点击后校验数量。
  • 只有数量差较大或加减按钮不可用时才使用输入框。
  • 输入框路径先校验数量,再检测输入法是否确实显示;仅在确认显示时按一次返回键。
  • 等待输入法关闭和规格面板恢复后,重新校验颜色、尺码、数量、价格和唯一的下单按钮。
  • 输入法无法关闭或规格面板丢失时安全终止并返回明确错误码。

不做什么

  • 不点击下单按钮,不执行真实采购。
  • 不修改颜色、尺码选择逻辑。
  • 不修改 Admin 接口、数据库结构和任务数据格式。
  • 不绕过拼多多验证码、风控或安全机制。

已确认的实现方案

  1. 修改 client/src/pdd_u2_purchase_adapter.py 的数量设置流程。
  2. 将 5 次以内的数量差视为“小差值”,优先使用加减按钮;每次从最新控件树重新定位按钮并校验预期数量。
  3. 输入框兜底后通过 dumpsys input_method 判断输入法状态;不能确认输入法显示时不盲目按返回键。
  4. 输入法关闭后重新读取最新控件树;失败时分别返回 PURCHASE_KEYBOARD_DISMISS_FAILED 或 PURCHASE_PANEL_LOST_AFTER_KEYBOARD。
  5. 补充单元测试,覆盖数量相同、加减按钮、输入框与输入法关闭、关闭失败、规格面板丢失等情况。
  6. 在相关 Client 基线文档中补充稳定的数量输入安全约束。

预计修改文件:

  • client/src/pdd_u2_purchase_adapter.py
  • client/test/test_pdd_u2_purchase_adapter.py
  • 相关 docs/client/ 文档(如现有采购安全说明)
  • 完成后归档 docs/task/<工单号>-安全设置采购数量并关闭输入法遮挡.md

验收标准

  • 目标数量等于当前数量时,不聚焦输入框、不弹出输入法。
  • 5 次以内的数量差优先使用加减按钮,并逐次校验数量。
  • 输入框兜底后,仅在确认输入法显示时按一次返回键。
  • 输入法关闭后重新校验已选颜色、尺码、数量、价格和唯一的下单按钮。
  • 输入法无法关闭或规格面板丢失时安全停止,错误信息明确。
  • 现有采购安全门禁保持不变,不点击下单按钮。
  • 相关自动化测试通过。

验证方式

在仓库根目录执行:

C:/Python310/python.exe -m unittest client.test.test_pdd_u2_purchase_adapter
C:/Python310/python.exe -m unittest discover -s client/test -p "test_*.py"

真机验证(需用户执行):选择目标数量为默认值、小差值和较大差值的演练任务,确认输入法不会遮挡后续识别;不得开启真实下单开关。

风险和回退

  • 风险:不同安卓输入法的 dumpsys input_method 输出有差异;只接受明确的“已显示”标记,无法确认时不按返回键并安全终止。
  • 风险:返回键可能关闭规格面板;关闭后必须重新识别规格面板,丢失时不继续下单。
  • 回退:恢复原数量设置实现;真实下单开关仍默认关闭。
## 基本信息 - 类型:缺陷修复 - 父级大工单:#1 - 所属 MVP/版本:Client 采购自动化 - 阶段:规格选择与下单前校验 ## 要解决什么 采购任务已经选中颜色和尺码后,现有代码无论目标数量是否等于当前数量,都会聚焦数量输入框并调用 `set_text`。这会弹出安卓输入法,遮挡规格面板底部的下单按钮,后续控件树无法可靠识别按钮,导致采购演练失败。 ## 做什么 / 不做什么 ### 做什么 - 先读取规格面板当前数量;已经等于目标数量时不操作输入框。 - 数量差较小时优先点击唯一的“增加数量”或“减少数量”按钮,每次点击后校验数量。 - 只有数量差较大或加减按钮不可用时才使用输入框。 - 输入框路径先校验数量,再检测输入法是否确实显示;仅在确认显示时按一次返回键。 - 等待输入法关闭和规格面板恢复后,重新校验颜色、尺码、数量、价格和唯一的下单按钮。 - 输入法无法关闭或规格面板丢失时安全终止并返回明确错误码。 ### 不做什么 - 不点击下单按钮,不执行真实采购。 - 不修改颜色、尺码选择逻辑。 - 不修改 Admin 接口、数据库结构和任务数据格式。 - 不绕过拼多多验证码、风控或安全机制。 ## 已确认的实现方案 1. 修改 `client/src/pdd_u2_purchase_adapter.py` 的数量设置流程。 2. 将 5 次以内的数量差视为“小差值”,优先使用加减按钮;每次从最新控件树重新定位按钮并校验预期数量。 3. 输入框兜底后通过 `dumpsys input_method` 判断输入法状态;不能确认输入法显示时不盲目按返回键。 4. 输入法关闭后重新读取最新控件树;失败时分别返回 `PURCHASE_KEYBOARD_DISMISS_FAILED` 或 `PURCHASE_PANEL_LOST_AFTER_KEYBOARD`。 5. 补充单元测试,覆盖数量相同、加减按钮、输入框与输入法关闭、关闭失败、规格面板丢失等情况。 6. 在相关 Client 基线文档中补充稳定的数量输入安全约束。 预计修改文件: - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_pdd_u2_purchase_adapter.py` - 相关 `docs/client/` 文档(如现有采购安全说明) - 完成后归档 `docs/task/<工单号>-安全设置采购数量并关闭输入法遮挡.md` ## 验收标准 - [ ] 目标数量等于当前数量时,不聚焦输入框、不弹出输入法。 - [ ] 5 次以内的数量差优先使用加减按钮,并逐次校验数量。 - [ ] 输入框兜底后,仅在确认输入法显示时按一次返回键。 - [ ] 输入法关闭后重新校验已选颜色、尺码、数量、价格和唯一的下单按钮。 - [ ] 输入法无法关闭或规格面板丢失时安全停止,错误信息明确。 - [ ] 现有采购安全门禁保持不变,不点击下单按钮。 - [ ] 相关自动化测试通过。 ## 验证方式 在仓库根目录执行: ```powershell C:/Python310/python.exe -m unittest client.test.test_pdd_u2_purchase_adapter C:/Python310/python.exe -m unittest discover -s client/test -p "test_*.py" ``` 真机验证(需用户执行):选择目标数量为默认值、小差值和较大差值的演练任务,确认输入法不会遮挡后续识别;不得开启真实下单开关。 ## 风险和回退 - 风险:不同安卓输入法的 `dumpsys input_method` 输出有差异;只接受明确的“已显示”标记,无法确认时不按返回键并安全终止。 - 风险:返回键可能关闭规格面板;关闭后必须重新识别规格面板,丢失时不继续下单。 - 回退:恢复原数量设置实现;真实下单开关仍默认关闭。
Author
Owner

状态:进行中。

开始检查现有采购 Adapter、控件树固件和测试替身;实现严格限制在数量设置与输入法恢复,不执行真机采购,不点击下单按钮。

状态:进行中。 开始检查现有采购 Adapter、控件树固件和测试替身;实现严格限制在数量设置与输入法恢复,不执行真机采购,不点击下单按钮。
Author
Owner

实现已完成,状态更新为:待验收。

实现提交:b182eff

完成内容:

  • 当前数量等于目标时直接返回,不聚焦输入框。
  • 5 次以内差值逐次点击唯一加减按钮,每次使用最新控件树并校验结果。
  • 大差值/无唯一按钮才使用输入框;仅在 dumpsys input_method 明确显示输入法时按一次返回键。
  • 输入法状态未知、无法关闭或规格面板丢失时安全停止。
  • 输入法路径恢复后重新核对颜色、尺码、数量、价格和唯一提交目标。
  • 未执行真机采购,未点击真实下单按钮。

验证(从 client 目录执行):

  • 专项测试:19 项通过。
  • Client 全量测试:337 项通过。
  • py_compile 与 git diff --check 通过。

待验证:需要用户在真机演练任务中确认所用安卓输入法能够被检测并关闭。

实现已完成,状态更新为:待验收。 实现提交:`b182eff` 完成内容: - 当前数量等于目标时直接返回,不聚焦输入框。 - 5 次以内差值逐次点击唯一加减按钮,每次使用最新控件树并校验结果。 - 大差值/无唯一按钮才使用输入框;仅在 `dumpsys input_method` 明确显示输入法时按一次返回键。 - 输入法状态未知、无法关闭或规格面板丢失时安全停止。 - 输入法路径恢复后重新核对颜色、尺码、数量、价格和唯一提交目标。 - 未执行真机采购,未点击真实下单按钮。 验证(从 `client` 目录执行): - 专项测试:19 项通过。 - Client 全量测试:337 项通过。 - `py_compile` 与 `git diff --check` 通过。 待验证:需要用户在真机演练任务中确认所用安卓输入法能够被检测并关闭。
Author
Owner

本地归档已提交:

  • 归档文档:docs/task/117-安全设置采购数量并关闭输入法遮挡.md
  • 归档提交:036fbfb

工单保持打开,等待用户真机验收;验收通过后再关闭并勾选父工单 #1。

本地归档已提交: - 归档文档:`docs/task/117-安全设置采购数量并关闭输入法遮挡.md` - 归档提交:`036fbfb` 工单保持打开,等待用户真机验收;验收通过后再关闭并勾选父工单 #1。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:32 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#117