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中也存在…