跳到主要内容

第 08 课 · 重试还是分支

两种"没成功",两种不同工具。混淆它们会让流程又慢不稳。

问题

可靠地点到 Upgrade 按钮。可能出错的是截然不同的两件事:

  1. 按钮不在屏幕上(页面不对、加载慢)。
  2. 按钮在,但点击没生效(UI 尚未稳定、输入瞬时抖动)。

问题 1 是状态问题——答案是配上诚实超时的检测,加一个分支。问题 2 是操作故障——答案是点击上的重试策略

你将学到

  • 附加重试策略——次数、可重试的结果、退避(backoff)。
  • 为什么给 Find Image 加重试想"找得更狠"毫无作用。
  • 三个结局,点名哪一环坏了。

开始之前

流程

编辑器中的第 08 课流程

徽标按阅读顺序给节点编号,与动手构建步骤对应。重试策略在这里刻意看不见:它是节点的属性,所以画布上只显示你为“重试也救不回来的失败”接出的那条分支。

动手构建

  1. 新建流程。Find Image 1. Find Upgrade,模板 = Upgrade 箭头图标,timeout 6000 ms不加重试策略
  2. Click 2. Tap it,坐标来源 = 节点 1。在 Properties 打开重试部分,设置:
重试设置含义
Max attempts3总共三次尝试(首次 + 两次重试)
Retry onfailuretimeout仅有的两种可重试结果
Backoff500 ms第 2 次尝试前的等待
Backoff multiplier1.5第 3 次尝试等 750 ms
  1. 三个 Stop 如图——注意两条不同的失败消息。
  2. 连线,Save,Auto Layout。

成就本课的那个想法

检测本来就在重试。 Find Image 在整个超时期间每个轮询周期重新截图、重新匹配——那就是它的重试循环。6000 ms 表示:"这个按钮合理情况下最多六秒才存在"。

陷阱在这里:给 Find Image 加重试策略对"未找到"毫无作用。未找到走 Failure,但状态是 success——搜索本身运行正常,只是东西不在。重试只在状态 failure/timeout 时触发。所以"加个重试找得更狠"这个条件反射是个不折不扣的空操作;诚实的修法是加超时、换更好的模板,或接受分支。

操作恰恰相反。 Click 要么派发成功,要么操作性失败——没有可延长的轮询。瞬时输入故障正是重试加退避的用武之地:500 ms 的间隙让吞掉点击的东西来得及稳定,再迎接第二次尝试。

三个结局,因为可能坏的是两件事。 not foundtap failed after 3 attempts 一眼就把你指向不同的修理处——一个是导航/模板问题,一个是输入/设备问题。共用一个 "failed" Stop 会把这一切埋掉。

运行

  • 仪表盘在前台:命中、点击、success · Upgrade queued(活动日志新增 "Upgrade queued")。
  • 错误屏幕在前台:六秒轮询 → failure · Upgrade button not on this screen。注意运行日志显示 Find Image 只执行一次——没有触发任何重试,与设计完全一致。

在健康的模拟器上很难人为制造点击失败的结局——这正是它作为罕见路径的意义。相信连线;你会在真实世界遇到它。

最佳实践

  • 操作配重试,检测配超时。 念到成为反射。
  • 2–3 次尝试,永远带退避。 立即重试通常撞上同一个忙碌瞬间;十次尝试只是推迟真相。
  • 用坏掉的那个东西给失败结局命名。
  • 生产环境关闭 captureScreenshotPerAttempt——只在诊断时开,它每次尝试写一张图。
  • 记住最坏情况:3 次尝试 × 超时 + 各次退避。重试放大时间的本事不输循环。

常见错误

错误后果修复
给 Find Image 加重试对付"未找到"永不触发——状态是 success加大超时
Attempts = 10认输前长时间卡死2–3 次加退避
不加退避每次尝试撞上同一忙碌瞬间400–800 ms,×1.5
失败共用一个 Stop分不清坏的是哪环每种失败一个结局
试图重试 fatal设计上不可能——fatal 意味着配置错误修配置

故障排查

按钮明明可见却"not found"。 Test Node → 看置信度;低就重截更紧的模板。重试不是这里的答案——这正是本课的课义。

每次运行都耗满六秒。 你一直在 Failure 分支上;模板从未命中。修模板,别砍超时。

被重试节点的变量看起来怪。 输出映射只应用一次,作用于最后一次尝试——之前的尝试从不写入。设计使然。

小结

  • 检测的超时就是它的重试;对"未找到"加策略重试是空操作。
  • 重试策略属于可能瞬时失败的操作——次数少、退避真。
  • 不同的失败配得上不同的结局。

下一课

重试治得了一次不稳的操作。但当整个屏幕都不对呢——一个没见过的弹窗、一个不期而至的页面?第 09 课 · 恢复例程构建每个长时自动化都需要的有界逃生通道。

另见:重试与失败 · Click · Find Image