执行指令
执行指令 用于在一个节点中执行 XML 编排片段。它适合高级用户把已有指令按 XML 写入节点,并在工作流运行时按顺序执行。
指令标识:ExecuteCommandNode
指令类型:通用指令
指令描述:通过 XML 编排动态执行一个或多个工作流指令
先选使用方式
Section titled “先选使用方式”工作流支持「可视化编排」和「代码编排」两种创建方式。执行指令 本身是一个可视化节点,节点内填写 XML;如果需要通过代码创建流程,也应只把它当作执行 XML 片段的节点来使用。
| 方式 | 怎么用 | 适合人群 |
|---|---|---|
| 可视化编排(推荐先学) | 拖入「执行指令」节点,在右侧表单选择 XML 并填写代码内容 | 熟悉平台指令标识、需要动态组合多个节点的用户 |
| 代码编排(Python) | 在 Python 流程中优先调用具体业务指令;需要动态片段时使用「执行指令(XML)」节点承载 XML | 需要复用脚本、批量生成流程或接入外部 XML 片段的用户 |
第一次使用建议先用普通可视化节点跑通流程,再把确实需要动态生成的部分迁移到 执行指令。这样更容易定位是业务参数问题,还是 XML 拼接问题。
什么时候用?
Section titled “什么时候用?”- 需要根据上游结果动态生成一段 XML 指令编排。
- 需要一次执行多个已有指令,但普通画布节点不方便复用这段组合。
- 需要把外部系统生成的 XML 流程片段接入工作流。
- 需要迁移或调试已有 XML 编排。
不建议把普通流程全部塞进 执行指令。普通节点日志更直观,也更适合新手逐步排查问题。
- XML 格式合法,标签闭合、引号和特殊字符都已处理。
- 指令名称大小写与对应指令文档中的「指令标识」一致。
- 每个指令的参数名、类型和输出变量都符合对应指令文档。
- 涉及点击、输入、提交等 UI 动作时,仍然需要配合等待、元素定位和异常处理。
- 高风险动作不要由动态 XML 直接生成并执行,建议增加人工确认或白名单约束。
可视化编排:从 0 到跑通
Section titled “可视化编排:从 0 到跑通”下面用一个常见场景演示:打开后台页面并等待主内容区域出现。按 4 步即可跑起来:
- 在工作流画布中添加 执行指令 节点。
- 在 代码类型 中选择 XML。
- 在 代码内容 中填写 XML 编排片段:
<OpenUrl url="https://admin.example.com/dashboard" /><WaitForElementPresent selector="//*[@id='main-content']" timeout="10000" outKey="isReady"/>- 点击运行,确认页面已打开,且等待节点返回成功结果。
| 界面名称 | 代码属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| 代码类型 | codeType | Enum | 是 | - | 要执行的代码类型。本文只建议使用 XML 编排,选择 XML 后在代码内容中填写指令 XML。 |
| 代码内容 | codeContent | String | 是 | - | 要执行的 XML 内容,不能为空。XML 中的指令名、参数名和参数值需符合对应指令文档。 |
| 入参 | inputList | String | 否 | - | 高级选项。传递给执行内容的输入参数,JSON 格式,例如 [{"name":"input1","value":"test"}]。 |
| 出参 | outputList | String | 否 | - | 高级选项。需要从执行结果中提取的输出参数,JSON 格式,例如 [{"name":"output1"}]。 |
| 是否发送消息 | sendMsgFlag | Boolean | 否 | True | 是否发送节点消息。 |
| 界面名称 | 代码属性名 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| 将结果保存至 | outKey | String | 否 | 存储执行结果的输出变量名,用于保存提取到的输出参数集合,例如 executeResult。 |
- XML 能被正常解析。
- XML 中每个指令都能按顺序执行。
- 关键输出变量能在下游节点中引用。
- 运行日志能定位到具体执行的指令和结果。
运行后你会看到(以上面场景为例):
- 浏览器打开
https://admin.example.com/dashboard。 - 等待节点找到
//*[@id='main-content'],输出变量isReady为成功结果。 - 如果配置了
outKey,下游节点可以引用保存的执行结果。
该节点失败处理默认为「报错中止」(STOP_ON_FAILURE):任一内部指令执行出错都会中断当前流程并报错,需要静默跳过时请显式配置失败处理策略。
| 现象 / 报错原文 | 可能原因 | 处理建议 |
|---|---|---|
| XML 解析失败 | 标签未闭合、引号错误、特殊字符未转义 | 先检查 XML 格式,再处理变量拼接 |
| 提示找不到指令 | 指令名称大小写错误或指令不存在 | 对照对应指令页的指令标识 |
| 参数无效 | 参数名或类型不符合指令定义 | 回到具体指令页核对参数表 |
| 后续节点拿不到结果 | 未配置 outKey、outputList,或变量名不一致 | 明确每个关键输出变量,并保持上下游变量名一致 |
Python 代码编排
Section titled “Python 代码编排”代码编排以 Python 为主。普通场景建议直接调用具体业务指令;只有确实需要动态片段时,再使用执行指令(XML)。
# 推荐:在 Python 中直接调用具体业务指令,便于排查和复用bots.openUrl(url="https://admin.example.com/dashboard")bots.waitForElementPresent( selector="//*[@id='main-content']", timeout=10000, outKey="isReady",)如果你想在工作流中通过节点动态编排指令,可使用 执行指令(XML)节点。
Q1:普通用户是否需要使用这个节点?
Section titled “Q1:普通用户是否需要使用这个节点?”A: 通常不需要。普通流程优先使用可视化节点或 Python 直接调用具体指令,只有需要动态生成 XML 或迁移已有 XML 片段时再使用。
Q2:XML 中可以写多个指令吗?
Section titled “Q2:XML 中可以写多个指令吗?”A: 可以。多个指令会按 XML 中的顺序执行,但每个指令都必须使用正确的指令标识和参数名。
Q3:为什么不建议把整条流程都写进一个执行指令节点?
Section titled “Q3:为什么不建议把整条流程都写进一个执行指令节点?”A: 这样会降低可读性,也会让节点级日志变少。排查点击失败、等待超时或变量缺失时,普通节点更直观。
Q4:特殊字符怎么处理?
Section titled “Q4:特殊字符怎么处理?”A: XML 中的特殊字符需要按 XML 规则处理;动态拼接时建议先打印最终 XML,再放入节点运行。