Auto.js通过多点坐标定位排除方法


  1. 首先,通过 className("android.widget.Image").visibleToUser().find() 方法找到所有可见的 android.widget.Image 类型的控件,并将结果保存在 more_btn 变量中。

  2. 接下来,判断 more_btn 是否存在。如果存在,则执行以下操作:

  3. 初始化变量 maxLeft 和 minTop 分别为最小和最大的整数值,初始化变量 maxChild 为 null

  4. 遍历 more_btn 数组中的每个控件,对每个控件进行以下判断:

    • 判断控件的长方形宽度和高度之差是否不超过10,并且宽度是否不超过100。
    • 如果满足上述条件,则进一步判断控件的左边界是否大于 maxLeft,且上边界是否小于 minTop
    • 如果满足上述条件,则更新 maxLeft 为当前控件的左边界,更新 minTop 为当前控件的上边界,更新 maxChild 为当前控件。
  5. 如果存在满足条件的 maxChild,则执行以下操作:

    • 输出屏幕的宽度和高度。
    • 判断 maxChild 的左边界是否小于屏幕宽度的三分之二,并且上边界是否小于屏幕高度的一半。
    • 如果满足上述条件,则输出 "排查到目标坐标点",并调用 节点坐标点击(maxChild) 方法。
    • 否则输出 "怀疑坐标点不准确"。
  6. 如果不存在满足条件的 maxChild,则输出 "没有找到控件信息"。


let more_btn = className("android.widget.Image").visibleToUser().find()
// let more_btn = className("android.widget.ImageView").visibleToUser().find()
log(more_btn.length)

if (more_btn) {
let maxLeft = Number.MIN_SAFE_INTEGER;
let minTop = Number.MAX_SAFE_INTEGER;
let maxChild = null;

more_btn.forEach(function (child, index) {
// log("数量:" + index)
// log("控件信息" + child)
// log("控件信息左边:" + child.bounds().left)
// log("控件信息上边:" + child.bounds().top)
// log("控件信息长方形宽度:" + child.bounds().width())
// log("控件信息长方形高度:" + child.bounds().height())
if (Math.abs(child.bounds().width() - child.bounds().height()) <= 10 && child.bounds().width() <= 100) { //判断其长方形的宽高差是否不超过10
// console.log("宽高相差不超过10 且宽度不超过100");
if (child.bounds().left > maxLeft && child.bounds().top < minTop) { //循环出“控件信息左边”数值最大的并且是“控件信息上边”数值最小的
maxLeft = child.bounds().left;
minTop = child.bounds().top;
maxChild = child;
}
sleep(100)
} else {
// console.log("宽高相差超过10,或宽度超过100");
}
sleep(100)
})

if (maxChild) {
// log("控件信息左边最大且上边最小的是:" + maxChild)
// log("控件信息左边:" + maxChild.bounds().left)
// log("控件信息上边:" + maxChild.bounds().top)
// log("控件信息长方形宽度:" + maxChild.bounds().width())
// log("控件信息长方形高度:" + maxChild.bounds().height())
log(Math.abs(device.width - (device.width / 3))) //屏幕的宽度
log((device.height / 2))//屏幕的高度

if (Math.abs(device.width - (device.width / 3))< maxChild.bounds().left && (device.height / 2) > maxChild.bounds().top) {
log("排查到目标坐标点")
节点坐标点击(maxChild)
}else{
log("怀疑坐标点不准确")
}


} else {
log("没有找到控件信息")
}
}