基于控件的操作
基于控件的操作指的是选择屏幕上的控件,获取其信息或对其进行操作。对于一般软件而言,基于控件的操作对不同机型有很好的兼容性;但是对于游戏而言,由于游戏界面并不是由控件构成,无法采用本章节的方法,也无法使用本章节的函数。有关游戏脚本的编写,请参考《基于坐标的操作》。
基于控件的操作依赖于无障碍服务,因此最好在脚本开头使用auto()
函数来确保无障碍服务已经启用。如果运行到某个需要权限的语句无障碍服务并没启动,则会抛出异常并跳转到无障碍服务界面。这样的用户体验并不好,因为需要重新运行脚本,后续会加入等待无障碍服务启动并让脚本继续运行的函数。
您也可以在脚本开头使用"auto";
表示这个脚本需要无障碍服务,但是不推荐这种做法,因为这个标记必须在脚本的最开头(前面不能有 注释或其他语句、空格等),我们推荐使用auto()
函数来确保无障碍服务已启用。
auto([mode])
mode
{string} 模式
检查无障碍服务是否已经启用,如果没有启用则抛出异常并跳转到无障碍服务启用界面;同时设置无障碍模式为 mode。mode 的可选值为:
fast
快速模式。该模式下会启用控件缓存,从而选择器获取屏幕控件更快。对于需要快速的控件操作的脚本可以使用该模式,一般脚本则没有必要使用该函数。normal
正常模式,默认。
如果不加 mode 参数,则为正常模式。
建议使用auto.waitFor()
和auto.setMode()
代替该函数,因为auto()
函数如果无障碍服务未启动会停止脚本;而auto.waitFor()
则会在在无障碍服务启动后继续运行。
示例:
auto("fast");
示例 2:
auto();
auto.waitFor()
检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍 服务启动;当无障碍服务启动后脚本会继续运行。
auto.setMode(mode)
mode
{string} 模式
设置无障碍模式为 mode。mode 的可选值为:
fast
快速模式。该模式下会启用控件缓存,从而选择器获取屏幕控件更快。对于需要快速的控件查看和操作的脚本可以使用该模式,一般脚本则没有必要使用该函数。normal
正常模式,默认。
auto.takeScreenshot()
v7.1.2 新增
- return {Image}
使用无障碍权限截图,返回一个 Image 对象。
let img = auto.takeScreenshot();
images.save(img, "./img.png");
auto.takeScreenshotAsync(callback)
v7.1.2 新增
- callback {function} 回调函数
- image {Image} 第 1 个参数为 Image 对象
- errCode {number} 如果截图失败,第 2 个参数为错误代码
使用无障碍权限异步截图,此方法不阻塞线程,返回更快
SimpleActionAutomator
稳定性: 稳定
SimpleActionAutomator 提供了一些模拟简单操作的函数,例如 点击文字、模拟按键等。这些函数可以直接作为全局函数使用。
click(text[, i])
text
{string} 要点击的文本i
{number} 如果相同的文本在屏幕中出现多次,则 i 表示要点击第几个文本, i 从 0 开始计算
返回是否点击成功。当屏幕中并未包含该文本,或者该文本所在区域不能点击时返回 false,否则返回 true。
该函数可以点击大部分包含文字的按钮。例如微信主界面下方的"微信", "联系人", "发现", "我"的按钮。
通常与 while 同时使用以便点击按钮直至成功。例如:
while (!click("扫一扫"));