跳到主要内容

第 02 课 · 等待与验证

第 01 课的流程有个缺陷:它假设点击成功了。本课让流程去证明。

问题

在 Practice App 仪表盘上点 Claim Daily,一个奖励弹窗会打开——在一小段动画之后。你的自动化需要知道:弹窗真的打开了吗?

Click 在点击被发出的那一刻就报告 Success。它完全不知道之后屏幕上发生了什么。你将来构建的每个可靠流程,都用同一种方式填补这个空隙:操作 → 等待稳定 → 验证

你将学到

  • 为什么操作不等待,以及为什么这是设计使然。
  • 操作 → 等待稳定 → 验证 模式。
  • 你的第一个检测节点,及其两个有含义的出口。
  • 给成功与失败不同的结局

开始之前

  • 完成第 01 课
  • Practice App 打开在 dashboard.html

流程

编辑器中的第 02 课流程

动手构建

  1. 新建流程。添加 Click,命名 1. Tap Claim Daily,区域画在 Claim Daily 按钮上。
  2. 添加 Wait(等待),命名 2. Let the popup animate。时长 800 ms,Reasonpopup open animation——半年后你会想知道这个数字为什么存在。
  3. 添加 Find Image(查找图像),命名 3. Did the popup open?。在 Live Preview 上、弹窗打开时(dashboard.html?popup=1),用 Capture Template 截取弹窗的星形图标。Timeout 3000 ms。
  4. 添加两个 Stop:Stop: verifiedsuccess,消息 Popup opened)和 Stop: not verifiedfailure,消息 Popup did not open)。
  5. 连线:Start → Click → Wait → Find Image;Find Image Success → verified,Failure → not verified。
  6. Save,Auto Layout。

为什么用这些节点

节点角色向后传递什么
Click执行点击下个节点用不到的东西——只有控制权
Wait吸收动画时间800 ms 后的控制权
Find Image验证步骤:轮询新截图匹配模板它的路由——Success(找到)或 Failure(超时未找到)
两个 Stop把裁决变成两个清晰的结局最终状态 + 消息

Wait 为什么重要: 检测读取的是截图。没有等待,Find Image 可能正好抓到动画中途的帧——或弹窗还没出现的帧——对着一个即将出现的弹窗报告"未找到"。

Find Image 为什么兼任等待: 它每个轮询周期(250 ms)重新截图、重新匹配,直到命中或 3000 ms 超时。图标一出现它就立即返回。所以 800 ms 等待加 3000 ms 超时不是"等 3.8 秒"——典型运行一秒左右就验证完毕。

"未找到"不是错误

Find Image 超时未命中时,它的 status 依然是 success——搜索本身正常运行了,只是目标不在。只有路由是 Failure。这个区分贯穿整个产品:一次未找到永远不会触发重试,也不会计入连续失败上限。执行模型解释了原因。

运行

在纯净仪表盘上运行。预期:弹窗打开,Find Image 一秒内命中,运行以 success / Popup opened 结束。

再试反例:关掉页面(或把模拟器导航到别处)再运行。点击落空,弹窗不开,3 秒后运行以 failure / Popup did not open 结束——流程告诉了你真相,而不是装样子。

最佳实践

  • 验证每个重要操作。 点 → 等 → 查是可靠自动化的脊梁。
  • 填写 Wait 的 Reason。 没有注释的延时是流程腐烂的开始。
  • 两个结局用两个 Stop、两条消息。 共用一个 Stop 会掩盖真实发生的事。
  • 模板截得紧。 只截星形图标,不截整个弹窗——背景像素正是日后匹配失败的元凶。

常见错误

错误后果修复
验证前不等待检测读到动画中途的帧保留 Wait
用另一个盲等来"验证"等完你仍一无所知用检测来验证
两个结局共用一个 Stop日志分不清成败两个 Stop、两条消息
模板带上弹窗背景任何东西挪动匹配就崩紧贴图标裁剪

故障排查

弹窗明明开了,验证却失败。 把 Wait 提到 1200 ms——慢机器动画更久。仍失败就重截模板;多半带了背景。

没有弹窗也瞬间验证通过。 模板太笼统,匹配到了屏幕上别的东西。重截一个更紧、更独特的裁剪。

流程很慢。 不应该——Find Image 首次命中即返回。若每次都耗满超时,说明模板从未命中,你一直活在 Failure 分支上;去修模板。

小结

  • 操作报告的是"已发出",不是"已生效"。操作 → 等待 → 验证。
  • 检测节点既是检查也是聪明的等待——条件一满足就返回。
  • 检测的路由(找到/未找到)与状态是分开的,两种结局各配一个 Stop。

下一课

你验证了有东西出现第 03 课 · 查找并点击把关系反过来:先找到目标,再在找到的位置上操作——流程里不再有任何坐标。

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