订单详情改为点展开读取,不再滑动 #312

Open
opened 2026-09-18 12:12:59 +08:00 by ila · 1 comment
Owner

原始需求

用户 2026-09-18:「现在进入第一个订单详情页,但向下滑动2次,其实不需要向下滑动的,只需要点击两个展开就可以获取到地址和订单号等」。

事实(真机 192.168.0.173:38881,0.9.59,2026-09-18)

订单详情页进页即可见,未滑动:

要素 节点 bounds 状态
订单编号 [183,1221][861,1281] 完整
收货人信息(含 _cg 后缀) [126,432][897,612] 完整,未截断
实付金额 [33,1107][1047,1203] 完整
下单时间 — 不存在

点击「展开」[861,1281][1047,1344](Button,clickable=true)后出现「支付方式」与「下单时间」两行。全页仅此一个「展开」。

两处缺陷:

  1. expansion() 以「商品快照」行作为定位锚点,?: return null。真机详情页没有该节点,展开永远点不到,扫描循环退化成连续滑动;而下单时间只在展开后存在,滑多少次都读不到。
  2. 循环固定走满 6 步,凑齐证据后仍继续滑动。页面后半段是推荐商品流,滑动只是浪费时间并引入无关文本。

方案

  • expansion() 改为 expansions():返回详情页上所有通过 safe() 的「展开」,按从上到下排序,不再依赖「商品快照」。支持一页多块折叠区。
  • BackfillDetailReader 增加 complete():后缀、订单号、下单时间、实付金额各唯一时为真。
  • 扫描循环每帧先累积再判 complete(),齐了即停;展开按 path 去重逐个点;仍保留滑动兜底,凑不齐时行为与现在一致。

安全边界不变:「展开」只是披露控件,仍由 safe() 拦截与去支付、立即支付等禁词几何重叠的节点;不点任何订单动作。

验收

  • 新增用例:详情页内滑动次数为 0、展开恰好 1 次、读出订单号与地址后缀。
  • 旧判据下该用例必须红。
  • 真机回填读到订单编号与下单时间。

风险与回退

complete() 判据比 finish() 更严(时间与金额也要求唯一),凑不齐时不会提前收手,不存在少读。回退即还原三处改动。

文档影响

无长期文档影响:未改入口、配置、接口和状态机,属于回填读取策略的缺陷修复。

## 原始需求 用户 2026-09-18:「现在进入第一个订单详情页,但向下滑动2次,其实不需要向下滑动的,只需要点击两个展开就可以获取到地址和订单号等」。 ## 事实(真机 192.168.0.173:38881,0.9.59,2026-09-18) 订单详情页**进页即可见**,未滑动: | 要素 | 节点 bounds | 状态 | |---|---|---| | 订单编号 | [183,1221][861,1281] | 完整 | | 收货人信息(含 _cg 后缀) | [126,432][897,612] | 完整,未截断 | | 实付金额 | [33,1107][1047,1203] | 完整 | | 下单时间 | — | 不存在 | 点击「展开」`[861,1281][1047,1344]`(Button,clickable=true)后出现「支付方式」与「下单时间」两行。全页仅此一个「展开」。 两处缺陷: 1. `expansion()` 以「商品快照」行作为定位锚点,`?: return null`。真机详情页没有该节点,展开永远点不到,扫描循环退化成连续滑动;而下单时间只在展开后存在,滑多少次都读不到。 2. 循环固定走满 6 步,凑齐证据后仍继续滑动。页面后半段是推荐商品流,滑动只是浪费时间并引入无关文本。 ## 方案 - `expansion()` 改为 `expansions()`:返回详情页上所有通过 `safe()` 的「展开」,按从上到下排序,不再依赖「商品快照」。支持一页多块折叠区。 - `BackfillDetailReader` 增加 `complete()`:后缀、订单号、下单时间、实付金额各唯一时为真。 - 扫描循环每帧先累积再判 `complete()`,齐了即停;展开按 path 去重逐个点;仍保留滑动兜底,凑不齐时行为与现在一致。 安全边界不变:「展开」只是披露控件,仍由 `safe()` 拦截与去支付、立即支付等禁词几何重叠的节点;不点任何订单动作。 ## 验收 - 新增用例:详情页内滑动次数为 0、展开恰好 1 次、读出订单号与地址后缀。 - 旧判据下该用例必须红。 - 真机回填读到订单编号与下单时间。 ## 风险与回退 `complete()` 判据比 `finish()` 更严(时间与金额也要求唯一),凑不齐时不会提前收手,不存在少读。回退即还原三处改动。 ## 文档影响 无长期文档影响:未改入口、配置、接口和状态机,属于回填读取策略的缺陷修复。
Author
Owner

实施

提交 74a5614(deploy-main)。

  • expansion() → expansions():返回详情页上所有通过 safe() 的「展开」,去掉「商品快照」锚点依赖。
  • BackfillDetailReader.complete():四项证据各唯一时为真。
  • 扫描循环凑齐即停,展开按 path 去重逐个点,滑动保留兜底。
  • GoAutoAccessibilityService 的手势兜底白名单同步改用 expansions()。

验证

  • 单测 405 通过 0 失败。
  • 反证:临时恢复「商品快照」前置后,新增的三条用例(详情页 0 滑动 1 展开、多块展开、仅需详情页)全部变红。
  • 已装机 192.168.0.173:38881,0.9.59,lastUpdateTime 2026-09-18 12:13:22,无障碍服务仍开启。

未验证

真机回填是否确实只点一次展开、零滑动读到订单编号与下单时间——待人工触发一次回填。

状态:待验收。

## 实施 提交 `74a5614`(deploy-main)。 - `expansion()` → `expansions()`:返回详情页上所有通过 `safe()` 的「展开」,去掉「商品快照」锚点依赖。 - `BackfillDetailReader.complete()`:四项证据各唯一时为真。 - 扫描循环凑齐即停,展开按 path 去重逐个点,滑动保留兜底。 - `GoAutoAccessibilityService` 的手势兜底白名单同步改用 `expansions()`。 ## 验证 - 单测 405 通过 0 失败。 - 反证:临时恢复「商品快照」前置后,新增的三条用例(详情页 0 滑动 1 展开、多块展开、仅需详情页)全部变红。 - 已装机 192.168.0.173:38881,0.9.59,lastUpdateTime 2026-09-18 12:13:22,无障碍服务仍开启。 ## 未验证 真机回填是否确实只点一次展开、零滑动读到订单编号与下单时间——待人工触发一次回填。 状态:待验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#312