自动构建

自动构建在js脚本api的基础上进一步抽象和封装了更简单、更实用的模块(比如:弹窗处理,广告处理,循环处理、遍历容器,进入app、搜索控件并循环处理、点击进入页面等等),让使用者专心于业务逻辑梳理。不会编程的同学可以使用自动构建功能直接制作辅助功能;有编程经验的同学使用自动构建可以简化开发工作,提升开发效率(只需关注核心业务逻辑即可)

开始构建前,强烈建议您先了解这些内容!

使用步骤

  • 梳理业务逻辑。
  • 根据业务逻辑选择模块并配置参数。
  • 编译"自动构建"生成对应的js脚本。
  • 调试运行js脚本。

构建模块

一个完整的自动构建是个树形结构,最顶层为root模块,根据业务逻辑依次选择合适的模块进行拼装并配置,最后形成一个和业务逻辑结构类似的树形结构。下面介绍下每个构建模块的用法。变量声明进入APP弹窗处理广告处理窗口变化处理通知处理点击控件搜索控件并循环处理查找控件点击进入页面循环处理跳出循环遍历容器返回页面滚动处理概率日志条件处理定义函数调用函数退出函数调度延时按返回键刷新当前页面显示最近运行的app显示桌面粘贴文本模块组自定义模块

· 变量声明(declareVar)

声明一些变量用于辅助构建,这些变量会在脚本运行过程中系统自动进行赋值,我们只需要在合适时机使用即可,一般不需要修改这里。支持4种类型变量:普通变量,全局变量,持久变量,day变量,分别表示不同的作用域。详见这里
默认变量:
变量名 类型 说明
ret 普通变量 默认用于存放模块返回值,例:var ret = findView('txt:讲解');
view 普通变量 默认用于存放控件变量,例:var ret = findView('txt:讲解');view=ret.views[0];
viewContainer 普通变量 默认用于存放控件容器,例:var ret = findView('txt:讲解');viewContainer=ret.views;
item 普通变量 默认用于存放遍历容器时的孩子,例:var ret = findView('txt:讲解');for(var item of ret.views){};

· 进入APP(enterApp)

打开并进入app,成功后系统会自动按顺序执行所有子模块实现相关业务逻辑。
属性名 类型 说明
packageName string app包名
findTag tag app启动后首页中出现的某个控件的tag,出现该tag就表示app启动成功。
autoInstall boolean 是否支持自动安装
autoUpdate boolean 是否支持自动升级
wait integer 启动app后等待多长时间,默认1000,单位毫秒
false module 启动app失败后执行的模块,比如用日志模块记录下启动失败
failed popup 搜索find tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
maxStep integer 最多尝试多少次

· 弹窗处理(exitPopup)

处理app在运行过程中随机弹出来的窗口,比如:升级对话框等。
属性名 类型 说明
name string 函数名,弹出处理模块最后会被编译成一个函数供其他模块调用;如果能处理就返回true,不能处理就返回false
false array 弹窗处理数组(包含弹窗处理和广告处理),当前模块不能处理弹窗时,依次调用数组中的模块处理,直到返回true为止
处理项由tag-module对组成,tag表示弹窗中的某个控件tag,若出现该tag则表示弹窗出现。module表示处理该弹窗的模块。
处理app在运行过程中弹出广告的场景。
属性名 类型 说明
enterWindowClassName array 广告窗口类名数组。当出现其中一个窗口时表示进入广告了
enterTags array 广告窗口某个控件的tag数组。出现其中一个tag,表示进入广告了
breakTags array 退出广告后的显示窗口控件的tag数组。出现其中一个tag,表示退出广告了
处理项由tag-module对组成,tag表示广告窗口中,当广告结束后,点击该控件就可以退出广告的控件tag。module表示对应处理模块,比如点击等。

· 窗口变化处理 (windowChange)

当出现新窗口时,作出相应的处理。比如出现"授权权限对话框"时,可以选择取消或者授权。
处理项由className-module对组成,className表示窗口类名。module表示对应处理模块,比如点击等。

· 通知处理(notification)

通知处理,比如当微信来消息或者收到短信时做相应的处理。
处理项由filter-module对组成,filter表示通知中的某个标志性文本,比如:微信消息。module表示相应的处理模。已经匹配到filter后,不再匹配其他filter。

· 点击控件(click)

点击当前界面中的某个控件。分三种点击类型:通过控件tag点击、直接点击控件、手势点击屏幕。点击这里查看详情
通过控件tag点击:
属性名 类型 说明
tag tag 被点击控件的tag
root var 搜索控件时指定的root,若指定则从root开始搜索。
failed popup 搜索tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
false module 搜索控件失败后,执行的模块,可以在这里打error日志。
mode select 点击模式,使用模拟点击、控件内置点击功能、先模拟点击再使用内置点击功能。注意使用控件内置点击功能的前提是控件的clickable属性必须为true
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 当搜索tag失败时,重试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
直接点击控件:
属性名 类型 说明
target var 被点击控件变量
false module 搜索控件失败后,执行的模块,可以在这里打error日志。
mode select 点击模式,使用模拟点击、控件内置点击功能、先模拟点击再使用内置点击功能。注意使用控件内置点击功能的前提是控件的clickable属性必须为true
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
手势点击屏幕:
属性名 类型 说明
x coord 被点击屏幕x坐标
y coord 被点击屏幕y坐标
unit string unit表示坐标的单位,默认为像素(px),可以取dp,percent,px,详见这里
false module 执行失败后,执行的模块,可以在这里打error日志。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 搜索控件并循环处理(searchAndLoopDeal)

根据处理项的tag搜索控件并进行循环多次处理,注意与查找控件(findView)的区别。系统在找到tag处理后会继续搜索tag,如果找到则继续处理,直到找不到tag为止才算完成一趟搜索。这里的每个tag都带一个最大处理次数count(默认为1),当该tag被处理一次后count减1,若为0则自动删除该tag。变量viewContainer存放搜索到的控件数组(可能找到多个控件),view存放搜索到的第一个控件注意:一趟搜索包含多次搜索。
属性名 类型 说明
root var 搜索控件时指定的root,若不为空则从root开始搜索。
retryCount integer 搜索一趟失败后,最多再重新搜索几趟,默认为0,一般不需要修改。
false module 搜索一趟失败后,执行的模块,可以在这里打error日志。
failed popup 搜索tag一次失败后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 一趟搜索中最大尝试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
处理项由(tag+count)-module对组成,tag表示被搜索控件的tag,count表示该tag最多能被处理几次,超过了次数会被系统自动移除,默认取1。module表示对应处理模块。

· 查找控件(findView)

根据处理项的tag查找控件,如果找到其中任何一个tag就执行其对应的处理模块,然后模块结束,注意和搜索控件并循环处理(searchAndLoopDeal)区别变量viewContainer存放找到的控件数组,view存放找到的第一个控件
属性名 类型 说明
root var 搜索控件时指定的root,若不为空则从root开始搜索。
false module 调用结束没有找到控件时执行的模块,可以在这里打error日志。
failed popup 查找tag一次失败后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 最大尝试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
处理项由tag-module对组成,tag表示被搜索控件的tag,module表示对应处理模块。

· 点击进入页面(clickAndEnter)

点击控件,进入另一个页面,如果进入成功,则按顺序执行所有子模块,变量viewContainer存放搜索checkTag找到的控件数组,view存放搜索checkTag找到的第一个控件。分两种点击类型:通过控件tag点击、直接点击控件。
通过控件tag点击:
属性名 类型 说明
clickTag tag 被点击控件的tag
checkTag tag 进入另一个页面后的控件tag,若出现该tag则表示进入页面成功
root var 搜索控件时指定的root,若指定则从root开始搜索。
mode select 点击模式,使用模拟点击、控件内置点击功能。注意使用控件内置点击功能的前提是控件的clickable属性必须为true
false module 搜索控件失败后,执行的模块,可以在这里打error日志。
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
failed popup 搜索tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 当搜索tag失败时,重试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
直接点击控件:
属性名 类型 说明
target var 被点击控件变量
checkTag tag 进入另一个页面后的控件tag,若出现该tag则表示进入页面成功
mode select 点击模式,使用模拟点击、控件内置点击功能。注意使用控件内置点击功能的前提是控件的clickable属性必须为true
false module 搜索控件失败后,执行的模块,可以在这里打error日志。
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
failed popup 搜索tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 当搜索tag失败时,重试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 循环处理(loop)

用于有循环处理需求的场景,每次循环都会按顺序执行所有子模块,比如:看5个短视频,就可以用次数循环。分三种类型:通过时间控制循环、通过次数控制循环、永久循环。
通过时间控制循环:
属性名 类型 说明
minRunTime integer 最小运行时长,单位分
maxRunTime integer 最长运行时长,单位分,若minRunTime不等于maxRunTime,则实际运行时间取[minRunTime,maxRunTime]间的随机值
通过次数控制循环:
属性名 类型 说明
minCount integer 最少运行次数
maxCount integer 最大运行次数,minCount不等于maxCount,则实际运行次数取[minCount,maxCount]间的随机值

· 跳出循环(break)

跳出循环(loop)。分三种类型:直接跳出循环、找到tag跳出循环、满足条件跳出循环。
直接跳出循环:
属性名 类型 说明
找到tag跳出循环:
属性名 类型 说明
breakTag tag 找到该tag就跳出循环
failed popup 搜索tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
满足条件跳出循环:
属性名 类型 说明
expr string 条件表达式

· 遍历容器(traverse)

用于有遍历访问容器中每个控件的场景,每次遍历都会按顺序执行所有子模块,遍历时容器的子控件存放在item变量中,可以在子模块中直接使用。分两种类型:通过控件tag搜索容器、从变量获取容器。
通过控件tag搜索容器:
属性名 类型 说明
tag tag 被搜索容器的tag
failed popup 搜索tag失败一次后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
startIndex integer 从容器的第几个孩子开始遍历 取值>=0,0表示第一个孩子依次类推。
lastIndex integer 从容器的倒数第几个孩子停止遍历 取值>=0,0表示最后一个孩子依次类推。
retryCount integer 当搜索容器失败后,刷新下界面再次重试的次数。
randomPick boolean 是否从容器的孩子中随机抽取几个用于遍历。
clickable boolean 是否仅处理可点击的子控件。
从变量获取容器:
属性名 类型 说明
target var 被遍历的容器变量
descendant array 后代数组,表示点击时点击控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
startIndex integer 从容器的第几个孩子开始遍历 取值>=0,0表示第一个孩子依次类推。
lastIndex integer 从容器的倒数第几个孩子停止遍历 取值>=0,0表示最后一个孩子依次类推。

· 返回页面(back2Page)

按back键返回指定页面。成功后按顺序执行所有子模块。
属性名 类型 说明
tag tag 返回页面中的某个控件tag
root var 搜索控件时指定的root,若不为空则从root开始搜索。
backFirst boolean 是否先按back键,再判断是否返回指定页面。
false module 搜索一趟失败后,执行的模块,可以在这里打error日志。
failed popup 搜索tag一次失败后调用这个模块处理可能出现的弹窗或者广告,可以选择弹窗处理或者广告处理
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 一趟搜索中最大尝试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 滚动处理(scroll)

滚动页面。分两种类型:手势滚动、系统翻页。
手势滚动:
属性名 类型 说明
direction string 取值:向上滚动、向下滚动
minScrollDistance float 最小滚动距离,取值范围[0-1],1表示整个屏幕长度。
maxScrollDistance float 最大滚动距离,取值范围[0-1],若minScrollDistance不等于maxScrollDistance,则系统取[minScrollDistance, maxScrollDistance]间的一个随机值。
minDuration integer 滚动一次最小时间,单位毫秒。
maxDuration integer 滚动一次最长时间,单位毫秒。若minDuration不等于maxDuration,则系统取[minDuration, maxDuration]间随机值。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
系统翻页:
属性名 类型 说明
direction string 取值:向上滚动、向下滚动
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 概率(prob)

概率,落在概率内则返回true表示成功。成功后按顺序执行所有子模块。
属性名 类型 说明
prob integer 取之[0-100],100表示100%概率,0表示0%概率

· 日志(log)

打日志。
属性名 类型 说明
logType integer 日志类型,取值:log,error,warning,info
info value array 系统会自动把数组中的所有值按顺序连接起来,然后打印出来。

· 条件处理(if)

表达式为true时,按顺序执行所有子模块。
UI控件条件:
属性名 类型 说明
target var 控件变量
descendant array 后代数组,表示判断控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
conditions condition 所有条件逻辑与(&&),控件相关的条件处理,比如尺寸、文本、类名、子控件数、是否可点击、是否被选中等
直接写入条件:
属性名 类型 说明
expr string 表达式。

· 定义函数(function)

定义函数,父模块只能是root。函数按顺序执行所有子模块。
属性名 类型 说明
functionName string 函数名
params string array 参数列表。

· 调用函数(call)

调用函数,返回值放在ret变量中。
属性名 类型 说明
functionName string 函数名
params value array 系统会自动把数组中的所有值按顺序传递给函数。

· 退出函数(return)

退出当前函数。
属性名 类型 说明
returnValue value 返回值

· 调度(scheduler)

调度,父模块只能是root。
属性名 类型 说明
returnVar var 返回值存放变量
cron string cron表达式中文文档

· 延时(sleep)

延时。
属性名 类型 说明
minTime integer 最短延时时间,单位毫秒
maxTime integer 最长延时时间,单位毫秒,若minTime不等于maxTime,则取[minTime,maxTime]间的随机值。

· 按返回键(back)

按返回键。
属性名 类型 说明
count integer 按count次返回键
duration integer 两次按键间隔时间,单位毫秒。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 刷新当前页面(refresh)

刷新当前页面。
属性名 类型 说明
appName string 刷新后切换到该app上运行,注意该app必须是「冰狐智能辅助」启动的app。
packageName string 刷新后切换到该app上运行,注意该app必须是「冰狐智能辅助」启动的app。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 显示最近运行的app(recentApps)

显示最近运行的app。

· 显示桌面 (home)

显示桌面。

· 粘贴文本(paste)

粘贴文本。分两种类型:通过控件tag粘贴、直接粘贴到控件。
通过控件tag粘贴:
属性名 类型 说明
data value 待粘贴的数据。
tag tag 控件tag
root var 搜索控件时指定的root,若不为空则从root开始搜索。
descendant array 后代数组,表示粘贴到控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
mode string 粘贴模式,取值:set,paste。
duration integer 两次搜索间隔时间,单位毫秒
maxStep integer 一趟搜索中最大尝试次数。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒
直接粘贴到控件:
属性名 类型 说明
data value 待粘贴的数据。
target var 控件变量
descendant array 后代数组,表示粘贴到控件的后代而不是控件本身,取值范围>=-1,-1表示parent,0表示第一个孩子依次类推。例:[-1,-1,0,2]等同于item.parent.parent[0][2]
mode string 粘贴模式,取值:set,paste。
beforeWait integer 执行前等待时间,单位毫秒
afterWait integer 执行完成后等待时间,单位毫秒

· 模块组(group)

组合多个模块,按顺序执行所有子模块。

· 自定义模块(custom)

自定义模块,直接写入代码。
属性名 类型 说明
code string js代码
Copyright © 2021 冰狐智能辅助. All rights reserved.