回填改走 App 内导航进入我的订单,替换 orders.html #324

Open
opened 2026-09-19 10:45:10 +08:00 by ila · 1 comment
Owner

原始需求

用户 2026-09-19:参考本地已跑通的 demo/purchase_order.py(uiautomator2),评估并更新 GoAuto 回填代码。

事实(2026-09-19 真机实测,两台设备两个 PDD 版本)

同一台设备、同一次运行、同一个设备句柄,两条导航路线到达的是两个不同的订单列表页:

设备 192.168.0.173:38881 | model PKG110 | serial 3B65BD02H7F00000 | PDD 8.25.0
A: orders.html intent   nodes=185  商品名称标记=0  selected=true=0
B: App 内导航            nodes=203  商品名称标记=3  selected=true=2
orders.html(现用) App 内导航
商品名称: 语义标记 0 每单 1 个
selected="true" 0 2(「全部」被选中)
类名 WebView(144x9999%3E 图片占位符) 原生 TextView/ImageView
标签栏 全部/待付款/待分享/待发货/待收货/评价 全部/待付款/拼团中/打包中/待收货/评价

跨版本验证:设备 192.168.0.9:33259(PDD 8.22.0)走 App 内导航同样有标记、同样 selected=true=2。标记的有无由导航路线决定,与 PDD 版本无关。

这解释了此前一系列失败的共同根源——它们只存在于 H5 那棵树上:

  • list() 要求「全部」selected=true,在 H5 路上恒为 0,从未成立过
  • cards() 必须做结构识别(图+≥4字+动作词+最小容器),因为 H5 路上没有任何语义标记:#309 返回 0、#311 锚到店铺 logo、#314 返回店铺行
  • #318 的 intent 自锁也是这条路独有的

App 内树上反而全部现成:list() 成立(selected=true)、cards() 结构识别可用(原生 ImageView)、cardEntry() 的语义路径(#321)三个标记全部找到可点祖先。

导航可行性验证(每步等预期文字出现才走下一步)

设备 PDD 起点 结果
.173 8.25.0 订单详情页(#318 自锁场景) OK,3 标记
.173 8.25.0 H5 订单列表 OK,3 标记
.173 8.25.0 PDD 首页 OK,3 标记
.173 8.25.0 手机桌面 先 FAIL,加「先拉起 PDD」后 OK
.9 8.22.0 手机桌面 OK,1 标记
.9 8.22.0 H5 订单列表 OK,1 标记

起点「手机桌面」最初失败:PDD 在后台时只按返回键永远等不到「个人中心」,按满上限直接失败——必须先把 PDD 拉到前台。

两个导航目标都通过现有安全门禁:

个人中心  clickable=true   禁词几何重叠=0  → safe() 直接通过
我的订单  clickable=false  禁词几何重叠=0  → 有可点祖先(复用 #321 就近祖先技术)

方案

只改导航一处:

  • BackfillDriver.openOrders() 语义改为「拉起 PDD 到前台」(LAUNCHER intent),不再打开 orders.html。
  • OrderBackfillScanner 新增 openOrderList():拉起 PDD → 有界按返回等「个人中心」→ 点它 → 等「我的订单」→ 点它(走可点祖先)。每一步都等预期文字出现才继续,不用固定 sleep 或节点数猜测。
  • BackfillPagePolicy 新增 navEntry(page, label):按文案找节点,自身可点且 safe() 就用它,否则取最近可点且 safe() 的祖先,都没有返回 null。
  • GoAutoAccessibilityService.clickBackfill() 白名单放行这两个导航目标。

list()、confirmedList、allTab、cards、cardEntry、readDetail 不改——App 内树上 list() 成立即短路,下游判据全部沿用。安全门禁全部保留:safe() 禁词重叠、validate() 风控词、checkActive()。

验收

  • 新增用例:从桌面/详情页/H5 列表三种起点,导航序列都应到达订单列表;未先拉起 PDD 时必须失败。
  • 新增用例:navEntry() 对可点节点返回自身、对不可点节点返回最近可点祖先、与禁词重叠时返回 null。
  • 去掉「先拉起 PDD」后相关用例必须红。
  • 真机验证:回填能进入 App 内订单列表并读到订单。

风险与回退

  • PDD 首页弹窗可能打断有界返回,靠 validate() 风控检测与返回次数上限兜底;未在测试中遇到。
  • 依赖「个人中心」「我的订单」两个文案稳定。
  • 验证使用 adb 坐标点击(对应手势兜底路径),ACTION_CLICK 路径未单独验证;两个目标均为 clickable 节点。
  • 回退即把 openOrders() 改回 orders.html intent 并移除 openOrderList() 调用。

文档影响

无长期文档影响:未改接口、配置、数据结构和状态机,属于回填导航路线的实现调整。

## 原始需求 用户 2026-09-19:参考本地已跑通的 `demo/purchase_order.py`(uiautomator2),评估并更新 GoAuto 回填代码。 ## 事实(2026-09-19 真机实测,两台设备两个 PDD 版本) 同一台设备、同一次运行、同一个设备句柄,两条导航路线到达的是**两个不同的订单列表页**: ``` 设备 192.168.0.173:38881 | model PKG110 | serial 3B65BD02H7F00000 | PDD 8.25.0 A: orders.html intent nodes=185 商品名称标记=0 selected=true=0 B: App 内导航 nodes=203 商品名称标记=3 selected=true=2 ``` | | orders.html(现用) | App 内导航 | |---|---|---| | `商品名称:` 语义标记 | 0 | 每单 1 个 | | `selected="true"` | 0 | 2(「全部」被选中) | | 类名 | WebView(`144x9999%3E` 图片占位符) | 原生 TextView/ImageView | | 标签栏 | 全部/待付款/待分享/待发货/待收货/评价 | 全部/待付款/拼团中/打包中/待收货/评价 | 跨版本验证:设备 192.168.0.9:33259(PDD **8.22.0**)走 App 内导航同样有标记、同样 `selected=true=2`。**标记的有无由导航路线决定,与 PDD 版本无关。** 这解释了此前一系列失败的共同根源——它们只存在于 H5 那棵树上: - `list()` 要求「全部」`selected=true`,在 H5 路上恒为 0,从未成立过 - `cards()` 必须做结构识别(图+≥4字+动作词+最小容器),因为 H5 路上没有任何语义标记:#309 返回 0、#311 锚到店铺 logo、#314 返回店铺行 - #318 的 intent 自锁也是这条路独有的 App 内树上反而全部现成:`list()` 成立(`selected=true`)、`cards()` 结构识别可用(原生 ImageView)、`cardEntry()` 的语义路径(#321)三个标记全部找到可点祖先。 ## 导航可行性验证(每步等预期文字出现才走下一步) | 设备 | PDD | 起点 | 结果 | |---|---|---|---| | .173 | 8.25.0 | 订单详情页(#318 自锁场景) | OK,3 标记 | | .173 | 8.25.0 | H5 订单列表 | OK,3 标记 | | .173 | 8.25.0 | PDD 首页 | OK,3 标记 | | .173 | 8.25.0 | 手机桌面 | 先 FAIL,加「先拉起 PDD」后 OK | | .9 | 8.22.0 | 手机桌面 | OK,1 标记 | | .9 | 8.22.0 | H5 订单列表 | OK,1 标记 | 起点「手机桌面」最初失败:PDD 在后台时只按返回键永远等不到「个人中心」,按满上限直接失败——必须先把 PDD 拉到前台。 两个导航目标都通过现有安全门禁: ``` 个人中心 clickable=true 禁词几何重叠=0 → safe() 直接通过 我的订单 clickable=false 禁词几何重叠=0 → 有可点祖先(复用 #321 就近祖先技术) ``` ## 方案 只改导航一处: - `BackfillDriver.openOrders()` 语义改为「拉起 PDD 到前台」(LAUNCHER intent),不再打开 orders.html。 - `OrderBackfillScanner` 新增 `openOrderList()`:拉起 PDD → 有界按返回等「个人中心」→ 点它 → 等「我的订单」→ 点它(走可点祖先)。每一步都等预期文字出现才继续,不用固定 sleep 或节点数猜测。 - `BackfillPagePolicy` 新增 `navEntry(page, label)`:按文案找节点,自身可点且 safe() 就用它,否则取最近可点且 safe() 的祖先,都没有返回 null。 - `GoAutoAccessibilityService.clickBackfill()` 白名单放行这两个导航目标。 `list()`、`confirmedList`、`allTab`、`cards`、`cardEntry`、`readDetail` 不改——App 内树上 `list()` 成立即短路,下游判据全部沿用。安全门禁全部保留:`safe()` 禁词重叠、`validate()` 风控词、`checkActive()`。 ## 验收 - 新增用例:从桌面/详情页/H5 列表三种起点,导航序列都应到达订单列表;未先拉起 PDD 时必须失败。 - 新增用例:`navEntry()` 对可点节点返回自身、对不可点节点返回最近可点祖先、与禁词重叠时返回 null。 - 去掉「先拉起 PDD」后相关用例必须红。 - 真机验证:回填能进入 App 内订单列表并读到订单。 ## 风险与回退 - PDD 首页弹窗可能打断有界返回,靠 `validate()` 风控检测与返回次数上限兜底;未在测试中遇到。 - 依赖「个人中心」「我的订单」两个文案稳定。 - 验证使用 adb 坐标点击(对应手势兜底路径),`ACTION_CLICK` 路径未单独验证;两个目标均为 clickable 节点。 - 回退即把 `openOrders()` 改回 orders.html intent 并移除 `openOrderList()` 调用。 ## 文档影响 无长期文档影响:未改接口、配置、数据结构和状态机,属于回填导航路线的实现调整。
Author
Owner

实施

提交 f7bc9fb(deploy-main)。

  • BackfillDriver.openOrders() 改为用 LAUNCHER intent 拉起 PDD,不再打开 orders.html。
  • OrderBackfillScanner.openOrderList():拉起 PDD → 有界按返回等「个人中心」→ 点它 → 等「我的订单」→ 点它;每步等预期文字出现。已在订单列表上时直接返回,不重复导航(判据严格:WebView 版列表没有语义标记、「全部」也不 selected,不会被误判为已就位)。
  • BackfillPagePolicy.navEntry():目标自身可点就用它,否则取最近可点祖先,仍由 safe() 把关。
  • clickBackfill 白名单放行这两个导航目标。

list()/confirmedList/allTab/cards/cardEntry/readDetail 一行未改。

验证

  • 单测 416 通过 0 失败。
  • 新增用例:App 内导航顺序(个人中心→我的订单)、PDD 在后台时必须先拉起、navEntry() 的自身/祖先/禁词重叠三种情形。
  • 反证三组:去掉「先拉起 PDD」→ 2 红;退回 orders.html → 1 红;破坏导航序列 → 5 红。
  • 既有 4 个启动恢复类夹具(超时、无 selected、陈旧详情页 #318、空壳 #317)补上了导航建模,场景语义保持不变。

真机验证(导航序列,adb 坐标点击)

6 种组合全部通过:

设备 PDD 起点 结果
.173 8.25.0 订单详情页 OK,3 标记
.173 8.25.0 H5 订单列表 OK,3 标记
.173 8.25.0 PDD 首页 OK,3 标记
.173 8.25.0 手机桌面 先 FAIL → 加「先拉起 PDD」后 OK
.9 8.22.0 手机桌面 OK,1 标记
.9 8.22.0 H5 订单列表 OK,1 标记

已装机

  • 192.168.0.173:38881,lastUpdateTime 2026-09-19 10:56:30
  • 192.168.0.9:33259,lastUpdateTime 2026-09-19 10:56:31

两台无障碍服务均保持开启。

未验证

  • 回填完整闭环(导航→遍历→读详情→上传)未在真机跑过。
  • 导航验证用的是 adb 坐标点击(对应手势兜底),GoAuto 自己的 ACTION_CLICK 路径未单独验证;两个目标均为 clickable 节点。
  • PDD 首页弹窗打断有界返回的情形未遇到。

状态:待验收。

## 实施 提交 `f7bc9fb`(deploy-main)。 - `BackfillDriver.openOrders()` 改为用 LAUNCHER intent 拉起 PDD,不再打开 orders.html。 - `OrderBackfillScanner.openOrderList()`:拉起 PDD → 有界按返回等「个人中心」→ 点它 → 等「我的订单」→ 点它;每步等预期文字出现。已在订单列表上时直接返回,不重复导航(判据严格:WebView 版列表没有语义标记、「全部」也不 selected,不会被误判为已就位)。 - `BackfillPagePolicy.navEntry()`:目标自身可点就用它,否则取最近可点祖先,仍由 `safe()` 把关。 - `clickBackfill` 白名单放行这两个导航目标。 `list()`/`confirmedList`/`allTab`/`cards`/`cardEntry`/`readDetail` 一行未改。 ## 验证 - 单测 416 通过 0 失败。 - 新增用例:App 内导航顺序(个人中心→我的订单)、PDD 在后台时必须先拉起、`navEntry()` 的自身/祖先/禁词重叠三种情形。 - 反证三组:去掉「先拉起 PDD」→ 2 红;退回 orders.html → 1 红;破坏导航序列 → 5 红。 - 既有 4 个启动恢复类夹具(超时、无 selected、陈旧详情页 #318、空壳 #317)补上了导航建模,场景语义保持不变。 ## 真机验证(导航序列,adb 坐标点击) 6 种组合全部通过: | 设备 | PDD | 起点 | 结果 | |---|---|---|---| | .173 | 8.25.0 | 订单详情页 | OK,3 标记 | | .173 | 8.25.0 | H5 订单列表 | OK,3 标记 | | .173 | 8.25.0 | PDD 首页 | OK,3 标记 | | .173 | 8.25.0 | 手机桌面 | 先 FAIL → 加「先拉起 PDD」后 OK | | .9 | 8.22.0 | 手机桌面 | OK,1 标记 | | .9 | 8.22.0 | H5 订单列表 | OK,1 标记 | ## 已装机 - 192.168.0.173:38881,lastUpdateTime 2026-09-19 10:56:30 - 192.168.0.9:33259,lastUpdateTime 2026-09-19 10:56:31 两台无障碍服务均保持开启。 ## 未验证 - 回填完整闭环(导航→遍历→读详情→上传)未在真机跑过。 - 导航验证用的是 adb 坐标点击(对应手势兜底),GoAuto 自己的 `ACTION_CLICK` 路径未单独验证;两个目标均为 clickable 节点。 - PDD 首页弹窗打断有界返回的情形未遇到。 状态:待验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#324