辅助及控件操作函数是实现自动化脚本的核心函数,它提炼和扩展了Android系统的原生辅助函数,极大地降低了使用辅助功能的难度。launchApp、findView、findRoot、click、gestureClick、multiGestureClick、back2Page、switchPage、switchPages、paste、getWidgetColor、scroll、gesture、back、recentApps、home、openPowerDialog、openNotification、refresh、cbNotification、cbWindowChange。
参数名 | 类型 | 说明 |
---|---|---|
id | string | 控件id |
text | string | 控件文本 |
className | string | 类名 |
size/length | integer | 子控件个数 |
visible | boolean | 控件是否可见 |
clickable | boolean | 控件是否可点击 |
checked | boolean | checkbox控件是否被选中 |
selected | boolean | selected控件是否被选中 |
enabled | boolean | 控件是否可用 |
parent | node | 父控件 |
height | integer | 控件高,单位像素 |
width | integer | 控件宽,单位像素 |
left | integer | 控件左边距离屏幕最左边距离,单位像素 |
top | integer | 控件上边距离屏幕最上边距离,单位像素 |
right | integer | 控件右边距离屏幕最左边距离,单位像素 |
bottom | integer | 控件下边距离屏幕最上边距离,单位像素 |
prevSibling | node对象 | 上一个兄弟控件 |
nextSibling | node对象 | 下一个兄弟控件 |
例子: var ret = findView('txt:我的'); if (ret.length > 0) { var view = ret.views[0]; console.log('left:' + view.left); }
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
packageName/appName | string | 必填 | app名称或者包名 |
tag | string | 选填 | app启动后首页中出现的某个控件的tag,出现该tag就表示app启动成功。默认为空 |
options | json object | 选填 | 默认值:{flag:'', failed:null, maxStep:30, refresh: true}。flag见findView;failed表示搜索控件失败后调用的函数,主要用于处理在操作期间出现弹窗的场景;maxStep表示检测app是否启动时重试的步数。refresh为true时在启动app过程中会刷新和重新启动app,可以根据具体情况来关闭该选项。 |
例子: var ret = launchApp('com.tencent.mm', 'txt:微信'); if (1 == ret) { console.log('启动成功'); }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag | string | 必填 | UI控件的id、text或者className,用|分割多个tag,找到任意一个就成功。前缀,id:表示精确搜索id为tag的控件,id$:表示搜索id以tag结尾的控件,id^:表示搜索id以tag开始的控件,id*:表示搜索id包含tag的控件。txt:表示精确搜索text为tag的控件,txt$:表示搜索text以tag结尾的控件,txt^:表示搜索text以tag开始的控件,txt*:表示搜索text包含tag的控件。cn:表示精确搜索className为tag的控件。注意:一个tag内部可以用@链接多个tag(注意@后的tag目前仅支持cn和id的精确表示),表示必须同时满足才可以。例:findView('txt:hello@cn:android.view.View|id:app');表示搜索text为hello且className为cn:android.view.View的控件,或者id为app的控件。(注意:如果tag中包含符号:、@、|、#,则需要转义才可以用,&%0;表示:,&%1;表示@,&%2;表示|,&%3;表示#,例:txt:a&%1;b,表示txt:a@b。) |
options | json object | {flag:'', root:null, fast: false, family: [], region:null, duration:500, maxStep:5, beforeWait:0, afterWait:0, failed: null} | flag支持clickable(搜索clickable为true的控件)、unclickable(搜索clickable为false的控件)、selected(搜索selected为true的控件)、unselected(搜索slected为false的控件)、checked(搜索checked为true的控件)、unchecked(搜索checked为false的控件)、traverse_one_by_one(每个tag搜索一遍,效率有点低,当无法搜索到控件时可以使用这个flag)、find_all(搜索所有满足条件的控件)、traverse_invisible(搜索包含不可见的控件,当无法搜索到控件时可以使用这个flag),用|分割多个flag,例:findView('txt^:hello', {flag:'find_all|traverse_invisible|clickable'});表示搜索clickable为true、text以hello开头的所有控件,搜索时包含不可见的控件。root表示搜索时指定的根控件,root为null时,从顶端开始搜索,若指定root,则搜索会更精确效率更高;注意root也可以为tag。点击查看family「视频教程」。region可以在搜索时指定区域[left, top, right, bottom],注意:若取值在[0, 1]之间表示比例,例:[0.5, 100, 900, 2000]表示left位于屏幕x轴中点;若取值大于1表示像素值。duration表示两次搜索的间隔时间,单位毫秒。maxStep表示当搜索失败时,重搜索的最大次数。beforeWait表示在搜索前等待的时间,单位毫秒。afterWait表示在搜索完成后等待的时间,单位毫秒。failed表示搜索控件失败后调用的函数,主要用于在操作期间出现弹窗的场景。fast为true时表示快速搜索,如果搜索控件比较慢时使用该参数,注意开启后可能会出现某些文本搜索不到,具体使用时注意观察。 |
例子: var ret = findView('txt:确认', {flag:'find_all'}); if (ret.length > 0) { console.log('找到目标控件:' + ret.views[0]); // 注意:控件个数为ret.views.length不是ret.length console.log('找到控件个数:' + ret.views.length); }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag | string/integer | 必填 | 当为string类型时表示tag如上。,当为integer类型时表示第几个根界面 |
options | json object | {duration:500, maxStep:5, beforeWait:0, afterWait:0} | duration表示两次搜索的间隔时间,单位毫秒,默认500ms。maxStep表示当搜索失败时重搜索的最大次数,默认5。beforeWait表示在搜索前等待的时间,单位毫秒,默认0。afterWait表示在搜索完成后等待的时间,单位毫秒,默认0。 |
例子: var root = findRoot('txt:数字键盘'); if (null != root) { console.log('找到根容器:' + root); // 在root下查找tag为good的控件 var ret = findView('txt:good', {root: root}); } root = findRoot(1); if (null != root) { console.log('找到根容器:' + root); }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag/node object | string/object | 必填 | tag如上。或者控件对象 |
options | json object | {click: false, isLongClick: false, clickDuration: -1, fast: false, random: true, clickCount:1, flag:'', family: [], region:null, root:null, widgetIndex:0, failed:null, duration:500, maxStep:5, beforeWait:0, afterWait:0} | 点击查看family「视频教程」。click表示是否使用UI控件原生的click功能,false表示使用手势模拟点击,注意使用控件内置原生点击功能的前提是控件的clickable属性必须为true,或者其某一个祖先控件的clickable属性为true。random表示模拟点击时,是否使用随机位置,不随机则为中点位置。clickCount表示点击次数,默认点击一次,2表示双击。widgetIndex表示点击搜索到的第几个控件,默认为0,0表示第一个,-1表示最后一个依次类推。当为模拟点击时clickDuration有效,表示点击动作的时长。其它选项如上。 |
例子: var ret = findView('txt:确定'); if (ret.length > 0) { click(ret.views[0], {click: true, afterWait: 3000}); } click('txt:确定', {click: true, afterWait: 3000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
x | float | 必填 | 点击区域的x坐标 |
y | float | 必填 | 点击区域的y坐标 |
options | json object | {unit:'px', duration:100, beforeWait:0, afterWait:0} | unit表示坐标的单位,默认为像素(px),可以取dp,percent,px,控件的尺寸(px单位)可以在UI树中获取;dp为设备无关单位,换算公式为:px=dp*rsDensity;percent,取[0-1],表示为屏幕宽或高成比例,换算公式:宽(px)=rsScreenWidth*x,高(px)=rsScreenHeight*y。duration表示多长时间完成一次点击,单位:毫秒。其它选项如上。 |
例子: gestureClick(100, 200, {afterWait: 3000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
cordArray | json array | 必填 | 偶数个点的坐标为浮点型,依次顺序排列:x1,y1,x2,y2... |
options | json object | {unit: 'px', duration: 300, beforeWait: 0, afterWait: 0} | unit表示坐标的单位,默认为像素(px),可以取dp,percent,px,控件的尺寸(px单位)可以在UI树中获取;dp为设备无关单位,换算公式为:px=dp*rsDensity;percent,取[0-1],表示为屏幕宽或高成比例,换算公式:宽(px)=rsScreenWidth*x,高(px)=rsScreenHeight*y。duration表示多长时间完成一次手势操作,单位:毫秒。其它选项如上。 |
例子: // 同时点击坐标(10,10) (20, 20) gesture([10, 10, 20, 20], {duration: 1000, afterWait: 2000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag | string | 必填 | 如上。 |
options | json object | {backFirst: true, failed: null, flag:'', family: [], region: null, root:null, duration:500, maxCheckStep, maxStep:5, beforeWait:0, afterWait:0} | backFirst表示是否先back再找ui控件。failed表示搜索目标控件失败后调用的函数,主要用于在back过程中出现弹窗的场景。其它选项如上。 |
例子:返回到含有'我的'标签的页面 back2Page('txt:我的', {maxStep: 10, afterWait: 3000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
findTag/node object | string/object | 必填 | tag如上。或者为ui控件对象 |
checkTag | string | 必填 | 如上。 |
options | json object | {findFlag: '', family: [], region: null, checkFlag: '', click: false, root:null, clickWidgetIndex: 0, failed: null, duration:500, random: true, maxStep:5, maxFindStep:1, maxCheckStep:2, beforeWait:0, afterWait:0} | findFlag和checkFlag分别表示两次寻找控件的flag。点击查看family「视频教程」。click表示找到控件后是否使用原生的点击功能,注意使用控件内置原生点击功能的前提是控件的clickable属性必须为true,或者其某一个祖先控件的clickable属性为true。failed表示搜索控件失败后调用的函数,主要用于在操作过程中出现弹窗的场景。clickWidgetIndex,默认为0,0表示第一个,-1表示最后一个依次类推。其它选项如上。maxFindStep表示搜索findTag时最大尝试次数,maxCheckStep表示搜索checkTag时最大尝试次数,maxStep表示切换页面最大尝试次数。duration表示点击后等多长时间后开始检查是否切换到目标页面。 |
例子:点击'我的',进入关于我的页面,如果页面中包含tag:'设置',说明进入新页面成功。 var ret = switchPage('txt:我的', 'txt:设置', {maxStep: 6, maxFindStep: 1, maxCheckStep: 5}); if (ret.length > 0) { console.log('进入页面成功'); } var ret = findView('txt:test'); if (ret.length > 0) { var item = ret.views[0]; var ret = switchPage(item, 'txt:设置', {maxStep: 3, maxCheckStep: 5}); if (ret.length > 0) { console.log('进入页面成功'); } }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
params | array | 必填 | 每个数组元素为一个数组,表示一个switchPage的参数(具体参数如上) |
例子:切换3个页面,若返回2表示第1和第2个页面切换成功,后面的切换失败;若返回3,表示页面切换全部成功。 var ret = switchPages([['txt:我的', 'txt:设置'],['txt:我', 'txt:新闻', {click: true}],['txt:set', 'txt:add', {family:[0, -1]}]]); console.log('ret', ret);
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag/node object | string/object | 必填 | tag如上。或者控件对象 |
data | string | 必填 | 粘贴的数据 |
options | json object | {type:'set', flag:'', family: [], region: null, fast: false, root:null, widgetIndex: 0, failed:null, duration:500, maxStep:5, beforeWait: 0, afterWait: 0} | 点击查看family「视频教程」。type值为:'set' 或者 'paste'。 widgetIndex表示点击搜索到的第几个控件,默认为0,0表示第一个,-1表示最后一个依次类推。其它选项如上。 |
例子: var ret = findView('cn:com.android.EditText'); if (ret.length > 0) { paste(ret.views[0], '谢谢!', {afterWait: 3000}); } paste('cn:com.android.EditText', '谢谢!', {afterWait: 3000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag/node object | string/object | 必填 | tag如上。或者控件对象 |
options | json object | {flag:'', family: [], region: null, root:null, fast: false, widgetIndex: 0, failed:null, duration:500, maxStep:5, beforeWait: 0, afterWait: 0} | 点击查看family「视频教程」。widgetIndex表示点击搜索到的第几个控件,默认为0,0表示第一个,-1表示最后一个依次类推。其它选项如上。 |
x | integer | 选填 | 相对控件的x坐标,默认取控件中心点 |
y | integer | 选填 | 相对控件的y坐标,默认取控件中心点 |
例子:获取控件中心的颜色值 function main() { requestScreenShot(); var ret = findView('txt:name'); if (ret.length > 0) { var color = getWidgetColor(ret.views[0]); console.log('color:' + color); } var color = getWidgetColor('txt:name'); console.log('color:' + color); }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tag/node object | string/object | 必填 | 控件tag或者控件对象。null表示以整个屏幕作为参考进行滚动。 |
direction | string | 必填 | 滚动方向,up向上滚动,down向下滚动,left向左滚动,right向右滚动 |
options | json object | {flag:'', family: [], fast: false, root: null, widgetIndex: 0, type: 1, distance: 0.8, duration: 500, beforeWait: 0, afterWait: 0} | root表示搜索tag时使用root作为根控件搜索,若为null则全局搜索。type表示滚动类型,1手势滚动,2使用系统翻页,3表示先使用系统翻页再立马使用手势滚动。distance表示每次滑动的距离,取值(0-1],1表示整个控件高度(左、右滚动时为宽度)。duration表示完成滚动的时间,单位:毫秒。widgetIndex表示点击搜索到的第几个控件,默认为0,0表示第一个,-1表示最后一个依次类推。其它选项如上。 |
例子: scroll('id:com.libra.wxhelper:id/device_name', 'up', {type: 2, distance: 0.95, afterWait: 3000});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
cordArray | json array | 必填 | 偶数个点的坐标为浮点型,依次顺序排列:x1,y1,x2,y2...。或者为数组,数组中为具体的坐标值,可以模拟多个手指同时滑动,比如:放大、缩小等操作。 |
options | json object | {unit: 'px', duration: 300, beforeWait: 0, afterWait: 0} | unit表示坐标的单位,默认为像素(px),可以取dp,percent,px,控件的尺寸(px单位)可以在UI树中获取;dp为设备无关单位,换算公式为:px=dp*rsDensity;percent,取[0-1],表示为屏幕宽或高成比例,换算公式:宽(px)=rsScreenWidth*x,高(px)=rsScreenHeight*y。duration表示多长时间完成一次手势操作,单位:毫秒。其它选项如上。 |
例子: gesture([10, 10, 20, 20, 30, 55], {duration: 1000, afterWait: 2000}); // 地图,模拟手指来缩小 gesture([[ 650, 300, 600, 300], [450, 300, 500, 300]])
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
options | json object | {count: 1, duration: 1000, beforeWait: 0, afterWait: 0} | count表示做几次back,默认1。duration表示两次back间隔时间,默认1000,单位:毫秒。其它选项如上。 |
例子: back({count: 3, afterWait: 2000});
参数名 | 类型 | 默认值 | 说明 |
---|
例子: recentApps();
参数名 | 类型 | 默认值 | 说明 |
---|
例子: home();
参数名 | 类型 | 默认值 | 说明 |
---|
例子: openPowerDialog();
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
event | AccessibilityEvent类型object | 必填 | 通知事件。当系统有通知到来时,系统会主动调用cbNotification回调函数,该函数最后一个参数为AccessibilityEvent类型。 |
例子: openNotification(event);
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
options | jsonObject | {appName: '', packageName: '', beforeWait: 0, afterWait: 0} | appName和packageName表示刷新后切换该app,如果都为空,表示切换到智能辅助客户端程序。其它选项如上。 |
例子: refresh({appName:'冰狐智能辅助'});
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
textList | array | [] | 通知中的文本数组 |
className | string | 空 | 当前窗口的类名 |
packageName | string | 空 | app的包名 |
rawEvent | object | null | raw事件 |
例子: function main() { console.log('enter main'); } function cbNotification(textList, className, packageName, rawEvent) { console.log('=====>notification textList:' + textList + ' className:' + className + ' packageName:' + packageName); }
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
textList | array | [] | 当前窗口中的文本数组 |
className | string | 空 | 当前窗口的类名 |
packageName | string | 空 | app的包名 |
rawEvent | object | null | raw事件 |
例子:注意不支持调试执行,需要直接执行脚本才可以 function main() { console.log('enter main'); } function cbWindowChange(textList, className, packageName, rawEvent) { console.log('=====>windowChange textList:' + textList + ' className:' + className + ' packageName:' + packageName); }