跳到主要内容

节点封装

锁定节点

keepNode 锁定节点

参数名必选类型说明默认
modeboolean是否强制刷新节点false
keepNode();
//遇到界面不刷新时,强制刷新,
keepNode(true);
参数名类型说明

查找节点

findNode 查找节点并点击

参数名必选类型说明
selectorSelector选择器
isclickBoolean是否无指针点击
pointerBoolean是否指针点击
//查找节点
if (findNode(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"))) {
logd(JSON.stringify(g_ret))
}
//查找节点并无指针点击
if (findNode(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), true)) {
logd(JSON.stringify(g_ret))
}
//查找节点并指针点击
if (findNode(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), true, true)) {
logd(JSON.stringify(g_ret))
}
//信息存储在g_ret中
参数名类型说明
true/falseBoolean是否找到

findNodeS 查找节点S,异常处理使用

参数名必选类型说明
selectorSelector选择器
isclickBoolean是否无指针点击
pointerBoolean是否指针点击
//查找节点
findNodeS(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"))
//查找节点并无指针点击
findNodeS(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), true)
//查找节点并指针点击
findNodeS(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), true, true)
//信息存储在g_ret2中
参数名类型说明
true/falseBoolean是否找到

findNodeAll 查找所有节点并点击一个,如果取所有就不点击直接返回

参数名必选类型说明
selectorSelector选择器
sindexNumber节点下标,从0开始,99表示随机,负数代表从后向前取节点,-1开始
isclickBoolean是否无指针点击
pointerBoolean是否指针点击
//查找所有节点
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"))) {
logd(JSON.stringify(gNodeAll))
for (let i = 0; i < gNodeAll.length; i++) {
logd(JSON.stringify(gNodeAll[i]))
//指针点击
gNodeAll[i].click()
//无指针点击
findClickEx(gNodeAll[i])
}
}

//查找指定第1个节点,下标从0开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 0)) {
logd(JSON.stringify(gNodeAll))
//指针点击
gNodeAll.click()
//无指针点击
findClickEx(gNodeAll)
}

//查找指定第2个节点并无指针点击,下标从0开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 1, true)) {
logd(JSON.stringify(gNodeAll))
}

//查找指定第3个节点并有指针点击,下标从0开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 2, true, true)) {
logd(JSON.stringify(gNodeAll))
}

//查找倒数第1个节点,下标从-1开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), -1)) {
logd(JSON.stringify(gNodeAll))
//指针点击
gNodeAll.click()
//无指针点击
findClickEx(gNodeAll)
}

//查找倒数第2个节点并无指针点击,下标从-1开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), -2, true)) {
logd(JSON.stringify(gNodeAll))
}

//查找倒数第3个节点并有指针点击,下标从-1开始
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), -3, true, true)) {
logd(JSON.stringify(gNodeAll))
}

//查找节点,并随机返回一个
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 99)) {
logd(JSON.stringify(gNodeAll))
//指针点击
gNodeAll.click()
//无指针点击
findClickEx(gNodeAll)
}

//查找节点并并随机无指针点击一个
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 99, true)) {
logd(JSON.stringify(gNodeAll))
}

//查找节点并并随机有指针点击一个
if (findNodeAll(text("添加话题").id("com.ss.android.ugc.aweme:id/n4"), 99, true, true)) {
logd(JSON.stringify(gNodeAll))
}
参数名类型说明
true/falseBoolean是否找到

查找可点击

findClickEx 查找可用父点击节点并无指针点击

参数名必选类型说明默认
nodeNodeInfo节点对象g_ret
isnoclickBoolean是否不进行指针点击[只返回可点击的父节点信息]false
//查找可点击父节点并无指针点击,默认g_ret参数
if (findNode(text("首页"))) {
logd("点击首页")
findClickEx()
//等同于findClickEx(g_ret)
}
//以上写法等同于
if (findNode(text("首页"), true)) {
logd("点击首页")
}

//指定node查找可点击的父节点并无指针点击
let node = text("首页").getOneNodeInfo(0)
if (node) {
findClickEx(node)
}

let tmp_node = null
if (findNode(text("首页"))) {
tmp_node = g_ret
if (findNode(text("消息"), true)) {
logd("点击消息")
} else {
logd("点击首页")
findClickEx(tmp_node)
}
}

//指定node查找节点的可点击父节点并返回父节点信息
let node = text("首页").getOneNodeInfo(0)
if (node) {
//只打印,并没有点击
if (findClickEx(node, true)) {
logd(g_parent)
}
}

//信息存储在g_parent中
参数名类型说明
true/falseBoolean是否找到

findLongClickEx 查找可用父点击节点并无指针长点击

参数名必选类型说明默认
nodeNodeInfo节点对象g_ret
isnoclickBoolean是否不进行指针点击[只返回可点击的父节点信息]false
//查找可用父节点并长无指针点击,默认g_ret参数
findLongClickEx()
//指定node查找节点并长无指针点击
findLongClickEx(node)
//指定node查找节点并返回父节点信息
findLongClickEx(node, true)
//信息存储在g_parent中
参数名类型说明
true/falseBoolean是否找到

findClickExC 查找可用子点击节点并无指针点击

参数名必选类型说明默认
nodeNodeInfo节点对象g_ret
isnoclickBoolean是否不进行指针点击[只返回可点击的父节点信息]false
//查找子节点并无指针点击,默认g_ret参数
findClickExC()
//指定node查找子节点并无指针点击
findClickExC(node)
//指定node查找子节点并返回信息
findClickExC(node, true)
//信息存储在g_child中
参数名类型说明
true/falseBoolean是否找到

findScrollableP 查找可用父滚动节点并滚动

参数名必选类型说明
pkgNamestring包名
classNamestring类名
//找到一个节点
if (findNode(clz("android.widget.TextView").textMatch(".*次播放.*个视频"))) {
logd("找到列表节点");
//1.查找可滚动父节点,并上拉滚动一屏,默认传入g_ret
findScrollableP()
//2.查找可滚动父节点,并上拉滚动一屏,主动传入节点对象
findScrollableP(g_ret)
//3.不滚动,返回值存储在g_parent中,手动处理滚动方向
if (findScrollableP(node, true)) {
logd("可滚动父节点")
g_parent.scrollForward()
}
}

返回值类型说明
true/falsebool是否找到

获取属性

centerX 获取节点x中心点

参数名必选类型说明默认
nodeNodeInfo节点对象g_ret
if (findNode(text("首页"))) {
logd(centerX());
//等同于
logd(centerX(g_ret))
}
let node = text("首页").getOneNodeInfo(0)
if (node) {
logd(centerX(node))
}
参数名类型说明
500int节点x中心点

centerY 获取节点y中心点

参数名必选类型说明默认
nodeNodeInfo节点对象g_ret
if (findNode(text("首页"))) {
logd(centerY());
//等同于
logd(centerY(g_ret))
}
let node = text("首页").getOneNodeInfo(0)
if (node) {
logd(centerY(node))
}
参数名类型说明
500int节点y中心点

操作节点

pressHalf 在节点一半的范围内随机按压

参数名必选类型说明
nodeNodeInfo节点对象
timeMinnumber最小时长,默认1s
timeMaxnumber最大时长,默认同最小
pressHalf();
pressHalf(g_ret);
pressHalf(g_ret, 2);
pressHalf(g_ret, 2, 5);
返回值类型说明
true/falseboolean是否成功

clickPointBounds 随机点击节点

参数名必选类型说明
nodeInfoobject节点信息
nodelayboolean不加延迟
if (findNode(text("xxxx"))) {
//随机500-1000ms延迟
clickPointBounds();
//不加延迟
clickPointBounds(g_ret, true);
}
let node = text("xxxxxxx").getOneNodeInfo(0);
if (node) {
//随机500-1000ms延迟
clickPointBounds(node);
//不加延迟
clickPointBounds(node, true);
}

返回值类型说明

其他

getRunningPkgEx getRunningPkg替代

参数名必选类型说明
logd(getRunningPkg())
//官方功能经常获取不到包名
logd(getRunningPkgEx())
返回值类型说明
com.gibb.easyclickstring当前包名