2.8 KiB
2.8 KiB
任务流程控制
1. 当前状态
协议 v1 只支持线性 steps 和 optional。when、BRANCH、nextStepId 和 onFailure 均为 [提案]。
流程控制只在出现实际条件流程时实现,不提前引入循环、脚本表达式或复杂工作流引擎。
2. Condition [提案]
WAIT、动作 after、when 和 BRANCH 共用简单 Condition。
节点条件:
{
"state": "VISIBLE",
"selector": {
"text": {
"mode": "CONTAINS",
"value": "操作完成"
}
}
}
组合条件:
{
"mode": "ALL",
"items": [
{
"type": "PACKAGE_IS",
"value": "com.example.target"
},
{
"state": "VISIBLE",
"selector": {
"resourceId": "com.example.target:id/result"
}
}
]
}
首批只需要:
ALL、ANY。- 节点状态:
PRESENT、GONE、VISIBLE、ENABLED、SELECTED、CHECKED。 - 上下文:
PACKAGE_IS、ACTIVITY_IS。 - 结果:
STEP_SUCCESS_IS、STEP_CODE_IS。 - 输出比较:
EQ、NE,需要时再增加数值比较。
Condition 返回 MATCHED、NOT_MATCHED 或 ERROR。引用缺失和读取失败属于 ERROR,不能当成条件不成立。
3. when [提案]
{
"id": "click-confirm",
"action": "CLICK",
"packageName": "com.example.target",
"when": {
"type": "STEP_SUCCESS_IS",
"stepId": "prepare",
"value": true
},
"selector": {
"text": "确认"
}
}
- MATCHED:执行动作。
- NOT_MATCHED:跳过步骤。
- ERROR:步骤失败。
- when 只判断当前状态,不等待;需要等待时使用 WAIT。
4. BRANCH [提案]
{
"id": "route-result",
"action": "BRANCH",
"cases": [
{
"condition": {
"state": "VISIBLE",
"selector": {
"text": "操作完成"
}
},
"targetStepId": "read-result"
}
],
"defaultStepId": "handle-unknown"
}
BRANCH 按顺序选择第一个匹配项。目标步骤必须存在并位于当前步骤之后,避免循环和无限执行。没有匹配项且没有 default 时返回 BRANCH_NO_MATCH。
5. onFailure [提案]
首版只需要三种处理:
STOP:停止任务,默认值。CONTINUE:继续下一步。GOTO:跳到后续指定步骤。
{
"onFailure": {
"codes": ["TARGET_NOT_FOUND"],
"action": "GOTO",
"targetStepId": "handle-missing"
}
}
不提供自动重试动作或整个任务。需要再次尝试时,在任务中写一个明确的后续步骤,并继续受总超时限制。
6. 最小校验
解析时确认步骤 id 唯一、跳转目标存在且只向前。跨分支输出和复杂汇合规则等到实际需要时再设计。