稳定地址表单后单次点击保存 #191

Closed
opened 2026-08-12 17:46:34 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环
  • 阶段:正式采购地址更新稳定性

要解决什么

正式采购任务 cg16 修改详细地址后点击保存,但保存动作没有生效。Client 随后按现有逻辑轮询约 10 秒,最后仍识别为地址编辑页并报告 PURCHASE_ADDRESS_PAGE_TIMEOUT。诊断确认不是保存后完全没有等待,而是输入后只等待 0.2 秒便立即点击,地址表单或保存按钮可能尚未稳定;保存按钮按安全规则只点击一次,因此单次点击丢失后只能超时。

复现结果:期望页面为 saved,最后页面为 edit,未出现 ColorOS 密码浮层,也未执行系统返回。

做什么 / 不做什么

  • 做:保存前连续确认详细地址、编辑页和唯一保存目标稳定;稳定后短暂等待并再次校验,只点击保存一次;保存后沿用现有有界轮询;一直停留编辑页时返回更准确的错误和无个人数据诊断。
  • 不做:不重复点击保存;不修改地���后缀规则;不修改返回地址面板、提交订单、不可逆门禁、数据库或 Admin 接口。

怎么做

  1. 在 client/src/pdd_u2_purchase_adapter.py 增加保存前稳定读取方法:连续两次读取到目标详细地址完全一致、页面为编辑页、保存按钮唯一且坐标相同,才认为可保存。
  2. 两次稳定读取之间使用现有短轮询间隔;达到稳定条件后短暂等待约 0.3 秒,再读取一次并重新验证地址和保存目标未变化,然后单次点击。
  3. 保存后的 _wait_after_address_save() 保留现有最长约 10 秒、每 0.2 秒读取一次的等待逻辑,不使用长时间固定 sleep。
  4. 保存后超时时,如果最后仍是编辑页,返回 PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE 和“点击保存后仍停留在地址编辑页”;其他未知页面继续使用 PURCHASE_ADDRESS_PAGE_TIMEOUT。
  5. 诊断只记录稳定读取次数、保存目标数量、最后页面和浮层/返回次数,不记录地址原文。
  6. 在 client/test/test_pdd_u2_purchase_adapter.py 覆盖异步稳定、目标变化、保存后仍停留编辑页、保存只点击一次和原有成功路径。

预计修改:

  • client/src/pdd_u2_purchase_adapter.py
  • client/test/test_pdd_u2_purchase_adapter.py

验收标准

  • 地址值、编辑页和唯一保存目标连续两次稳定后才进入保存动作。
  • 稳定后再次读取校验通过,保存按钮只点击一次。
  • 地址或保存目标不稳定时不点击保存并安全失败。
  • 点击保存后继续使用现有有界轮询,不增加长时间固定等待。
  • 保存后一直停留编辑页时返回 PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE。
  • 诊断不包含姓名、手机号或地址原文。
  • 地址后缀、ColorOS 浮层、返回地址面板、提交订单和不可逆门禁行为不变。
  • 采购 Adapter 专项测试、Client 全量测试、语法检查和差异检查通过。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_adapter.py
C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py"
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
Remove-Item Env:QT_QPA_PLATFORM
git diff --check

需要真机执行一条新的正式采购任务,确认地址编辑页稳定后单次保存能够返回地址面板并继续原采购流程。

风险和回退

保存前等待会小幅增加地址步骤耗时,但不触及不可逆阶段。稳定证据不足时必须停止,不能用重复保存换取成功率。若出现回归,可独立回退本工单提交,恢复原单次读取后保存逻辑。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 Client 可运行任务闭环 - 阶段:正式采购地址更新稳定性 ## 要解决什么 正式采购任务 cg16 修改详细地址后点击保存,但保存动作没有生效。Client 随后按现有逻辑轮询约 10 秒,最后仍识别为地址编辑页并报告 `PURCHASE_ADDRESS_PAGE_TIMEOUT`。诊断确认不是保存后完全没有等待,而是输入后只等待 0.2 秒便立即点击,地址表单或保存按钮可能尚未稳定;保存按钮按安全规则只点击一次,因此单次点击丢失后只能超时。 复现结果:期望页面为 `saved`,最后页面为 `edit`,未出现 ColorOS 密码浮层,也未执行系统返回。 ## 做什么 / 不做什么 - 做:保存前连续确认详细地址、编辑页和唯一保存目标稳定;稳定后短暂等待并再次校验,只点击保存一次;保存后沿用现有有界轮询;一直停留编辑页时返回更准确的错误和无个人数据诊断。 - 不做:不重复点击保存;不修改地���后缀规则;不修改返回地址面板、提交订单、不可逆门禁、数据库或 Admin 接口。 ## 怎么做 1. 在 `client/src/pdd_u2_purchase_adapter.py` 增加保存前稳定读取方法:连续两次读取到目标详细地址完全一致、页面为编辑页、保存按钮唯一且坐标相同,才认为可保存。 2. 两次稳定读取之间使用现有短轮询间隔;达到稳定条件后短暂等待约 0.3 秒,再读取一次并重新验证地址和保存目标未变化,然后单次点击。 3. 保存后的 `_wait_after_address_save()` 保留现有最长约 10 秒、每 0.2 秒读取一次的等待逻辑,不使用长时间固定 sleep。 4. 保存后超时时,如果最后仍是编辑页,返回 `PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE` 和“点击保存后仍停留在地址编辑页”;其他未知页面继续使用 `PURCHASE_ADDRESS_PAGE_TIMEOUT`。 5. 诊断只记录稳定读取次数、保存目标数量、最后页面和浮层/返回次数,不记录地址原文。 6. 在 `client/test/test_pdd_u2_purchase_adapter.py` 覆盖异步稳定、目标变化、保存后仍停留编辑页、保存只点击一次和原有成功路径。 预计修改: - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_pdd_u2_purchase_adapter.py` ## 验收标准 - [x] 地址值、编辑页和唯一保存目标连续两次稳定后才进入保存动作。 - [x] 稳定后再次读取校验通过,保存按钮只点击一次。 - [x] 地址或保存目标不稳定时不点击保存并安全失败。 - [x] 点击保存后继续使用现有有界轮询,不增加长时间固定等待。 - [x] 保存后一直停留编辑页时返回 `PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE`。 - [x] 诊断不包含姓名、手机号或地址原文。 - [x] 地址后缀、ColorOS 浮层、返回地址面板、提交订单和不可逆门禁行为不变。 - [ ] 采购 Adapter 专项测试、Client 全量测试、语法检查和差异检查通过。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_adapter.py C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py" $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" Remove-Item Env:QT_QPA_PLATFORM git diff --check ``` 需要真机执行一条新的正式采购任务,确认地址编辑页稳定后单次保存能够返回地址面板并继续原采购流程。 ## 风险和回退 保存前等待会小幅增加地址步骤耗时,但不触及不可逆阶段。稳定证据不足时必须停止,不能用重复保存换取成功率。若出现回归,可独立回退本工单提交,恢复原单次读取后保存逻辑。
Author
Owner

实施进度

已完成代码和自动测试:

  • 地址输入后连续读取,只有目标地址、编辑页和唯一保存按钮坐标连续两次稳定才继续;
  • 稳定后等待 0.3 秒并用最新控件树再校验一次;
  • 保存按钮仍只点击一次,保存后的原 10 秒有界轮询保持不变;
  • 保存前持续不稳定时返回 PURCHASE_ADDRESS_SAVE_NOT_READY,地址回读不一致继续保留原 PURCHASE_ADDRESS_INPUT_MISMATCH;
  • 点击保存后始终停留编辑页时返回 PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE;
  • 诊断只记录布尔值、计数和页面类型,不记录地址原文。

验证:采购 Adapter 48 项全部通过;Client 全量 470 项中 468 项通过。另 2 项仍是用户工作区 src/version.py=0.1.2 与两个旧更新测试固定期待 0.1.0 的既有失败,与 #191 无关。

## 实施进度 已完成代码和自动测试: - 地址输入后连续读取,只有目标地址、编辑页和唯一保存按钮坐标连续两次稳定才继续; - 稳定后等待 0.3 秒并用最新控件树再校验一次; - 保存按钮仍只点击一次,保存后的原 10 秒有界轮询保持不变; - 保存前持续不稳定时返回 `PURCHASE_ADDRESS_SAVE_NOT_READY`,地址回读不一致继续保留原 `PURCHASE_ADDRESS_INPUT_MISMATCH`; - 点击保存后始终停留编辑页时返回 `PURCHASE_ADDRESS_SAVE_NOT_EFFECTIVE`; - 诊断只记录布尔值、计数和页面类型,不记录地址原文。 验证:采购 Adapter 48 项全部通过;Client 全量 470 项中 468 项通过。另 2 项仍是用户工作区 `src/version.py=0.1.2` 与两个旧更新测试固定期待 `0.1.0` 的既有失败,与 #191 无关。
Author
Owner

完成记录(待用户验收)

  • 实现提交:27a0e8c fix: 稳定地址表单后单次保存 (#191)
  • 归档提交:cd160e9 docs: 归档任务 #191
  • 本地归档:docs/task/191-稳定地址表单后单次点击保存.md

采购 Adapter 48 项全部通过,语法和差异检查通过。Client 全量 470 项中 468 项通过;另 2 项仍是用户工作区版本号 0.1.2 与旧更新测试固定期待 0.1.0 的既有失败,与 #191 无关。

当前状态:待用户使用真机执行新的采购任务,确认地址表单稳定后单次保存能够返回地址面板并继续采购。工单保持打开,Epic #1 和 MVP #2 清单保持待验收。

## 完成记录(待用户验收) - 实现提交:`27a0e8c` `fix: 稳定地址表单后单次保存 (#191)` - 归档提交:`cd160e9` `docs: 归档任务 #191` - 本地归档:`docs/task/191-稳定地址表单后单次点击保存.md` 采购 Adapter 48 项全部通过,语法和差异检查通过。Client 全量 470 项中 468 项通过;另 2 项仍是用户工作区版本号 `0.1.2` 与旧更新测试固定期待 `0.1.0` 的既有失败,与 #191 无关。 当前状态:待用户使用真机执行新的采购任务,确认地址表单稳定后单次保存能够返回地址面板并继续采购。工单保持打开,Epic #1 和 MVP #2 清单保持待验收。
Author
Owner

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:ad44f83。现关闭工单。

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:58:59 +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#191