Auto.js 控件属性缺失时获取控件

本文介绍了在Auto.js Pro中如何在控件缺乏id和text等属性时,通过使用控件的className和其他属性组合来精确选取目标控件。提供了只使用一个属性选取和结合多个属性进行筛选的两种方法,强调了在属性缺失时利用控件的不同属性进行有效定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Auto.js 在控件属性缺失情况下获取控件

群里有很多新人问,各种既没有id也没有text的控件无法获取的问题.

文章目录

  • Auto.js 在控件属性缺失情况下获取控件
  • 使用环境
  • 一、具体操作
    • 只用一个控件属性选取
    • 利用多控件属性组合选取
  • 总结


使用环境

我们在使用Auto.js Pro进行脚本开发时经常遇到多个页面控件(甚至所有)无id无text,我一开始也很懵,直接使用click()方法又显得很low.
但他们的className通常是有的,而且会重名.
其他属性也会有不同.


一、具体操作

只用一个控件属性选取

我先说这是一种比较头铁的方法,只用一个 控件属性 来选取,通常是没必要的.
举例:
现在就仅用className获取某个具体的页面控件,一开始我想的非常麻烦,看了网上说的甚麽循环遍历要么答非所问要么含含糊糊,干脆自己试了,
其实原理类似于使用getElementsByTagName()获取DOM元素,直接用className获取到的将会是一个数组形式的值,其内部包含着与各个控件对应的对象,而操纵哪个控件,只需要指明"我需要数组的第几个元素"即可:

/* arr内包裹find()返回的所有className为"android.widget.EditText"的元素; */
var arr = className("android.widget.EditText").find();
var object = arr[2];//"我需要数组的第3个元素;"
//至此完毕,以下为无关操作;
console.log(object);   //输出一个uiObject对象;
if (object) {         //如果找到了,就开始做吧;
    object.input("我是文本a");    //将第3个文本框的内容设置为"我是文本a";
}

利用多控件属性组合选取

使用多属性组合的方法来进行选取,推荐常规使用;
一个控件会有很多属性,即便有的属性缺失,有的重复,那也总有几项是不一样的,这就可以作为筛选条件加以利用:
比如现在id缺失,text缺失,className大量重复,没事,你重复我可以不用啊,我用那些不一样的就完了嘛:

//选取控件属性depth值为9,控件属性drawingOrder值为0,控件属性indexInParent值为2的控件,查找一次;
var object = className("android.widget.EditText").depth(9).drawingOrder(0).indexInParent(2).findOne();
//至此选取完毕,以下为无关代码;
if (object) {
    var x = object.bounds().centerX();
    var y = object.bounds().centerY();
    click(x, y);
    object.setText("我是内容a")
    log("已找到目标");
    exit();
}

总结

Auto.js部分的知识很碎…
感觉整个Auto.js就是由一个个函数组成的,也没有太多的语法,就是原生JS语法+函数,我看到这些函数中的一部分,在Node.js中也存在…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值