08调用动作组
动作组功能使用教程
概述
动作组是一个强大的功能模块化系统,允许用户将常用的动作序列组织成可重用的组件。通过动作组,可以实现代码复用、简化脚本结构、提高维护效率,为复杂的自动化场景提供更清晰的组织方式。
支持的功能特性
- 动作组调用: 在脚本中调用预定义的动作组
- 嵌套循环: 动作组内支持独立的循环控制
- 修饰器系统: 提供重试、超时、性能监控等增强功能
- 作用域管理: 支持私有和全局两种作用域
- 随机执行: 支持动作组级别的随机执行概率控制
核心概念
动作组 vs 直接编写动作
| 特性 | 直接编写动作 | 动作组模式 |
|---|---|---|
| 代码复用 | 需要重复编写相同动作序列 | 一次定义,多次调用 |
| 维护性 | 修改需要在多处更新 | 集中维护,统一修改 |
| 可读性 | 脚本冗长,难以理解主要流程 | 脚本清晰,突出业务逻辑 |
| 模块化 | 功能耦合,难以独立测试 | 模块独立,便于单独测试 |
| 配置复杂度 | 简单 | 需要额外的组织和管理 |
动作组的工作原理
- 定义阶段: 创建动作组,定义包含的动作序列
- 调用阶段: 在脚本中通过
调用动作组动作类型调用动作组 - 执行阶段: 系统按顺序执行动作组内的所有动作
- 返回机制: 动作组执行完成后返回调用位置继续执行
- 错误处理: 支持动作组级别的错误处理和重试机制
作用域类型
私有动作组
- 绑定: 只能在特定脚本中使用
- 管理: 与脚本一起保存和管理
- 适用: 脚本特定的功能模块
全局动作组
- 共享: 可在所有脚本中使用
- 独立: 独立存储和管理
- 适用: 通用的功能模块
动作组创建和管理
创建动作组
1. 进入动作组管理界面
通过以下路径进入: - 主界面 → 脚本管理 → 动作组管理 - 或在脚本编辑时,通过动作配置界面访问
2. 创建新动作组
点击 “创建动作组” 按钮: - 系统将显示动作组创建向导 - 可选择创建私有或全局动作组
3. 配置基本信息
动作组名称: - 输入有意义的名称,如 “登录流程”、”数据清理” - 名称应该简洁明了,便于识别用途
作用域选择: - 私有动作组: 绑定到当前脚本 - 全局动作组: 可在所有脚本中使用
描述说明: - 添加动作组的功能描述 - 说明使用场景和注意事项
4. 添加动作序列
在动作组编辑界面: - 点击 “添加动作” 选择要添加的动作类型 - 配置每个动作的具体参数 - 支持拖拽调整动作执行顺序 - 可以添加分组标签组织动作
动作组分类管理
分类系统
动作组支持分类管理,便于组织和查找:
默认分类:
- 系统功能类
- 界面操作类
- 数据处理类
- 网络请求类
- 文件操作类
自定义分类: - 可以创建自定义分类 - 支持分类颜色标识 - 支持分类展开/折叠
分类操作
创建分类:
分类信息:
├── 分类名称:如 "登录相关"
├── 描述说明:分类用途说明
├── 颜色标识:便于视觉区分
└── 排序顺序:在列表中的显示顺序
分配动作组到分类: - 在动作组编辑界面选择分类 - 支持批量分配操作 - 可以快速筛选和查找
配置示例
示例1: 登录流程动作组
基本信息: - 名称: “用户登录流程” - 作用域: 全局动作组 - 分类: 系统功能类 - 描述: 通用的用户登录处理流程
动作序列:
动作1: 文字识别->点击 - 识别并点击"登录"按钮
└── 检测目标: ["登录", "Login", "登陆"]
└── 失败处理: 跳转到错误处理
动作2: WAIT - 等待登录界面加载
└── 等待时间: 2秒
└── 等待类型: 固定等待
动作3: 文字识别->检测 - 检测是否登录成功
└── 检测目标: ["个人中心", "用户名", "退出"]
└── 成功后操作: 无操作
└── 失败后操作: 执行动作组 "登录失败处理"
示例2: 数据清理动作组
基本信息: - 名称: “清理缓存数据” - 作用域: 全局动作组 - 分类: 系统功能类
动作序列:
动作1: 打开APP - 打开设置应用
└── 应用包名: com.android.settings
动作2: 文字识别->点击 - 点击存储选项
└── 检测目标: ["存储", "Storage"]
动作3: 文字识别->点击 - 点击清理缓存
└── 检测目标: ["清理缓存", "Clear Cache"]
动作4: 文字识别->点击 - 确认清理
└── 检测目标: ["确定", "OK", "确认"]
动作组调用
基本调用方式
在脚本中添加 调用动作组 动作:
1. 选择动作组调用类型
在动作配置界面选择: - 动作类型: 调用动作组 - 系统将显示动作组调用配置界面
2. 选择要调用的动作组
动作组选择器: - 显示所有可用的动作组(私有 + 全局) - 按分类组织显示 - 支持搜索和筛选功能 - 显示动作组的基本信息预览
3. 配置调用参数
基本配置:
动作组调用配置:
├── 动作组ID:选择要调用的具体动作组
├── 调用描述:可选的调用说明
└── 执行顺序:在当前脚本中的执行位置
高级配置:
高级选项:
├── 随机执行:是否启用随机执行概率
├── 执行概率:随机执行的概率值(0.0-1.0)
├── 超时设置:动作组执行的最大时间限制
├── 错误处理:执行失败时的处理策略
└── 返回处理:执行完成后的后续操作
随机执行控制
动作组调用支持两个层次的随机执行控制:
1. 调用层随机控制
在脚本中调用动作组时配置:
随机执行配置:
├── 启用随机:是否开启调用层随机执行
├── 执行概率:0.0(永不执行)到 1.0(总是执行)
├── 随机算法:基于上下文的智能随机
└── 日志记录:记录随机决策过程
配置示例:
动作: 调用动作组
动作组: "用户登录流程"
随机执行配置:
启用随机: true
执行概率: 0.7 # 70%概率执行
说明: 70%概率执行登录流程
2. 动作组自身随机控制
在动作组定义时配置:
动作组自身随机配置:
├── 启用状态:动作组本身是否支持随机执行
├── 执行概率:动作组自身的执行概率
├── 优先级:与调用层随机的关系
└── 组合逻辑:两层随机如何结合
双重随机逻辑: 1. 首先检查调用层随机设置 2. 如果调用层随机通过,再检查动作组自身随机 3. 只有两层都通过才会实际执行动作组 4. 实际执行概率 = 调用层概率 × 动作组自身概率
调用示例
示例1: 简单调用
动作类型: 调用动作组
动作组: "用户登录流程"
随机执行: 关闭
说明: 无条件执行登录流程
示例2: 概率调用
动作类型: 调用动作组
动作组: "数据清理动作组"
随机执行配置:
启用随机: true
执行概率: 0.3 # 30%概率执行
说明: 30%概率执行数据清理
示例3: 条件调用链
# 脚本中的动作序列
动作1: 文字识别->检测 - 检测内存使用情况
└── 检测目标: ["内存不足", "空间不够"]
└── 成功后操作: 执行动作组 "内存清理流程"
动作2: 调用动作组 - 调用清理动作组
└── 动作组: "内存清理流程"
└── 随机执行: 关闭
高级功能
修饰器系统
动作组支持强大的修饰器系统,提供各种增强功能:
1. 重试修饰器 (RETRY_ON_FAILURE)
功能描述: 当动作组执行失败时自动重试
配置参数:
重试配置:
├── 最大尝试次数:总共尝试执行的次数(默认3次)
├── 重试延迟:每次重试之间的等待时间(毫秒)
├── 退避倍数:重试延迟的递增倍数(默认1.5)
└── 重试条件:触发重试的特定错误类型
配置示例:
修饰器类型: RETRY_ON_FAILURE
启用状态: true
重试配置:
最大尝试次数: 5
重试延迟: 2000ms
退避倍数: 2.0
重试条件: ["OCR识别失败", "网络超时"]
工作机制: 1. 动作组首次执行失败时触发重试 2. 等待指定延迟时间后重新执行 3. 每次重试的延迟时间按退避倍数递增 4. 达到最大尝试次数后停止重试
2. 性能监控修饰器 (PERFORMANCE_MONITOR)
功能描述: 监控动作组的执行性能指标
配置参数:
性能监控配置:
├── 启用时间统计:记录执行耗时
├── 启用内存跟踪:监控内存使用情况
├── 报告阈值:超过此时间才生成报告(毫秒)
├── 保存到文件:是否将性能数据保存到文件
└── 报告格式:性能报告的输出格式
监控指标: - 执行开始时间 - 执行结束时间 - 总执行耗时 - 内存使用峰值(可选) - 执行成功率
3. 超时控制修饰器 (TIMEOUT_CONTROL)
功能描述: 为动作组设置最大执行时间限制
配置参数:
超时控制配置:
├── 超时时间:最大执行时间(毫秒)
├── 超时处理:超时后的处理策略
├── 警告阈值:接近超时时的警告时间
└── 强制终止:是否强制终止超时的执行
超时处理策略: - 立即终止: 超时后立即停止执行 - 完成当前动作: 允许当前动作完成后停止 - 记录并继续: 记录超时但继续执行
4. 条件执行修饰器 (CONDITIONAL_EXECUTION)
功能描述: 根据预设条件决定是否执行动作组
配置参数:
条件执行配置:
├── 条件列表:需要检查的条件集合
├── 逻辑关系:条件之间的逻辑关系(AND/OR)
├── 跳过策略:条件不满足时是否跳过执行
└── 失败处理:条件检查失败时的处理方式
条件类型: - OCR检测条件 - OpenCV图像识别条件 - 系统状态条件 - 自定义脚本条件
5. 钩子修饰器 (BEFORE_AFTER_HOOKS)
功能描述: 在动作组执行前后插入自定义动作
配置参数:
钩子配置:
├── 前置钩子:执行前运行的动作列表
├── 后置钩子:执行后运行的动作列表
├── 成功钩子:执行成功时运行的动作
├── 失败钩子:执行失败时运行的动作
└── 钩子超时:钩子执行的超时时间
钩子类型说明:
前置钩子 (Before Hooks): - 在动作组主体执行前运行 - 可用于环境准备、状态检查等 - 前置钩子失败会影响主体执行
后置钩子 (After Hooks): - 在动作组主体执行后运行 - 无论成功失败都会执行 - 可用于资源清理、状态恢复等
成功钩子 (Success Hooks): - 仅在动作组成功执行后运行 - 可用于成功后的特殊处理
失败钩子 (Failure Hooks): - 仅在动作组执行失败后运行 - 可用于错误处理、回滚操作等
6. 元素存在检查修饰器 (ELEMENT_EXISTENCE_CHECK)
功能描述: 在执行前检查特定界面元素是否存在
配置参数:
元素存在检查配置:
├── 检测类型:OCR文字检测或OpenCV图像检测
├── 检测目标:要检测的文字或图像
├── 存在时行为:元素存在时的处理策略
├── 不存在时行为:元素不存在时的处理策略
└── 检测超时:元素检测的最大等待时间
修饰器组合使用
多个修饰器可以同时使用,形成功能强大的执行控制链:
组合示例1: 完整的错误处理链
动作组: "关键业务流程"
修饰器配置:
1. 条件执行修饰器:
- 检查系统状态是否正常
- 检查网络连接是否可用
2. 元素存在检查修饰器:
- 检查目标界面是否已加载
- 元素不存在时等待3秒后重试
3. 性能监控修饰器:
- 监控执行时间
- 记录性能指标
4. 重试修饰器:
- 最大重试3次
- 递增延迟策略
5. 超时控制修饰器:
- 最大执行时间30秒
- 超时后强制终止
6. 钩子修饰器:
- 前置钩子: 备份当前状态
- 成功钩子: 记录成功日志
- 失败钩子: 恢复备份状态
执行流程
修饰器按以下顺序执行: 1. 条件检查 → 验证执行条件 2. 安全检查 → 验证安全策略 3. 元素存在检查 → 检查界面状态 4. 前置钩子 → 执行准备工作 5. 重试循环开始 6. 性能监控开始 7. 超时控制开始 8. 主体动作组执行 9. 超时控制结束 10. 性能监控结束 11. 重试循环结束 12. 成功/失败钩子 → 根据结果执行 13. 后置钩子 → 执行清理工作
嵌套循环支持
动作组内部支持独立的循环控制,与脚本主循环隔离:
动作组循环特性
独立循环栈: - 每个动作组维护独立的循环状态 - 支持多层嵌套循环 - 循环状态不影响主脚本执行
循环状态管理:
循环状态信息:
├── 循环开始索引:循环开始动作的位置
├── 循环结束索引:循环结束动作的位置
├── 总迭代次数:循环设置的总次数
├── 当前迭代次数:已完成的迭代次数
├── 嵌套级别:当前循环的嵌套深度
└── 循环标识:唯一的循环ID
循环配置示例
动作组: "数据批量处理"
动作序列:
动作1: 循环开始
└── 循环次数: 10
└── 循环说明: "处理10条数据记录"
动作2: 文字识别->点击 - 选择下一条记录
└── 检测目标: ["下一条", "Next"]
动作3: WAIT - 等待数据加载
└── 等待时间: 1秒
动作4: 调用动作组 - 调用处理子流程
└── 动作组: "单条数据处理流程"
动作5: 循环结束
└── 对应循环: 动作1的循环开始
分组条件控制
动作组内部也支持分组条件控制功能:
配置方式
在动作组编辑界面: - 为动作添加分组标签 - 配置分组条件控制规则 - 设置重试和跳转策略
条件控制示例
动作组: "复杂界面处理"
分组条件控制配置:
分组1 - "界面检测":
重试次数: 3
重试条件: "OCR检测失败"
失败后操作: "跳转到错误处理"
分组2 - "数据输入":
重试次数: 2
重试条件: "输入验证失败"
失败后操作: "返回上一步"
导入导出功能
动作组包 (.goag)
动作组支持完整的导入导出功能,使用 .goag 格式的动作组包:
动作组包内容
动作组包结构:
├── 动作组定义:完整的动作组配置信息
├── 依赖的文本文件:动作组引用的外部文本文件
├── 修饰器配置:所有修饰器设置
├── 分组条件配置:分组条件控制设置
├── 版本信息:创建时间、版本号等元数据
└── 校验信息:确保包的完整性
导出功能
导出选项:
导出配置:
├── 包含文本文件:是否包含引用的文本文件
├── 包含修饰器配置:是否包含所有修饰器设置
├── 包含分组配置:是否包含分组条件控制
├── 压缩选项:是否压缩导出文件
└── 导出位置:选择导出到Downloads或分享
导出方式: 1. 导出到Downloads: 保存到设备的Downloads目录 2. 分享功能: 通过系统分享机制发送给其他应用 3. 生成链接: 创建可分享的链接(如果支持)
导入功能
导入来源:
- 从文件系统选择 .goag 文件
- 通过分享接收动作组包
- 从云存储导入
- 从其他设备传输
导入处理:
导入过程:
├── 文件验证:检查文件格式和完整性
├── 冲突检测:检查是否存在同名动作组
├── 冲突解决:提供重命名或覆盖选项
├── 依赖处理:导入包含的文本文件
├── 配置合并:合并修饰器和分组配置
└── 验证测试:可选的导入后验证
冲突解决策略: - 自动重命名: 为导入的动作组添加后缀 - 用户选择: 让用户决定是覆盖还是重命名 - 跳过导入: 跳过已存在的同名动作组 - 强制覆盖: 直接覆盖现有动作组
批量操作
批量导出
选择多个动作组进行批量导出:
批量导出选项:
├── 选择动作组:支持多选操作
├── 打包方式:单独文件或合并包
├── 命名规则:自动生成文件名规则
├── 导出位置:统一的导出目录
└── 进度显示:显示导出进度和状态
批量导入
一次性导入多个动作组包:
批量导入特性:
├── 多文件选择:支持选择多个.goag文件
├── 冲突统一处理:为所有冲突应用相同策略
├── 进度跟踪:显示整体导入进度
├── 错误报告:汇总导入过程中的错误
└── 成功统计:显示成功导入的动作组数量
最佳实践
1. 动作组设计原则
单一职责原则: - 每个动作组应该专注于一个特定功能 - 避免在一个动作组中混合多种不相关的操作 - 保持动作组的功能边界清晰
可重用性原则: - 设计通用的、参数化的动作组 - 避免硬编码特定的坐标或文字 - 考虑不同设备和分辨率的兼容性
模块化原则: - 将复杂流程分解为多个小的动作组 - 通过动作组组合实现复杂功能 - 保持每个动作组的相对独立性
2. 命名规范
动作组命名: - 使用描述性的名称,如 “用户登录流程”、”数据清理操作” - 避免使用过于简短或模糊的名称 - 可以使用分类前缀,如 “系统_重启流程”
分组命名: - 在动作组内使用清晰的分组名称 - 反映动作的逻辑关系,如 “初始化”、”主要操作”、”清理”
版本管理: - 为重要的动作组添加版本号 - 记录变更历史和兼容性信息
3. 错误处理策略
层次化错误处理:
错误处理层次:
├── 动作级错误:单个动作的重试和容错
├── 分组级错误:分组条件控制的重试机制
├── 动作组级错误:修饰器提供的重试和恢复
└── 脚本级错误:整体的错误处理和恢复策略
容错设计: - 使用多种检测方式提高识别成功率 - 设置合理的等待时间避免时序问题 - 提供备用的执行路径
4. 性能优化
执行效率: - 合理设置重试次数,避免过度重试 - 使用ROI区域限制检测范围 - 优化动作序列,减少不必要的等待
资源管理: - 及时清理临时数据和缓存 - 避免在动作组中进行大量的文件I/O操作 - 合理使用内存,避免内存泄漏
5. 测试和调试
单元测试: - 单独测试每个动作组的功能 - 验证各种输入条件下的行为 - 确保错误处理机制正常工作
集成测试: - 测试动作组在不同脚本中的调用 - 验证嵌套调用的正确性 - 测试并发调用的安全性
调试技巧: - 启用详细的日志记录 - 使用性能监控修饰器分析瓶颈 - 逐步测试,从简单到复杂
故障排除
常见问题
1. 动作组调用失败 - 检查作用域: 确认动作组的作用域设置正确 - 验证存在性: 确认动作组确实存在且未被删除 - 检查权限: 验证是否有足够的权限访问动作组
2. 修饰器不生效 - 启用状态: 检查修饰器是否已启用 - 配置参数: 验证修饰器的配置参数是否正确 - 执行顺序: 确认修饰器的执行顺序符合预期
3. 循环异常终止 - 循环配对: 确认循环开始和循环结束正确配对 - 嵌套关系: 检查嵌套循环的层次关系 - 状态清理: 确保循环状态在异常时被正确清理
4. 随机执行不符合预期 - 概率设置: 检查随机执行概率的设置值 - 双重随机: 理解调用层和动作组层的双重随机机制 - 上下文影响: 考虑随机种子和上下文的影响
5. 导入导出问题 - 文件格式: 确认文件是有效的.goag格式 - 版本兼容: 检查文件版本与当前系统的兼容性 - 权限问题: 验证文件读写权限 - 磁盘空间: 确保有足够的存储空间
调试工具
日志分析: - 启用动作组专用日志 - 分析执行时序和性能数据 - 查看修饰器的执行日志
性能监控: - 使用性能监控修饰器 - 分析执行瓶颈和资源消耗 - 优化关键路径的性能
状态检查: - 检查动作组的执行状态 - 监控循环和条件控制状态 - 验证修饰器的状态变化
总结
动作组功能为脚本自动化提供了强大的模块化解决方案。通过合理的设计和使用,可以大大提高脚本的可维护性、可重用性和稳定性。
关键要点: - 理解动作组的作用域和生命周期 - 合理使用修饰器系统增强功能 - 设计可重用的、高质量的动作组 - 建立完善的错误处理和容错机制 - 遵循最佳实践进行开发和维护
正确使用动作组功能可以让您的自动化脚本更加模块化、稳定和高效!