本文要点

不少 UiPath 项目有同一个生命周期:POC 两周跑通,演示会上效果好,上线三个月后运维群里开始天天有人问"机器人怎么又停了"。这时候回头看流程设计,往往挑不出大毛病,问题全散在一些当时不起眼的取舍上。

把自动化做成产品,差的不是建模,是工程。这篇把三件事讲透:选择器怎么做得抗震、REFramework 为什么值得用、异常怎么分流处理。顺带说一下 2026 年平台侧新增的那些能力,哪些是真能省事,哪些只是换个地方维护。

一、机器人为什么会"上线即巅峰"

POC 阶段的数据是 clean subset:样本干净、界面稳定、只跑几十条。上线之后进来的是全量数据、多个业务人员的操作习惯、不定期更新的业务系统版本。故障会长这样:

故障类型典型表现根因该谁处理
界面变了报 SelectorNotFoundException,元素找不到业务系统改版、动态属性、分辨率不同开发侧:选择器策略
数据脏了某几条数据处理失败,其余正常必填字段为空、金额超审批阈值、客户不存在业务侧:规则与数据治理
环境抽了应用崩溃、登录失败、网络超时会话过期、并发抢占、服务抖动运维侧:重试与告警

这三类故障的处理方式完全不同:界面的问题要改选择器或加自愈,数据的问题应该标记后跳过交给业务,环境的问题才需要重开应用再来一次。把它们一律塞进"报错就重试",是很多项目的通病:一条脏数据被反复重试几十遍,真正的环境故障反而被淹没在日志里。

二、选择器:投入半小时,省掉几百次救火

2.1 录制出来的选择器几乎一定要改

UiPath 录制器的目标是"当下能用",所以倾向把所有能抓到的属性都塞进去,包括随机数 id、带时间戳的页面标题、以及 idx 序号。这些属性在开发环境稳定,换个账号登录、换个环境部署、甚至业务系统发个小版本,它们就变了。

举个例子。下面是录制出来的样子,改完之后是另一个样子:

# 录制出来的:,id 里带随机数,page title 里含录制时间
<webctrl tag='INPUT' id='txtOrder_1748329155432' parentid='form1' />
<html title='订单查询 - 2026-09-12 14:23:07' />

# 改过之后:改用语义属性,抖动部分用通配符并前后锚定
<webctrl tag='INPUT' aaname='订单编号' parentid='form1' />
<html title='订单查询 - *' />

这个改动花不了几分钟,但它是"这台机器人能不能撑过三个版本更新"的分界线。

2.2 四条改法

如果属性值的变化有规律,比如 client-ID-12345 只有末尾数字在变,用正则比堆多个通配符干净,在 selector 里启用 matching:name='regex' 即可。

2.3 锚点与相对定位:表格行的解法

当目标元素本身的属性不可靠,但它在某个稳定元素旁边时,用 Anchor Base 或 Find Relative Element,把它锚定到一个静态标签上,再按相对位置(左/右/上/下、偏移距离)去找。

表格里的"处理"按钮几乎没有稳定的 id,但同一行的"订单号"是稳定的。以订单号为锚点找同行按钮,比试图给按钮本身编选择器可靠得多。位置关系不变、属性变了,选择器依然成立。

2.4 完整选择器还是部分选择器

完整选择器从顶层窗口一路描述到目标元素;部分选择器只在 Attach Browser / Attach Window / Open Application 这样的容器内部生效。推荐用容器加部分选择器,理由有四个:

2.5 什么时候该认输

有些场景选择器就是不合适,别硬磕:

2.6 先判断再操作,而不是事后重试

用 Element Exists、Wait Element Vanish、Check App State 做前置判断,配合合理的 TimeoutMS 与 DelayBefore,比"点了再说、报错再重试"稳得多。等待元素的状态要比等待固定秒数好:页面慢的时候不会不够用,页面快的时候也不会白白浪费时间。

实在要包 Try Catch 时,别把 Catch 留空。空 Catch 是"机器人停了但没人知道为什么"这类事故的主要来源。

2.7 上线前的自检清单

三、REFramework:把"能跑"变成"能长期跑"

3.1 为什么 For Each Row 撑不住规模化

小机器人用 Sequence 加 For Each Row 加 Try Catch 完全够用。但流程一旦进入日常生产,三个问题会集中爆发:

REFramework 就是把这三件事做成默认能力的模板:每条交易独立处理、状态写回、失败可重跑。

3.2 四个状态各自负责什么

状态职责说明
Init读配置与资产、登录应用系统异常后回到这里重开应用,拿干净状态
Get Transaction取一条待办数据取自 Orchestrator 队列或本地 DataTable
Process处理这一条业务逻辑几乎都写在这个对应的 workflow 里
End关闭应用、发送总结干净退出

这里有个容易被忽略的设计:系统异常之后,REFramework 的默认路径是回到 Init 重开应用,而不是原地重试同一个操作。背后的判断很实在,多数系统异常意味着机器人当前处在一个不干净的状态(浏览器卡了一半、应用处在未知页面),原地重试多半还会失败。

3.3 Config.xlsx 的三张表

表放什么举例
Settings常规配置OrchestratorQueueName、邮件通知人
Constants技术常量,很少变MaxRetryNumber、各类 Timeout、列索引
AssetsOrchestrator 资产名凭证、URL 等敏感或常变的值

外部化的收益在日常运维里最能体现:改一个超时阈值不需要重新打包发布;Dev、UAT、Prod 用不同的配置;业务同事也能改部分值而不用走开发流程。反过来,把文件路径、超时、邮箱硬编码在 workflow 里,每次调整都要过一遍发布流程,成本会在半年后集中体现出来。

3.4 Orchestrator 队列的价值

同样是把交易一条条跑,队列比本地 DataTable 多出四件事:

3.5 异常分流:这一步决定维护成本

异常类型代表含义正确动作重试
BusinessRuleException数据本身有问题标记 Failed(Business),写清原因,处理下一条不重试
Application / System Exception环境或应用出问题截图记录,回到 Init 重开应用后再试同一条重试至上限

判断标准很简单:重试一次会改变结果吗?订单编号缺失,重试一百次还是缺失;而应用没起来,重试一次大概率就好了。前者是业务的账,后者才是机器人的账。

业务异常那一支别急着发告警。批量脏数据会瞬间灌满收件箱,正确做法是批次结束时汇总成一份清单发给业务负责人,让它回归数据治理的流程。

3.6 重试的两个坑

坑一:SetTransactionStatus 调得太早。这个活动一旦调用,事务就交还给 Orchestrator,后续重试由队列自己的策略接管。想自己控制重试次数,就应该在重试耗尽之后再调用它,否则框架里的重试计数失去意义。

坑二:双重重试。自己在 Process 里写了重试循环,Orchestrator 队列又设了 max retries,两边叠加,一条坏数据可能被跑很多遍。做法是把重试逻辑收敛在一处:如果由流程控制,队列级的 max retries 就设为 1。

还有个细节:重试前先分辨异常是不是意味着会话已断。如果只是偶发抖动,回到 Process 重试同一条就够;如果异常明确指向会话失效(比如登录态丢失),那就要走 Init 重开应用。

四、可观测性:出事能不能十分钟定位

4.1 日志的粒度

4.2 失败必带截图

异常处理里加 Take Screenshot 几乎是零成本高回报的习惯。三个月后回头看一条"元素未找到",一张当时的截图胜过二十行日志。

4.3 Orchestrator 侧的排障路径

出问题时的标准动作:Job 页看这次运行整体状态,机器人日志定位到具体交易,队列页看失败分布。启用了 Healing Agent 的项目里,它尝试自愈失败的原因也可以在机器人日志中查到。

4.4 告警要收敛

分两级:单笔业务异常汇总到批次结束发一次;系统异常达到阈值或整个 Job 失败时立即发。每天都发的邮件,一周之后就没人看了。

五、2026 的新变量:平台开始替你做一部分事

前面的地基打好之后,再看这一年平台侧的更新,会更容易判断哪些真有用。

5.1 Healing Agent:让选择器自己爬起来

界面微调导致元素找不到时,它在运行时尝试重新定位,不必等人改选择器再打包发布。失败原因可以在 Orchestrator 的机器人日志里查看。要说清楚边界:它擅长应对位置或属性的小幅变化,遇到结构性改版(换了控件、重组了页面)同样没辙。

5.2 ScreenPlay:把某些界面活从选择器依赖里摘出来

用自然语言描述任务,把一部分 UI 脆弱性转移到运行时理解上。合适的地方是步骤直白、界面经常变的短流程;核心长流程仍然建议用明确的自动化活动,把确定性握在自己手里。

5.3 Maestro、Agent Builder 与 Coded Agents

Maestro 负责编排多步、长时、需要人机协作的流程;其中的 Case Management 面向理赔、贷款、争议、调查这类有目标、需要判断的工作,AI 与规则先把能推进的部分推完,只在确实需要人工判断时才转到人手上。Agent Builder 给非技术角色一个低代码的构建入口;Coded Agents 面向开发者,支持 MCP 插件接外部服务,并配了供试验的沙箱环境。Context Grounding 用于把企业自己的数据作为推理依据。

2026 年 9 月的版本里,会话式聊天与语音智能体可以用 Maestro Flow 来建模,支持按意图路由、在专家智能体之间转接、确定性回复等能力。这一步的意义在于:对话类自动化从"一个 prompt"变成了"可观测、可干预的流程对象"。

5.4 IXP:把文档这个老麻烦往前推了一步

非结构化文档一直是自动化的硬骨头。现在承担这类工作的部分从规则模板转到了智能体:Autopilot 生成抽取结构,Extraction Agents 处理复杂表格与跨页字段,Validation Agents 做校验环节。合同比对、系统记录核对这类场景收益明显。

5.5 本地化这条路现在走得更通了

以往上云是能力完整的前提,本地部署意味着功能打折。现在 Automation Suite 可以把 Maestro、Agent Builder、GenAI Activities、Context Grounding、ScreenPlay、Healing Agent 等能力部署在企业自己的基础设施上,模型侧可选云端服务,也可以选自托管的开源模型。对数据不能出内网的场景,这比"先上云再说"现实得多。

5.6 一句泼冷水的话

这些能力替代的是重复劳动,不是治理责任。谁对机器人的行为负责、怎么审计它的决策、出错时怎么兜底,仍然是甲方自己的设计任务。用上更好的工具,不代表可以省掉前面四章的那些规范。

六、落地清单与常见误区

6.1 六步上线清单

  1. 定规范。命名规则(动词加对象)、变量前缀(str、int、dt)、参数方向(in_、out_、io_),动手前就定好并同步给团队。
  2. 搭骨架。用 REFramework 起项目,把 Config.xlsx 三张表填好,队列和资产在 Orchestrator 侧先建出来。
  3. 磨选择器。按第二章的清单逐条过,UI Explorer 验证。
  4. 写分流。业务判断抛 BusinessRuleException,环境问题留给框架的系统异常处理。
  5. 补观测。日志四级、失败截图、告警分两级。
  6. 跑非开发环境。用真实账号、真实分辨率、全量数据试跑一轮。

6.2 四个常见误区

七、常见问题(FAQ)

Q1:小流程也必须用 REFramework 吗?

不一定。跑一次性的、数据量小的临时脚本,Sequence 足够。判断标准是这条流程要不要长期在生产环境里跑、有没有"跑一半崩了怎么办"的困扰。只要有,就值得用。

Q2:MaxRetryNumber 一般设多少?

多数场景 2 到 3 次。设多了意义不大:真正偶发的问题通常一两次内就自愈,重试三次还失败的,基本属于需要人介入的故障,反复重试只是拖延时间和占用机器人。同时记得把队列级的 max retries 设为 1,避免双重重试。

Q3:业务异常要不要告警?

不建议逐条发。批量脏数据会瞬间灌满收件箱,之后真正重要的告警也没人看了。做法是在批次结束时汇总成清单,发给业务侧的负责人,让它回归数据治理流程。系统异常或 Job 失败才需要立即告警。

Q4:Citrix 里的应用有没有更省事的办法?

有。先请 Citrix 管理员把 hosted app 的 accessibility 打开,能用标准选择器就别上图像识别。确实不行再退到 Computer Vision 活动或图像自动化,并确保运行分辨率不低于录制时的分辨率。

Q5:Healing Agent 能让选择器不用维护吗?

不能。它擅长处理属性或位置的小幅漂移,遇到控件替换、页面重组这类结构性改版同样失效。把它看成一道减速带,而不是免检通道:它能明显减少小改动引发的救火,但第二章那套选择器规范仍然要照做。

八、小结

自动化项目的分水岭,往往出现在"能不能长期跑"而不是"能不能跑通"。把三件事做扎实就够了:选择器做抗震、交易用框架管理、异常按类型分流。这三件事都不难,难在它们不像新功能那样有存在感,容易被跳过。

如果你正在规划 UiPath 的落地路径,可以结合 企业 RPA 与超自动化选型实践 一起看,那篇讲平台选型与建设路径,这篇讲上线之后怎么让它不出事。涉及智能体部分的治理口径,可参考 智能体的可信执行 与 AI 智能体安全风险与治理。

需要 UiPath 自动化项目的评估或落地支持?

我们可协助企业梳理可自动化流程的优先级、搭建 UiPath 开发与运维规范、设计 Orchestrator 结构与异常分流策略,并提供从试点到规模化推广的实施服务。

📞
咨询热线
400-833-4546
📧
商务邮箱
内容维护:VISBAT维思贝特
VISBAT 维思贝特是网络安全与自动化解决方案提供商,专注于零信任、SASE、OT/ICS 安全、端点安全与企业安全架构,为企业提供从评估、选型到落地的一体化能力。本文为面向企业 IT 与自动化团队的技术参考,具体功能、活动与版本以 UiPath 官方文档与实际环境评估为准。