85 lines
2.3 KiB
Markdown
85 lines
2.3 KiB
Markdown
# INPUT
|
||
|
||
> [返回动作目录](README.md) · [任务协议](../protocol.md) · [统一选择器](../selector.md) · [值与输出](../values-and-outputs.md)
|
||
|
||
## 1. 当前行为 **[部分实现]**
|
||
|
||
~~~json
|
||
{
|
||
"id": "input-keyword",
|
||
"action": "INPUT",
|
||
"packageName": "com.example.target",
|
||
"selector": {
|
||
"resourceId": "com.example.target:id/input"
|
||
},
|
||
"value": "测试内容",
|
||
"timeoutMs": 5000
|
||
}
|
||
~~~
|
||
|
||
当前实现对唯一节点调用 `ACTION_SET_TEXT`:
|
||
|
||
- value 只能是字符串。
|
||
- 不主动请求焦点。
|
||
- 不检查节点是否可编辑。
|
||
- 不回读验证输入结果。
|
||
- 驱动返回 `false` 时会重复输入,这是需要修正的现有问题。
|
||
|
||
## 2. 简单扩展 **[提案]**
|
||
|
||
~~~json
|
||
{
|
||
"id": "input-keyword",
|
||
"action": "INPUT",
|
||
"packageName": "com.example.target",
|
||
"selector": {
|
||
"resourceId": "com.example.target:id/input",
|
||
"state": {
|
||
"visible": true,
|
||
"enabled": true
|
||
}
|
||
},
|
||
"value": {
|
||
"source": "TASK_INPUT",
|
||
"key": "keyword"
|
||
},
|
||
"mode": "REPLACE",
|
||
"verify": "EXACT",
|
||
"timeoutMs": 5000
|
||
}
|
||
~~~
|
||
|
||
首批模式:
|
||
|
||
- `REPLACE`:替换全部文本。
|
||
- `CLEAR`:清空。
|
||
- `APPEND`:在现有文本后追加。
|
||
|
||
验证:
|
||
|
||
- `NONE`:只检查系统是否接受输入请求。
|
||
- `EXACT`:回读文本与目标值相同。
|
||
- `NON_EMPTY`:只检查结果非空。
|
||
|
||
密码节点不回读原文,可使用 NONE 或 NON_EMPTY。复杂格式化、剪贴板和模板输入等到实际需要时再增加。
|
||
|
||
## 3. 执行规则
|
||
|
||
1. 等待唯一、可见、启用且可编辑的目标。
|
||
2. 需要时请求焦点。
|
||
3. 计算最终输入文本。
|
||
4. 最多调用一次输入动作。
|
||
5. 按 verify 回读;提供 after 时继续验证页面条件。
|
||
|
||
`timeoutMs` 包含等待、焦点、输入和验证。
|
||
|
||
## 4. 结果码
|
||
|
||
见[结果码总表](README.md#结果码总表)。INPUT 使用 `OK`、`TARGET_NOT_FOUND`、`TARGET_AMBIGUOUS`、`TARGET_NOT_INTERACTABLE`(含不可编辑)、`ACTION_FAILED` 和 `VERIFICATION_FAILED`。
|
||
|
||
`verify` 为 `NONE` 时,成功只表示系统接受了输入请求,不表示文本已正确写入。
|
||
|
||
## 5. 测试
|
||
|
||
覆盖 REPLACE、CLEAR、APPEND、目标不可编辑、输入失败、回读不一致、密码节点和单次分发。WebView、自定义输入框与常用输入法需要真机验证。
|