const myUtils = {
x(node) {
if (node) {
return (node.bounds.right + node.bounds.left) / 2
} else {
return -1
}
},
y(node) {
if (node) {
return (node.bounds.bottom + node.bounds.top) / 2
} else {
return -1
}
},
trim(str) {
return str.replace(/\s+/g, ""); //js去掉所有空格
},
滑动到底部(x1, y1, x2, y2, wait, second, msg) {
this.等待出现(() => {
swipeToPoint(x1, y1, x2, y2, 200)
second ? sleep(second * 1000) : sleep(100)
}, wait, msg)
},
点节点坐标(node) {
if (node && node.bounds) {
const bounds = node.bounds
clickPoint((bounds.right + bounds.left) / 2, (bounds.bottom + bounds.top) / 2)
} else {
toast("节点不存在,无法点击")
}
},
getOneNodeInfo_(selector) {
return getOneNodeInfo(selector, 1000 * 10)
},
级联关系拿节点(selector, str) {
return this.级联关系拿节点_node_str(this.getOneNodeInfo_(selector), str)
},
级联关系拿节点_node_str(node, str) {
return this.级联关系拿节点_node_arr(node, str.split("."))
},
/**
* @param arr (f:父,z:子,x:兄) 例如 ["f","f","z0","x1"] = node.parent().parent().child(0).siblings()[1] z0可以省略为z
*/
级联关系拿节点_node_arr(node, arr) {
logd(JSON.stringify(node))
logd(arr)
if (!node) {
return false
}
// 如果级联的父子兄有一个在当前界面不存在则返回false,避免抛出异常导致脚本停止
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
logd("item:", item)
let resNode = this.item转node(node, item)
logd("resNode:" + JSON.stringify(resNode))
if (resNode) {
node = resNode
} else {
return false
}
}
return node
},
item转node(node, item) {
const itemNum = item.replace(/[fzx]/, "")
logd("itemNum:" + itemNum)
if (item === "f") {
return node.parent()
} else if (item.indexOf("z") !== -1) {
if (itemNum) {
return node.child(parseInt(itemNum))
} else {
return node.child(0)
}
} else if (item.indexOf("x") !== -1) {
if (itemNum) {
return node.siblings()[(parseInt(itemNum))]
} else {
return node.siblings()[0]
}
}
},
a到b_找图(handle, pic1, pic2, second) {
this.a到b(handle, () => this.找图(pic1).isSuccess, () => this.找图(pic2).isSuccess, second)
},
找图(pic, isClick) {
logd("pic:" + pic)
// 需要保证已经初始化赋予了截图权限
let res = {isSuccess: false, point: {x: -1, y: -1}}
//从工程目录下res文件夹下读取sms.png文件
let sms = readResAutoImage(pic);
//抓取屏幕
let aImage = image.captureFullScreen();
logd("aimage " + aImage);
if (aImage != null) {
//在图片中查找
let points = image.findImage(aImage, sms, 0, 0, 0, 0, 0.7, 0.9, 21, 5);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
let point = points[0]
let x = parseInt((point.left + point.right) / 2)
let y = parseInt((point.top + point.bottom) / 2)
res.isSuccess = true
res.point.x = x
res.point.y = y
if (isClick) {
clickPoint(x, y)
}
}
//图片要回收
image.recycle(aImage)
}
//图片要回收
image.recycle(sms)
return res
},
a到b_节点_多步骤(selectorArr, second) {
for (let i = 0; i < selectorArr.length; i++) {
logd(i)
let selectorA = selectorArr[i + 1 - 1]
if (i < selectorArr.length - 1) {
let selectorB = selectorArr[i + 1]
this.a到b_节点(selectorA, selectorB, second)
} else {
logd("break")
break
}
}
},
a到b_节点(selectorA, selectorB, second) {
this.a到b(() => click(selectorA), () => has(selectorA), () => has(selectorB), second ? second : false)
},
a到b(handle, aFun, bFun, second) {
while (true) {
if (bFun()) {
break
} else if (aFun()) {
handle()
} else {
logd("else")
}
second ? sleep(second * 1000) : sleep(1000)
}
},
等待出现_节点(handle, selector, msg) {
this.等待出现(handle, () => has(selector), msg ? () => toast(msg) : false)
},
等待出现(handle, wait, msg) {
while (true) {
if (wait()) {
break
} else {
handle()
msg ? msg() : ""
}
}
}
}
function main() {
init()
const selectors = {
界面A() {
return text("界面A")
},
界面B() {
return text("界面B")
},
界面C() {
return text("界面C")
},
界面D() {
return text("界面D")
},
}
/*如果中途没有其他操作,可使用该函数*/
myUtils.a到b_节点_多步骤([selectors.界面A(), selectors.界面B(), selectors.界面C(), selectors.界面D()])
/*单独使用*/
myUtils.a到b_节点(selectors.界面A(), selectors.界面B())
//业务逻辑
myUtils.a到b_节点(selectors.界面B(), selectors.界面C())
//业务逻辑
myUtils.a到b_节点(selectors.界面C(), selectors.界面D())
//业务逻辑
/*等待节点出现*/
myUtils.等待出现_节点(() => {
//业务逻辑
}, selectors.界面A(), "等待xxx出现")
/*级联拿节点*/
// 等同于 text("界面A").parent().child(0).child(2).siblings()[1]
// 报错返回false,不会停止线程
const resNode = myUtils.级联关系拿节点(selectors.界面A(), "f.z0.z2.x1")
logd(JSON.stringify(resNode))
/*截图a到b*/
myUtils.a到b_找图(() => {
myUtils.找图("a.png", true)
}, "a.png", "b.png")
}
function init() {
let request = image.requestScreenCapture(10000, 0);
if (request) {
toast("申请成功");
} else {
toast("申请失败");
exit();
}
let d = image.initOpenCV();
logd(d)
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//开始再这里编写代码了!!
}
easyclick常用工具函数
于 2022-10-18 12:08:32 首次发布