Total Control 新手入门 - 如何使用 FindNode(用SigmaTestApp演示)
SigmaTestApp 是一个演示应用程序,用于说明如何使用 Total Control 和 AAI。
第一步:准备工作
1. 打开 Total Control,连接一台设备。
2. 点击“脚本”进入脚本窗口
从桌面模式进入
从多控中心模式进入
3. 在脚本窗口中点击图标进入“UI 探测”
UI 探测是一个小工具,它可以获取节点信息和帮助您构建查询,非常适合学习查询语言学习。
4. 安装 SigmaTestApp
在 “UI 探测”中,点击“...”-“安装 SigmaTestApp”。
在弹出窗口中点击 “立即安装到主设备”。
* 请注意查看您的安卓设备,如果弹出“USB 安装提示”,请点击“继续安装”。
第二步:获取query
查询(query)是用来定位 UI元素的。整个屏幕由许多节点组成,执行查询(query)。可以找到满足条件的节点,用来获取节点信息,或者对节点进行操作。
参考文档: FindNode - Query
1. 通过“UI探测”获取 query
确认安卓设备上的 SigmaTestApp 已经打开,点击“UI 探测”窗口中“截屏”
截屏图片出现在“UI 探测”窗口中,屏幕上的 UI 元素用红色虚线标示。
点击截屏上的 “TIMEOUT”,右侧“动作”- “显示代码”框内红色标记的内容就是查询(query),通过它可以定位 “TIMEOUT” 按钮。
2. 通过“UI探测”自定义 query
在右侧的“元素信息”中,可以看到节点对应的信息
可以根据 text, description, class, resource 信息来自定义 query,以左侧的 “TIMEOUT” 按钮为例,通过不同信息来定位节点的 query 代码如下:
通过 text 定位:
T:TIMEOUT
通过 description 定位:
D:CHECKBOX
通过 resource 定位:
R:.btn_CHECKOX
通过 Class 定位:
C:.Button
也可以进行多重限制,例如,同时匹配 description 和 text 信息,中间使用 “&&” 隔开:
T:CHECKBOX&&R:.btn_CHECKBOX
3. 在“UI探测”中验证 query
如果不确定自定义 query 是否正确,可以将它拷贝到“查询”框内,然后回车或按下“执行”按钮。
第三步:对节点进行操作(actions)
通过 query 定位到节点后,可以进行多种操作,例如点击,获取边框或文本等等。
参考文档:FindNode - Actions
1. 示例 1:点击
点击操作的代码是:click,我们在刚才定位到的 “TIMEOUT” 节点上执行点击操作:
(1)可以使用命令助手快捷添加 action 代码,点击“显示代码”框内的“命令助手”,找到 “Actions” 下的 “click”
点击 “+” 图标,把 click 添加到代码中并执行。
在设备上可以看到点击 “TIMEOUT” 按钮后的屏幕
* 注:“UI 探测”中的截屏不会改变,您可以点击“返回”按钮,在设备上返回到刚才的屏幕。
(2)如果您熟悉了代码的编写,也可以在“脚本终端”上执行代码,更方便。
将以下代码拷贝到“脚本终端”,回车即可执行。
device.sendAai({action:"click",query:"T:TIMEOUT"})
* 注:device 为设备对象,在脚本终端中,device 默认赋值为主控设备对象,可以直接使用。
2. 示例 2:滚动屏幕查找节点并点击
在“SigmaTestApp” 中点击 “LIST”,可以看到很多子项,我们测试滚动屏幕查找位于列表末尾的 ”Carlo Cortez” 子项,并点击它。
支持滚动查找的方法很多,我们以 scrollIntoView 为例,代码:
device.sendAai({ actions:["scrollIntoView('T:Carlo Cortez','down')","click"]})
3. 示例 3:输入
返回到 “SigmaTestApp” 首页,在 “TIMEOUT” 按钮右侧输入框中输入数字 “1000”。
代码:
device.inputTextSync(0,”10000”)
* 参数 “0” 代表第 1 个输入框,参数 “10000” 是需要输入的数字
参考文档: JS API
4. 示例 4:等待某个 UI 元素出现
等待某个UI元素出现,通常可以通过循环语句实现,在AAI中只需要一条语句即可。
例如,点击刚才的 “TIMEOUT” 按钮,等待一段时间后,屏幕上会出现 “FINISH!!”,以下代码的作用是等待 “FINISH!!” 出现,最长等待 10 秒钟。
代码:
device.sendAai({action:"waitQuery('T:FINISH!!',10000)"})
5. 其他
更多其他操作,可以参考文档:(FindNode)
第四步:更多 FindNode 案例