第 04 课 · 处理可选弹窗
有的日子奖励弹窗迎接你,有的日子没有。你的流程两种情况都必须正确。
问题
真实应用总在打断你:每日奖励、促销、公告。它们时不时出现。假设弹窗总在的自动化会在它缺席的日子坏掉;假设它永不出现的会在它出现的日子坏掉。
Practice App 让这可以复现:dashboard.html?popup=1 显示奖励弹窗,纯净的 dashboard.html 不显示。一个流程,两种现实。
你将学到
- 两个分支都是成功的分支结构。
- 把短超时检测当作提问,而不是等待。
- 分支汇合,让真正的工作只存在一份。
- 按需制造两种测试状态。
开始之前
- 完成第 03 课——本课复用它的模板截取技能。
流程

徽标按阅读顺序给节点编号,与动手构建步骤对应。注意形状:检测在此分叉,有弹窗的那条分支先关闭再沉降,两条路径最后汇回同一个后续节点——一个流程,两种状态。
注意形状:一个会汇合的岔路。真正的工作(3. Carry on)只有一份——两条分支都汇入它。
动手构建
- 新建流程。添加 Find Image,命名
1. Is the reward popup showing?,模板是弹窗的星形图标(在?popup=1时截取)。Timeout2000ms——刻意地短。 - 添加 Click,命名
2a. Close it,区域画在弹窗的 Close 按钮上。 - 添加 Wait,命名
3a. Let it close,600ms,理由close animation。 - 添加 Click,命名
3. Carry on with the real work,区域在 Collect 按钮上。 - 一个 Stop:
success,消息Handled both states。 - 连线:提问的 Success → Close → Wait → Carry on;提问的 Failure → 直接 Carry on。Carry on → Stop。
- Save,Auto Layout。
为什么用 这些节点
| 节点 | 角色 | 备注 |
|---|---|---|
| Find Image(2000 ms) | 问"它现在在吗?" | 短超时:你不是在等它到来 |
| Click Close + Wait | 只在有弹窗时走的绕行 | 等待防止下一次点击读到关闭中的帧 |
| Click Collect | 真正的工作 | 只存在一份,在汇合之后 |
| 一个 Stop | 两条路同样收尾 | 因为两条路同样正确 |
超时就是设计决策。 第 03 课的超时意为"给它时间出现"。这里意为"看一眼,很快"。此节点若配 30 秒超时,每个无弹窗的日子都要白等 30 秒——流程照样正确,每天照样浪费半分钟。超时编码了意图。
2a / 3a 的编号标记绕行路径;纯数字标记主路径。在 20 个节点的画布上,这个惯例让读者只凭名字就能还原结构。
运行
测试两种现实:
- 有弹窗——打开
dashboard.html?popup=1,运行:命中(~300 ms)→ Close → 等待 → Collect →success。 - 无弹窗——打开纯净
dashboard.html,运行:轮询 2 秒、无命中 → 直接 Collect →success。
同一流程,同一结局,不同路线。看运行日志:从执行了哪些节点就能看出每次走了哪条路。
最佳实践
- 可选元素用短超时——1500–2500 ms。你在提问,不是等待。
- 汇合分支。 在两条分支上复制"真正的工作"是通往维护灾难的经典之路——你会改了一份忘另一份。
- 关闭后要等待。 下一个操作不能和关闭动画赛跑。
- 刻意测试两种状态。
?popup=1开关的存在,正是为了你不必守株待兔地测试罕见路径。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 弹窗检查用长超时 | 每个无弹窗运行都浪费那么久 | 2000 ms 绰绰有余 |
| 每条分支各复制一份真工作 | 两份副本渐行渐远 | 汇合到一个节点 |
| Close 后不等待 | 下一点击落在半关的遮罩上 | 保留 600 ms Wait |
| 把"无弹窗"当失败 | 日志里全是假警报 | 两种结局都是 success |
故障排查
弹窗在,检查却漏掉它。 模板多半把变暗的背景截进去了。只重截星形图标。
点了 Close,下一次点击还是打在遮罩上。 把等待提到 800–1000 ms。
带着 ?popup=1 却总走"无弹窗"分支。
你在不同缩放下截的模板,或浏览器工具栏挤动了布局——在你实际运行的同一屏幕上重截。
小结
- 可选元素是一个分支,不是错误:短检查、绕行关闭、汇合。
- 超时长度编码检测的含义——等待还是提问。
- 汇合的分支让真正的工作只在一处。
下一课
至今每个决定都来自是否看见某物。第 05 课 · 读取一个数字开始根据屏幕说了什么做决定——你的第一次 OCR。
另见:Find Image · If — Node outcome 模式(在流程后段对本检查再分支)