easyclick常用工具函数

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)
    //开始再这里编写代码了!!
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值