让流程更清晰。
让维护更轻松,让能力可复用。把开发规范做成一套能被新人听懂、能被团队复用的工作方法。
所有指令都写进一个流程,
确实也能运行。
但很快就会失控。
随着分支、循环和异常处理不断增加,流程会越来越难定位、难修改、难维护。
assets/images/ch01-flow-complexity.png请检查素材路径
assets/images/ch01-mainflow-overload.png请检查素材路径把所有事情塞进主流程,
会发生什么?
如果一个流程名无法概括内部内容,通常说明它承担了太多职责。
主流程负责编排,
子流程负责执行。
主流程决定先做什么、后做什么,子流程完成一个具体任务。
主流程像导演,子流程像专业执行者。
assets/images/ch01-main-subflow-architecture.png请检查素材路径一个子流程,只完成一个清晰目标。
判断方法很简单:子流程名称能不能准确概括里面的全部动作?
“处理业务”到底处理了什么?
让目录先讲清业务顺序。
不打开流程,也能先看懂项目骨架。
一级流程表达业务阶段,下级流程表达阶段内部步骤。
在影刀里,结构就体现在流程文件树中。
不打开任何流程,只看文件树,也应该大致知道项目如何运行。
流程、变量、元素、应用,
都要一眼看懂。
不要让接手人猜。
命名不是美观问题,而是排错、交接、复用和长期维护的成本问题。
assets/images/naming-clarity.png请检查素材路径一个叫“流程1”的流程,
出了问题以后会怎样?
坏命名不一定立刻报错,但会把成本推迟到排错、交接和修改时。
“流程1”执行失败
不知道失败的是登录、下载还是回写。
流程1.flow
流程2.flow
新建流程.flow
必须逐个打开才能知道用途。
tmp1
按钮1
variable
不知道数据来源,也不敢直接修改。
坏命名不会阻止流程运行,但会持续增加理解和维护成本。
先分清对象,
再决定怎么命名。
流程、变量、元素、应用,关注的信息并不相同。
流程
关注点:顺序与职责
前缀 + 序号 - 语义A-登录系统.flow
变量
关注点:业务含义与数据类型
业务含义 + 类型后缀订单编号_str
元素
关注点:页面位置与控件用途
页面_区域_元素订单页_筛选区域_查询按钮
应用
关注点:业务归属与版本
部门-应用概述_版本财务-费用报销流程_v2
从“只有我懂”,
变成“团队一眼看懂”。
流程1.flow
A-登录系统.flow
tmp1
订单编号_str
按钮1
登录页_登录按钮
新建应用
财务-费用报销流程_v2
从“需要解释”,变成“不打开也能理解”。
订单编号_str
登录页_账号输入框
财务-费用报销流程_v2
下面哪个名字,
交接给同事时不需要解释?
点击你认为更清晰的名称。
让流程今天能找到,
明天也能找到。
网页文字、列表顺序和页面结构都可能变化,稳定元素需要经得住变化。
assets/images/ch03-element-stability.png请检查素材路径坐标会变,
元素规则才稳定。
坐标记住的是屏幕位置,元素记住的是目标对象和定位条件。
窗口大小、分辨率、弹窗和列表位置变化,都会让坐标失效。
元素通过节点、属性、文本和层级规则识别目标,而不是只记住位置。
先检查元素,
再交给流程执行。
基础主线只做四件事:重命名、看条件、去动态、验唯一。
assets/images/ch03-element-name-and-match.png请检查素材路径捕获后及时修改元素名称,并确认当前找到 1 个元素。
先选对节点路径,
再选择定位属性。
节点告诉机器人“目标藏在哪一层”,属性告诉机器人“这一层里具体是哪一个”。
<div>区域、卡片、弹窗
<span>行内文本、状态
<p>段落、提示说明
<input>输入框、日期框
<button>查询、提交、保存
<a>链接、菜单、下载入口
<li>菜单项、列表项
<table>表格整体
<tr>表格行
<td>单元格
<iframe>嵌入的独立网页区域
div 订单页面div 筛选区域input 日期输入框button 查询按钮目标在 iframe 内时,
iframe 节点必须保留。
取消 iframe 节点后,机器人可能只在外层页面查找,最终导致元素未找到。
属性不是越多越好,
而是要稳定、可解释、能唯一定位。
判断属性是否适合长期使用,不能只看属性名称,更要看属性值的规律。
元素也要像流程一样,
按页面和场景归档。
元素越多,越不能靠记忆找;名称和分组要先替接手人解释清楚。
不是所有元素都上云,
高频稳定才沉淀。
云元素组适合跨应用、跨流程复用的公共元素,不适合临时页面里的偶发控件。
云元素组如何上传、
管理和复用?
按真实影刀界面理解:本地元素组上传到云,再加入其他应用使用。
从本地元素发起上传
在本地元素组菜单中选择“上传到云”。
能判断元素是否可靠,
才算掌握本章。
下面四题不是背概念,而是判断真实开发里该怎么处理。
流程拆开后,
数据不会自动流过去。
主流程和子流程一旦分开,就必须明确哪些数据内部使用,哪些数据需要显式传递。
调用流程,不等于数据自动传递。
变量的“全局”和“局部”,
说的是谁能看见这份数据。
先理解可见范围,再决定数据应该放在哪里。
这些过程数据不会自动进入子流程。
本流程可见主流程不能直接读取子流程内部变量。
本流程可见不是多个流程会用,
就一定要放全局。
先判断它是稳定共享配置,还是当前流程的过程数据。
适合全局变量
稳定 · 共享 · 配置类 · 不随单次业务频繁变化
适合局部变量
过程性 · 临时性 · 只服务当前流程 · 随流程结束而结束
主流程的局部变量,
子流程看不见怎么办?
流程参数负责把数据显式地交给另一个流程。
输入参数负责接收,
输出参数负责交回。
调用方必须传给子流程的数据。
B-下载文件.flow
子流程执行完成后返回给调用方的数据。
子流程先声明接口,
内部指令再使用参数。
参数必须先定义方向、类型和用途,进入子流程后才能被具体指令使用。
声明输入参数
B-下载文件.flow 先声明自己需要:下载路径_path、日期_str、下载文件标题_str。
设置变量是赋值,
调用流程是传参。
它们都涉及数据,但改变的是不同关系。
赋值
glv['文件保存地址_path']↓本次下载目录_path赋值 = 让一个变量获得新的值。
传参
B-下载文件.flow传参 = 让数据跨越流程边界。
数据传进去,
结果还要交回来。
输入和输出都明确,流程之间才形成完整、可追踪的数据链。
这份数据,
应该放在哪里?
根据共享范围、流程边界和数据方向做判断。
可控判断,
不可控捕获。
异常处理不是把流程全部包起来,而是让不同问题进入正确的处理路径。
先判断问题类型,
再选择处理方式。
业务结果、短暂问题和运行异常,
不是一回事。
正常业务分支
订单列表为空 · 订单已处理 · 没有待办
IF 判断 → 记录结果 → 正常出口 无数据通常是业务结果,不一定是异常。短暂可恢复问题
页面加载较慢 · 接口偶发超时 · 文件仍在下载
等待 → 有限重试 → 超限后捕获 再次执行可能成功,才值得重试。运行时异常
页面突然刷新 · 文件被占用 · 浏览器进程退出
Try-Catch → 留下现场 → 决定下一步 致命异常不能被悄悄吞掉。能在执行前判断,
就不要等它报错。
Try 负责尝试,
Catch 负责处理,
Finally 负责收尾。
Try 成功后跳过 Catch,但仍然进入 Finally。
循环处理时,
一条失败不应拖垮整批。
Try-Catch 保护当前订单,而不是包住整个订单列表。
主流程继续遍历,单条 Catch 隔离当前失败。
Catch 不是忽略错误,
而是记录异常并做出决定。
- 失败流程
- D1-处理单条订单.flow
- 失败步骤
- 点击提交按钮
- 异常信息
- 元素未找到
- 发生时间
- 2026-07-14 20:31:33
- 运行日志
- 已记录异常;截图需另加指令
- 处理决策
- 当前订单失败,继续下一条
只有再次执行可能成功,
才值得重试。
适合重试
页面未加载 · 接口偶发超时 · 文件仍在下载 · 网络短暂波动
原因可能随时间自动消失不适合重试
密码错误 · 字段缺失 · 定位失效 · 路径错误 · 权限不足
重复执行不会改变原因无论成功还是失败,
必须执行的动作放在 Finally。
执行前:资源仍被占用
- 浏览器:已打开
- Excel:已占用
- 临时文件:已创建
- 数据库:已连接
- 日志:未保存
执行后:资源已回收
- 浏览器:已关闭
- Excel:已释放
- 临时文件:已清理
- 数据库:已断开
- 日志:已保存
Finally 不是成功或失败分支,它是必须执行的资源回收区。
这个情况,应该判断、重试还是捕获?
通过增加日志,
增强对于流程的把控。
大部分技术报错,影刀已经记录了失败流程、失败指令和错误信息。
assets/images/ch07-system-run-log.png第一步不是猜原因,而是先确定失败位置。
排错的第一步,
是锁定哪条指令失败。
先从应用定位到流程,再从流程定位到具体指令。
assets/images/ch07-failed-instruction-location.png先准确描述失败位置,再分析失败原因。
系统日志知道程序怎么失败,
但不一定知道业务发生了什么。
系统日志已经知道
- 流程
- 主流程
- 指令
- 点击元素(web)
- 元素
- 登录按钮
- 错误
- 未找到元素
- 时间
- 2026-07-16 09:47:24
系统日志不一定知道
- 当前处理哪条数据、处于第几次循环?
- 当前页面是登录页还是业务页?
- 为什么此时需要点击登录按钮?
- 失败后继续、重试还是终止?
- 整批数据最终成功、失败、跳过多少条?
系统日志无法表达的业务状态,
才值得主动记录。
不要重复技术错误,只补充业务标识、阶段、判断原因和处理结果。
assets/images/ch07-print.png推荐格式
[业务标识] [业务阶段] [业务结果] [必要原因]
[第7行] [网页录入] [失败] 页面仍停留在登录页
[第8行] [数据检查] [跳过] 当前记录已存在
[本次运行] [结果汇总] 成功80,失败5,跳过15
不推荐:开始、这里到了、执行下一步、报错了、结束业务日志应该增加上下文,不能增加新的噪声。
日志定位失败位置,
断点和变量帮助寻找根因。
让流程停在问题发生前,再检查当时的数据和页面状态。
assets/images/ch07-breakpoint-debug.png日志定位位置,
回放还原页面过程。
运行回放需要提前开启,用于观察错误前页面经历了什么变化。
assets/images/ch07-run-playback.png这是运行回放的设置入口,不是播放器界面。
先读证据,再决定下一步。
影刀提示“未找到登录按钮”,第一步应该做什么?
系统日志已经记录技术错误,什么内容值得额外打印?
已经知道失败指令,但不知道变量为何错误,下一步用什么?
怀疑登录页被弹窗遮挡,哪类证据最直接?
批量任务结束时,最有价值的业务日志是?
修复后如何证明问题真的解决?
哪组信息构成完整排错证据?
交付不是
“跑通一次”
真正可交付的流程,要能验证结果、重复运行、定位问题,并由其他人接手。
单次成功只能证明当前场景能运行,不能证明应用已经可以交付。
交付前,
至少确认四件事。
不是检查代码看起来是否整齐,而是确认应用能否在真实环境中持续工作。
结果正确
- 输入与输出可以核对
- 成功、失败、跳过都有结果
- 关键字段符合业务规则
运行稳定
- 正常、空和异常数据均测试
- 单条失败不拖垮整批
- 浏览器、Excel 等资源正常释放
环境可用
- 路径、账号和运行参数明确
- 运行机器具备所需权限
- 正式环境实际测试通过
资料完整
- 输入模板和字段规则清楚
- 输出位置和结果字段清楚
- 接手人知道如何运行与查看结果
assets/images/ch08-runtime-parameters.png只测试正常数据,
等于没有完成测试。
交付前至少覆盖四类场景。
运行成功,
不代表业务结果正确。
还要核对数量关系,并确认第二次运行不会制造重复结果。
业务结果核对
重复运行安全
再次处理 95 条已成功数据
重复提交、重复通知、重复生成文件
5 条失败数据仍混在整批任务中
这种“重复运行仍不制造额外错误结果”的能力,技术上通常称为“幂等”。
现在,
这个应用真的可以交付了吗?
四类检查全部通过,才显示交付完成。
业务结果
待确认运行稳定
待确认运行环境
待确认交接资料
待确认
assets/images/ch08-delivery-guide.png