用户 2026-09-19:参考本地已跑通的 demo/purchase_order.py(uiautomator2),评估并更新 GoAuto 回填代码。
demo/purchase_order.py
同一台设备、同一次运行、同一个设备句柄,两条导航路线到达的是两个不同的订单列表页:
设备 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
商品名称:
selected="true"
144x9999%3E
跨版本验证:设备 192.168.0.9:33259(PDD 8.22.0)走 App 内导航同样有标记、同样 selected=true=2。标记的有无由导航路线决定,与 PDD 版本无关。
selected=true=2
这解释了此前一系列失败的共同根源——它们只存在于 H5 那棵树上:
list()
selected=true
cards()
App 内树上反而全部现成:list() 成立(selected=true)、cards() 结构识别可用(原生 ImageView)、cardEntry() 的语义路径(#321)三个标记全部找到可点祖先。
cardEntry()
起点「手机桌面」最初失败:PDD 在后台时只按返回键永远等不到「个人中心」,按满上限直接失败——必须先把 PDD 拉到前台。
两个导航目标都通过现有安全门禁:
个人中心 clickable=true 禁词几何重叠=0 → safe() 直接通过 我的订单 clickable=false 禁词几何重叠=0 → 有可点祖先(复用 #321 就近祖先技术)
只改导航一处:
BackfillDriver.openOrders()
OrderBackfillScanner
openOrderList()
BackfillPagePolicy
navEntry(page, label)
GoAutoAccessibilityService.clickBackfill()
list()、confirmedList、allTab、cards、cardEntry、readDetail 不改——App 内树上 list() 成立即短路,下游判据全部沿用。安全门禁全部保留:safe() 禁词重叠、validate() 风控词、checkActive()。
confirmedList
allTab
cards
cardEntry
readDetail
safe()
validate()
checkActive()
navEntry()
ACTION_CLICK
openOrders()
无长期文档影响:未改接口、配置、数据结构和状态机,属于回填导航路线的实现调整。
提交 f7bc9fb(deploy-main)。
f7bc9fb
OrderBackfillScanner.openOrderList()
BackfillPagePolicy.navEntry()
clickBackfill
list()/confirmedList/allTab/cards/cardEntry/readDetail 一行未改。
6 种组合全部通过:
两台无障碍服务均保持开启。
状态:待验收。
No dependencies set.
The note is not visible to the blocked user.
原始需求
用户 2026-09-19:参考本地已跑通的
demo/purchase_order.py(uiautomator2),评估并更新 GoAuto 回填代码。事实(2026-09-19 真机实测,两台设备两个 PDD 版本)
同一台设备、同一次运行、同一个设备句柄,两条导航路线到达的是两个不同的订单列表页:
商品名称:语义标记selected="true"144x9999%3E图片占位符)跨版本验证:设备 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 返回店铺行App 内树上反而全部现成:
list()成立(selected=true)、cards()结构识别可用(原生 ImageView)、cardEntry()的语义路径(#321)三个标记全部找到可点祖先。导航可行性验证(每步等预期文字出现才走下一步)
起点「手机桌面」最初失败:PDD 在后台时只按返回键永远等不到「个人中心」,按满上限直接失败——必须先把 PDD 拉到前台。
两个导航目标都通过现有安全门禁:
方案
只改导航一处:
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()。验收
navEntry()对可点节点返回自身、对不可点节点返回最近可点祖先、与禁词重叠时返回 null。风险与回退
validate()风控检测与返回次数上限兜底;未在测试中遇到。ACTION_CLICK路径未单独验证;两个目标均为 clickable 节点。openOrders()改回 orders.html intent 并移除openOrderList()调用。文档影响
无长期文档影响:未改接口、配置、数据结构和状态机,属于回填导航路线的实现调整。
实施
提交
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一行未改。验证
navEntry()的自身/祖先/禁词重叠三种情形。真机验证(导航序列,adb 坐标点击)
6 种组合全部通过:
已装机
两台无障碍服务均保持开启。
未验证
ACTION_CLICK路径未单独验证;两个目标均为 clickable 节点。状态:待验收。