Logic 逻辑模块
逻辑模块提供流程控制能力,包括条件判断、循环、跳转等。
条件判断 (If/Else/EndIf)
根据条件执行不同的操作路径。
模块结构
条件判断由三个模块组成:
- 如果 - 设置条件
- 否则 - 条件不满足时的执行分支(可选)
- 结束如果 - 标记条件块的结束
条件运算符
通用运算符:
| 运算符 | 说明 |
|---|---|
| 存在 | 变量是否存在 |
| 不存在 | 变量是否不存在 |
文本专用:
| 运算符 | 说明 |
|---|---|
| 为空 | 文本是否为空 |
| 不为空 | 文本是否非空 |
| 等于 | 文本相等 |
| 不等于 | 文本不相等 |
| 包含 | 是否包含子串 |
| 不包含 | 是否不包含子串 |
| 开头是 | 是否以指定文本开头 |
| 结尾是 | 是否以指定文本结尾 |
| 匹配正则 | 是否匹配正则表达式 |
数字专用:
| 运算符 | 说明 |
|---|---|
| 大于 | 数字大于 |
| 大于等于 | 数字大于等于 |
| 小于 | 数字小于 |
| 小于等于 | 数字小于等于 |
| 介于 | 数字在范围内 |
布尔专用:
| 运算符 | 说明 |
|---|---|
| 为真 | 布尔值为 true |
| 为假 | 布尔值为 false |
输入参数
| 参数 | 类型 | 说明 |
|---|---|---|
| 输入 | 任意/魔法变量 | 要判断的值 |
| 条件 | 枚举 | 条件运算符 |
| 比较值 1 | 任意/魔法变量 | 比较值(部分运算符需要) |
| 比较值 2 | 数字/魔法变量 | 范围上限("介于"运算符需要) |
输出参数
| 参数 | 类型 | 说明 |
|---|---|---|
| result | 布尔值 | 条件判断结果 |
使用示例
# 简单条件
1. 如果 ${click.success} 为真
2. 延时 1000ms
3. 否则
4. 提示 "点击失败"
5. 结束如果
# 文本判断
1. 如果 ${ocr_result.text} 包含 "验证码"
2. 设置剪贴板 ${extract_code.text}
3. 延时 2000ms
4. 否则
5. 提示 "未找到验证码"
6. 结束如果
# 数字范围
1. 如果 ${random_number} 介于 1 到 10
2. 提示 "数字在 1-10 范围内"
3. 结束如果
循环 (Loop/EndLoop)
重复执行一组操作固定的次数。
输入参数
| 参数 | 类型 | 说明 |
|---|---|---|
| 重复次数 | 数字/魔法变量 | 循环执行的次数 |
输出参数
| 参数 | 类型 | 说明 |
|---|---|---|
| loop_index | 数字 | 当前循环索引(从 1 开始) |
| loop_total | 数字 | 循环总次数 |
使用示例
# 重复点击直到成功(最大5次)
1. 循环 5
2. UI选择器 @Button[text='加载更多']
3. 点击 ${selector.element}
4. 延时 1000ms
5. 如果 ${click.success} 为真
6. 跳出循环
7. 结束如果
8. 结束循环
# 使用循环索引生成序号
1. 循环 10
2. 设置剪贴板 "第 ${loop_index} 次"
3. 延时 500ms
4. 结束循环
跳出循环 (BreakLoop)
提前结束当前循环。
使用示例
1. 循环 100
2. UI选择器 @TextView[text='完成']
3. 如果 ${selector.found} 为真
4. 跳出循环 # 找到后提前结束
5. 结束如果
6. 延时 500ms
7. 结束循环
继续循环 (ContinueLoop)
跳过后续操作,直接进入下一次循环。
使用示例
1. 循环 10
2. 获取剪贴板 ${clipboard}
3. 如果 ${clipboard} 为空
4. 继续循环 # 跳过本次循环的剩余操作
5. 结束如果
6. 处理剪贴板内容
7. 结束循环
跳转 (Jump)
跳转到工作流的指定位置继续执行。
输入参数
| 参数 | 类型 | 说明 |
|---|---|---|
| 目标步骤 | 步骤选择器 | 要跳转到的目标位置 |
注意: 此模块会改变工作流的执行顺序,需谨慎使用。
停止工作流 (StopWorkflow)
立即停止当前工作流的执行。
输入参数
| 参数 | 类型 | 说明 |
|---|---|---|
| 停止原因 | 文本(可选) | 停止的原因描述 |
停止并返回 (StopAndReturn)
停止当前工作流,并返回到调用它的父工作流。
使用场景: 在被调用的子工作流中使用,完成特定任务后返回主工作流。
调用其他工作流 (CallWorkflow)
在当前工作流中调用另一个工作流。
输入参数
| 参数 | 类型 | 说明 |
|---|---|---|
| 工作流 | 工作流选择器 | 要调用的目标工作流 |
| 参数 | 字典(可选) | 传递给目标工作流的参数 |
输出参数
| 参数 | 类型 | 说明 |
|---|---|---|
| result | 任意 | 被调用工作流的返回值 |
使用示例
# 主工作流
1. 延时 1000ms
2. 调用其他工作流 "登录流程"
3. 如果 ${call_workflow.result} 为真
4. 提示 "登录成功"
5. 结束如果
# 被调用的"登录流程"工作流
1. UI选择器 @EditText[index=0]
2. 文本输入 'username'
3. UI选择器 @EditText[index=1]
4. 文本输入 'password'
5. UI选择器 @Button[text='登录']
6. 点击
7. 停止并返回 ${click.success}
嵌套示例
双重循环 + 条件判断
1. 循环 3 # 外层循环 3 次
2. 延时 2000ms
3. 循环 5 # 内层循环 5 次
4. UI选择器 @Button[text='刷新']
5. 点击 ${element}
6. 延时 1000ms
7. 如果 ${click.success} 为真
8. 提示 "刷新成功"
9. 否则
10. 提示 "刷新失败"
11. 结束如果
12. 结束循环
13. 如果 ${loop_index} >= 3
14. 跳出循环
15. 结束如果
16. 结束循环