天天看點

Auto.js 控件屬性缺失時擷取控件Auto.js 在控件屬性缺失情況下擷取控件使用環境一、具體操作總結

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

繼續閱讀