1. 说明
全局模块中封装的快捷事件,不用区分是无障碍模式还是代理模式
2. 点击函数
2.1. clickPoint
- 点击坐标
- @param x x坐标
- @param y y坐标
- @return {boolean|布尔型}
function main(){
var result = clickPoint(100,100);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.2. click
- 点击选择器
- @param selectors 选择器对象
- @return {boolean|布尔型}
function main(){
var selector = text("我是文本");
var result = click(selector);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.3. clickRandom
- 随机点击选择器的任意元素
- @param selectors 选择器对象
- @return {boolean|布尔型}
function main(){
var selector = text("我是文本");
var result = clickRandom(selector);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.4. clickRandomRect
- 随机点击区域中的坐标
- @param rect 区域对象
- @return {boolean|布尔型}
function main(){
var rect = new Rect();
rect.left = 10;
rect.right = 200;
rect.top = 10;
rect.bottom = 400;
var result = clickRandomRect(rect);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.5. clickCenter
- 点击区域中的中心坐标
- @param rect 区域对象
- @return {boolean|布尔型}
function main(){
var rect = new Rect();
rect.left = 10;
rect.right = 200;
rect.top = 10;
rect.bottom = 400;
var result = clickCenter(rect);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.6. clickText
- 点击文本
- @param text 文本
- @return {boolean|布尔型}
function main(){
var result = clickText("设置");
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.7. longClick
- 长点击选择器
- @param selectors 选择器对象
- @return {boolean|布尔型}
function main(){
var selector = text("我是文本");
var result = longClick(selector);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
2.8. longClickPoint
- 长点击坐标
- @param x x坐标
- @param y y坐标
- @return {boolean|布尔型}
function main(){
var result = longClickPoint(100,100);
if (result){
toast("点击成功");
} else {
toast("点击失败");
}
}
main();
3. 多点触摸
3.1. multiTouch 多点触摸
- 多点触摸
- 触摸参数: action :一般情况下 按下为0,弹起为1,移动为2
- x: X坐标
- y: Y坐标
- pointer:设置第几个手指触摸点,分别是 1,2,3等,代表第n个手指
- delay: 该动作延迟多少毫秒执行
- @param touch1 第1个手指的触摸点数组,例如:[{"action":0,"x":1,"y":1,"pointer":1,"delay":20},{"action":2,"x":1,"y":1,"pointer":1,"delay":20}]
- @param touch2 第2个手指的触摸点数组
- @param touch3 第3个手指的触摸点数组
- @param timeout 多点触摸执行的超时时间,单位是毫秒
- @return boolean|布尔型
function main() {
utils.openAppByName("抖音短视频");
sleep(3000);
//第一种数组式的写法
var touch1 = [
{"action": 0, "x": 500, "y": 1200, "pointer": 1, "delay": 1},
{
"action": 2,
"x": 500,
"y": 1100,
"pointer": 1,
"delay": 20
}, {
"action": 2,
"x": 500,
"y": 1000,
"pointer": 1,
"delay": 20
},
{
"action": 1,
"x": 1,
"y": 1,
"pointer": 1,
"delay": 20
}];
//第二种链式调用方法
var touch2 = MultiPoint
.get()
.action(0).x(500).y(1200).pointer(1).delay(1)
.next()
.action(2).x(500).y(1100).pointer(1).delay(1)
.next()
.action(2).x(500).y(1000).pointer(1).delay(1)
.next()
.action(2).x(500).y(900).pointer(1).delay(1)
.next()
.action(1).x(500).y(800).pointer(1).delay(1);
var touch1 = MultiPoint
.get()
.action(0).x(300).y(1200).pointer(2).delay(1)
.next()
.action(2).x(300).y(1100).pointer(2).delay(1)
.next()
.action(2).x(300).y(1000).pointer(2).delay(1)
.next()
.action(2).x(300).y(900).pointer(2).delay(1)
.next()
.action(1).x(300).y(800).pointer(2).delay(1);
var x = multiTouch(touch1, touch2, null, 30000);
logd("xxs " + x);
}
main();
4. 滑动函数
4.1. swipe
- 通过选择器滑动节点
- @param selectors 节点选择器
- @param endX 结束的X坐标
- @param endY 结束的Y坐标
- @param duration 持续时长 单位毫秒
- @return 布尔型 true 代表成功 false 代表失败
function main(){
var selectors = text("我是文本");
var result = swipe(selectors,100,100,200);
if (result){
toast("滑动成功");
} else {
toast("滑动失败");
}
}
main();
4.2. swipeToPoint
- 从一个坐标滑动到另一个坐标
- @param startX 起始坐标的X轴值
- @param startY 起始坐标的Y轴值
- @param endX 结束坐标的X轴值
- @param endY 结束坐标的Y轴值
- @param duration 持续时长 单位毫秒
- @return 布尔型 true 滑动成功, false 滑动失败
function main(){
var result = swipeToPoint(10,10,100,100,200);
if (result){
toast("滑动成功");
} else {
toast("滑动失败");
}
}
main();
4.3. isScrollEnd
- 是否滚动到底部了,如果查不到元素也会返回false
- @param distance 滚动方向 UP,DOWN,LEFT,RIGHT
- @param selectors 选择器
- @return false 代表未滚动到位,true 代表滚动完成了
function main(){
var selectors = clz("android.widget.ListView");
var result = isScrollEnd("UP",selectors);
if (result){
toast("滚动完成");
} else {
toast("滚动未完成");
}
}
main();
5. 拖动函数
5.1. drag
- 从一个坐标到另一个坐标的拖动
- @param startX 起始坐标的X轴值
- @param startY 起始坐标的Y轴值
- @param endX 结束坐标的X轴值
- @param endY 结束坐标的Y轴值
- @param duration 持续时长 单位毫秒
- @return 布尔型 true 拖动成功, false 拖动失败
function main(){
var result = drag(10,10,100,100,200);
if (result){
toast("拖动成功");
} else {
toast("拖动失败");
}
}
main();
5.2. dragTo
- 通过选择器拖动某个元素到目标元素
- @param selectors 选择器 {@link S}
- @param destObj 目标元素选择器
- @param duration 持续时长 单位毫秒
- @return 布尔型 true 成功 false 失败
function main(){
var selectors = text("设置");
var destObj = text("日历");
var result = dragTo(selectors,destObj,200);
if (result){
toast("拖动成功");
} else {
toast("拖动失败");
}
}
main();
5.3. dragToPoint
- 通过选择器拖动某个元素到目标X Y 坐标
- @param selectors 原始元素选择器
- @param endX 目标 X 坐标
- @param endY 目标 Y 坐标
- @param duration 持续时长 单位毫秒
- @return 布尔型 true 成功 false 失败
function main(){
var selectors = text("设置");
var result = dragToPoint(selectors,100,100,200);
if (result){
toast("拖动成功");
} else {
toast("拖动失败");
}
}
main();
6. 输入数据
6.1. currentIsOurIme
- 当前是否是我们的输入法
- @return {boolean|布尔型}
function main(){
var result = currentIsOurIme();
if (result){
toast("是");
} else {
toast("否");
}
}
main();
6.2. inputText
- 通过选择器输入数据
- @param selectors 选择器
- @param content 数据字符串
- @return {boolean|布尔型}
function main(){
var selectors= clz("android.widget.EditText");
var result = inputText(selectors,"我是内容");
if (result){
toast("是");
} else {
toast("否");
}
}
main();
6.3. imeInputText
- 使用输入法输入内容,前提是已经设置本程序的输入法为默认输入法
- @param selectors 选择器
- @param content 数据字符串
- @return {boolean|布尔型}
function main(){
var selectors= clz("android.widget.EditText");
var result = imeInputText(selectors,"我是内容");
if (result){
toast("是");
} else {
toast("否");
}
}
main();
6.4. pasteText
- 通过选择器粘贴数据
- @param selectors 选择器
- @param content 数据字符串
- @return {boolean|布尔型}
function main(){
var selectors= clz("android.widget.EditText");
var result = pasteText(selectors,"我是内容");
if (result){
toast("是");
} else {
toast("否");
}
}
main();
6.5. clearTextField
- 清除文本数据
- @param selectors 节点选择器
- @return {boolean|布尔型}
function main(){
var selectors= clz("android.widget.EditText");
var result = clearTextField(selectors);
if (result){
toast("是");
} else {
toast("否");
}
}
main();
7. 节点操作
7.1. has
- 通过选择器判断元素是否存在
- @param selectors 选择器
- @return {null|布尔型}
function main(){
var selectors = text("设置");
var result = has(selectors);
if (result){
toast("存在节点");
} else {
toast("不存在节点");
}
}
main();
7.2. waitExistActivity
- 等待activity界面出现
- @param activity 界面名称
- @param timeout 超时时间,单位毫秒
- @return {null|布尔型}
function main(){
var ac = "com.ss.android.ugc.aweme.main.MainActivity";
var result = waitExistActivity(ac,10000);
if (result){
toast("存在界面");
} else {
toast("不存在界面");
}
}
main();
7.3. waitExistNode
- 通过选择器判断并等待元素是否存
- @param selectors 选择器
- @param timeout 超时时间,单位毫秒
- @return {null|布尔型}
function main(){
var selectors = text("设置");
var result = waitExistNode(selectors,10000);
if (result){
toast("存在节点");
} else {
toast("不存在节点");
}
}
main();
7.4. getText
- 获取选择器得到的文本数据
- @param selectors 选择器
- @return {字符串数组|null|字符串集合}
function main(){
var selectors = clz("android.widget.TextView");
var result = getText(selectors);
toast("result:"+result);
}
main();
7.5. getNodeInfo
- 获取节点信息
- @param selectors 选择器
- @param timeout 等待时间,单位是毫秒
- @return {null|NodeInfo数组|节点信息集合}
function main(){
var result = clz("android.widget.TextView").getNodeInfo(10*1000);
toast("result:"+result);
}
main();
7.6. getNodeAttrs
- 获取节点属性信息
- @param selectors 选择器
- @param attr 属性值,例如 text,className,更多的属性请参考NodeInfo对象属性
- @return {null|字符串数组|Rect对象数组}
function main(){
var selectors = clz("android.widget.TextView");
//获取所有text属性
var result = getNodeAttrs(selectors,"text");
toast("result:"+result);
//获取所有bounds属性
result = getNodeAttrs(selectors,"bounds");
toast("result:"+result);
}
main();
7.7. getOneNodeInfo
- 通过选择器 获取第一个节点信息
- @param selectors 选择器
- @param timeout 等待时间,单位是毫秒
- @return NodeInfo 对象或者null
function main(){
var result = clz("android.widget.TextView").getOneNodeInfo(10*1000);
toast("result:"+result);
if (result){
result.click();
}
}
main();
7.8. setFetchNodeMode
- 设置获取节点的模式
- @param mode 1 是增强型, 2 是快速型,默认是增强型
- @param fetchInvisibleNode 是否抓取隐藏的元素,默认不抓取
- @param fetchNotImportantNode 是否抓取不重要的元素
- @return {boolean|*}
function main(){
var result = setFetchNodeMode(1,true,true);
toast("result:"+result);
}
main();
7.9. dumpXml
- 将元素节点变成XML
- @return string string|null
function main(){
var result = dumpXml();
if (result){
toast("ok");
} else {
toast("no");
}
}
main();
8. 系统按键相关
8.1. home
- 返回主页
- @return {null|布尔型}
function main(){
var result = home();
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
8.2. back
- 返回键
- @return {null|布尔型}
function main(){
var result = back();
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
8.3. openNotification
- 打开通知栏
- @return {null|布尔型}
function main(){
var result = openNotification();
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
8.4. openQuickSettings
- 打开快速设置
- @return {null|布尔型}
function main(){
var result = openQuickSettings();
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
8.5. recentApps
- 最近APP任务按键
- @return {null|布尔型}
function main(){
var result = recentApps();
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
8.6. getRunningPkg
- 取得当前运行的App包名
- @return {字符串|null}
function main(){
var result = getRunningPkg();
}
main();
8.7. getRunningActivity
- 取得当前运行的Activity类名
- @return {字符串|null}
function main(){
var result = getRunningActivity();
}
main();
9. 通知栏
9.1. requestNotificationPermission
- 请求监听状态栏的权限
- @param timeout 请求权限超时时间 单位是秒
- @return true 代表请求权限成功,false代表失败
function main(){
var result = requestNotificationPermission(10);
toast("是否有权限:"+result);
}
main();
9.2. hasNotificationPermission
- 检查是否含有状态栏监听权限
- @return true 代表请求权限成功,false代表失败
function main(){
var result = hasNotificationPermission();
toast("是否有权限:"+result);
}
main();
9.3. getLastNotification
- 获取最近通知栏对象
- @param pkg 指定包名
- @param size 指定获取的条数
- @return {NotificationInfo数组|null}
function main(){
//获取微信100条通知栏记录
var result = getLastNotification("com.tencent.mm",100);
toast("结果:"+result);
}
main();
9.4. shotNotification
- 将通知发射处理,相当于点击了通知栏
- @param seqId
- @return {boolean|布尔型}
function main(){
//获取微信1条通知,然后进行点击
var result = getLastNotification("com.tencent.mm",1);
if (result!=null && result.length>0){
var s = shotNotification(result[0].seqId);
toast("结果:"+s);
}
}
main();
9.5. cancelNotification
- 将通知进行取消操作
- @param seqId
- @return {boolean|布尔型}
function main(){
//获取微信1条通知,然后进行取消
var result = getLastNotification("com.tencent.mm",1);
if (result!=null && result.length>0){
var s = cancelNotification(result[0].seqId);
toast("结果:"+s);
}
}
main();
9.6. getLastToast
- 获取toast数据
- @param pkg 指定包名
- @param size 指定获取的条数
- @return {null|ToastInfo数组}
function main(){
var result = getLastToast("com.tencent.mm",100);
toast("结果:"+result);
}
main();
10. 悬浮窗日志
10.1. requestFloatViewPermission
- 请求展示浮窗的权限
- @param timeout 请求权限超时时间 单位是秒
- @return true 代表请求权限成功,false代表失败
function main(){
var result = requestFloatViewPermission(10);
toast("是否有权限:"+result);
}
main();
10.2. hasFloatViewPermission
- 检查是否含有浮窗权限
- @return true 代表请求权限成功,false代表失败
function main(){
var result = hasFloatViewPermission();
toast("是否有权限:"+result);
}
main();
10.3. showFloatView
- 展示浮窗(如果是开发工具调试,请先预览一下工程,然后运行脚本,避免读取不到path文件内容的情况)
- @param params js的map对象,包含的
- var map = {"path":"main.html","tag":"test"}; 类似这样的参数
- 参数解析:
- tag:字符串 悬浮窗唯一定位的标示
- path:字符串 IEC 中的布局文件
- title:字符串 悬浮窗标题
- titleBg:字符串 悬浮窗背景,16进制,例如#888888,或者#88000000
- x:整型 悬浮窗起始X坐标
- y:整型 悬浮窗起始Y坐标
- w:整型 悬浮窗起始宽度
- h:整型 悬浮窗起始高度
- @return true 代表请求权限成功,false代表失败
function main(){
var m = {
"path": "main.html",
"tag": "tag",
"title": "sss",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd = showFloatView(m);
logd("showFloatView " + xd);
}
main();
10.4. closeFloatView
- 关闭浮窗
- @param tag showFloatView 使用的tag参数,对悬浮窗唯一定位的
- @return true 成功,false代表失败
function main(){
var m = {
"path": "main.html",
"tag": "tag",
"title": "sss",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd = showFloatView(m);
logd("showFloatView " + xd);
sleep(3000);
closeFloatView("tag");
}
main();
10.5. closeAllFloatView
- 关闭所有悬浮窗,但不包含日志悬浮窗
- @return true 成功,false代表失败
function main(){
var m = {
"path": "main.html",
"tag": "tag",
"title": "sss",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd = showFloatView(m);
logd("showFloatView " + xd);
sleep(3000);
closeAllFloatView();
}
main();
10.6. showLogWindow
- 展示日志浮窗
- @return true 代表请求权限成功,false代表失败
function main(){
var result = showLogWindow();
toast("是否展示:"+result);
}
main();
10.7. closeLogWindow
- 关闭日志浮窗
- @return true 代表请求权限成功,false代表失败
function main(){
closeLogWindow();
}
main();
10.8. setLogViewSize
- 设置日志窗口大小
- @param w 宽度
- @param h 高度
- @param textSize 日志的字体大小
- @param backgroundColor 背景颜色,例如#336699
function main(){
setLogViewSize(500,600,14,"#FFFFFF");
}
main();
10.9. setLogText
- 展示消息到悬浮窗日志中,颜色是白色的
- @param msg 消息
function main(){
var result = setLogText("开始运行...");
}
main();
11. 定时任务
11.1. startJob 开启定时
- 开启一个定时脚本任务
- @param tag 任务的唯一标示,不能为空,脚本中可以使用readConfigString("jobTaskTag")获取当前tag值,判断是那个任务过来执行的
- @param execTime 定时时间格式: 2020-04-17 19:20:00,或者直接是秒数字,例如 3,代表3秒后
- @param cancelBeforeRunning
- @return 整型 jobid
function main(){
var time="2020-04-17 09:00:00";
//使用日期开启一个任务
var id =startJob("task1",time,true);
logd("job id "+id);
//使用秒数开启,60秒后执行一个任务
var id2 =startJob("task2","60",true);
logd("job id "+id2);
}
main();
11.2. cancelAllJob 取消所有定时
- 取消所有定时
- @return bool true 代表有任务被取消
function main(){
var result = cancelAllJob();
logd(result);
}
main();
11.3. cancelJob 取消指定TAG定时
- 通过tag对定时任务进行取消
- @param tag tag名称,startJob的时候tag参数的值
- @return bool true 代表有任务被取消
function main(){ var result = cancelJob("task1"); logd(result); } main();
11.4. getAllJobTag 获取所有定时标签
- 取得所有的定时任务标签
- @return 字符串数组或者null
function main(){
var result = getAllJobTag();
logd(result);
}
main();
12. 其他函数
12.1. random 随机函数
- 取得某个范围的随机值
- @param min 最小值
- @param max 最大值
- @return 整型 在min和max中间的值, 包含最大和最小值
function main(){
var result = random(100,1000);
sleep(result);
}
main();