目录
UiSelector
text(str)
findOne()
findOnce(i)
findOne(timeout)
findOnce()
find()
scrollable([b = true])
bounds()
auto.setMode(mode)
auto.waitFor()
auto.setMode(mode)
click(text[, i])
UiObject
text()
scrollForward():手指向上滑动
scrollBackward():手指向下滑动
timers 定时器
setTimeout
注意事项
setInterval(callback, delay[, ...args])
clearTimeout(id)
UiSelector
UiSelector即选择器,用于通过各种条件选取屏幕上的控件,再对这些控件进行点击、长按等动作。这里需要先简单介绍一下控件和界面的相关知识
text(str)
-
str
{string} 控件文本 - 返回 {UiSelector} 返回选择器自身以便链式调用
为当前选择器附加控件"text等于字符串str"的筛选条件。
控件的text(文本)属性是文本控件上的显示的文字,例如微信左上角的"微信"文本。
findOne()
- 根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止,并返回该控件。如果找不到控件,当屏幕内容发生变化时会重新寻找,直至找到。
- 需要注意的是,如果屏幕上一直没有出现所描述的控件,则该函数会阻塞,直至所描述的控件出现为止。因此此函数不会返回
null
。 - 采用深度优先搜索(DFS),会返回该搜索算法找到的第一个控件。注意控件找到的顺序有时会起到作用。
findOnce(i)
- i {number} 索引
- 根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,并返回第 i + 1 个符合条件的控件;如果没有找到符合条件的控件,或者符合条件的控件个数 < i, 则返回null。
- 注意这里的控件次序,是搜索算法深度优先搜索(DSF)决定的。
findOne(timeout)
-
timeout
{number} 搜索的超时时间,单位毫秒 - 返回 UiObject
- 根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止,并返回该控件;如果在 timeout 毫秒的时间内没有找到符合条件的控件,则终止搜索并返回
null
。 - 该函数类似于不加参数的
findOne()
,只不过加上了时间限制。
示例:
//启动Auto.js
launchApp("Auto.js");
//在6秒内找出日志图标的控件
var w = id("action_log").findOne(6000);
//如果找到控件则点击
if(w != null){
w.click();
}else{
//否则提示没有找到
toast("没有找到日志图标");
}
findOnce()
- 返回 UiObject
- 根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,如果找到符合条件的控件则返回该控件;否则返回
null
。
find()
- 返回 UiCollection
- 根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,找到所有满足条件的控件集合并返回。这个搜索只进行一次,并不保证一定会找到,因而会出现返回的控件集合为空的情况。
- 不同于
findOne()
或者findOnce()
只找到一个控件并返回一个控件,find()
函数会找出所有满足条件的控件并返回一个控件集合。之后可以对控件集合进行操作。
scrollable([b = true])
- b {Boolean} 表示控件是否可滑动
为当前选择器附加控件是否可滑动的条件。滑动包括上下滑动和左右滑动。
可以用这个条件来寻找可滑动控件来滑动界面。例如滑动Auto.js的脚本列表的代码为:
className("android.support.v7.widget.RecyclerView").scrollable().findOne().scrollForward();
//或者classNameEndsWith("RecyclerView").scrollable().findOne().scrollForward();
bounds()
- 返回 Rect
- 返回控件在屏幕上的范围,其值是一个Rect对象。
示例:
var b = text("Auto.js").findOne().bounds();
toast("控件在屏幕上的范围为" + b);
- 如果一个控件本身无法通过
click()
点击,那么我们可以利用bounds()
函数获取其坐标,再利用坐标点击。例如:
var b = desc("打开侧拉菜单").findOne().bounds();
click(b.centerX(), b.centerY());
//如果使用root权限,则用 Tap(b.centerX(), b.centerY());
auto.setMode(mode)
-
mode
{string} 模式
设置无障碍模式为 mode。mode 的可选值为:
-
fast
快速模式。该模式下会启用控件缓存,从而选择器获取屏幕控件更快。对于需要快速的控件查看和操作的脚本可以使用该模式,一般脚本则没有必要使用该函数。 -
normal
正常模式,默认。
auto.waitFor()
检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
auto.setMode(mode)
-
mode
{string} 模式
设置无障碍模式为 mode。mode 的可选值为:
-
fast
快速模式。该模式下会启用控件缓存,从而选择器获取屏幕控件更快。对于需要快速的控件查看和操作的脚本可以使用该模式,一般脚本则没有必要使用该函数。 -
normal
正常模式,默认。
click(text[, i])
-
text
{string} 要点击的文本 -
i
{number} 如果相同的文本在屏幕中出现多次,则 i 表示要点击第几个文本, i 从 0 开始计算 - 返回是否点击成功。当屏幕中并未包含该文本,或者该文本所在区域不能点击时返回 false,否则返回 true。
使用方式:
click("是的") :当不指定参数 i 时则会尝试点击屏幕上出现的所有文字 text 并返回是否全部点击成功。
click("是的",0) : 是从 0 开始计算的, 表示点击屏幕上第一个"是的"。
UiObject
UiObject表示一个控件,可以通过这个对象获取到控件的属性,也可以对控件进行点击、长按等操作。
获取一个UiObject通常通过选择器的findOne()
, findOnce()
等函数,也可以通过UiCollection来获取,或者通过UiObject.child()
, UiObject.parent()
等函数来获取一个控件的子控件或父控件。
text()
- 返回 {string}
- 获取控件的文本,如果控件没有文本,返回
""
。
scrollForward():手指向上滑动
- 返回 {Boolean}
- 对控件执行向前滑动的操作,并返回是否操作成功。
- 向前滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行scrollForward()的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)。
scrollBackward():手指向下滑动
- 返回 {Boolean}
- 对控件执行向后滑动的操作,并返回是否操作成功。
- 向后滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行scrollForward()的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)。
timers 定时器
timers 模块暴露了一个全局的 API,用于在某个未来时间段调用调度函数。 因为定时器函数是全局的,所以使用该 API 无需调用 timers.*
setTimeout
setTimeout(function(){
toast("hello")
}, 5000);
注意事项
需要注意的是,这些定时器仍然是单线程的。如果脚本主体有耗时操作或死循环,则设定的定时器不能被及时执行
setTimeout(function(){
//这里的语句会在15秒后执行而不是5秒后
toast("hello")
}, 5000);
//暂停10秒
sleep(10000);
死循环
setTimeout(function(){
//这里的语句永远不会被执行
toast("hello")
}, 5000);
//死循环
while(true);
setInterval(callback, delay[, ...args])
-
callback
{Function} 当定时器到点时要调用的函数。 -
delay
{number} 调用 callback 之前要等待的毫秒数。 -
...args
{any} 当调用 callback 时要传入的可选参数。
var i = 0;
setInterval(function(){
i++;
toast(i + "秒");
if(i == 19999){
back();
sleep(1000)
log("发送成功!1");
exit();
}
}, 3000);
clearTimeout(id)
-
id
{number} 一个 setTimeout() 返回的 id。
取消一个由 setTimeout() 创建的定时任务。
//每5秒就发出一次hello
var id = setInterval(function(){
toast("hello");
}, 5000);
//1分钟后取消循环
setTimeout(function(){
clearInterval(id);
}, 60 * 1000);