一.全局
waitForPackage(package[, period = 200])//等待指定的應(yīng)用出現(xiàn)鹦筹。
waitForPackage("com.tencent.mm")//例如等待當(dāng)前界面為微信
waitForActivity(activity[, period = 200])//等待指定的Activity出現(xiàn)项棠,period為檢查Activity的間隔。
waitForActivity("com.ss.android.ugc.aweme.following.ui.FollowRelationTabActivity")//等待抖音其他用戶的關(guān)注列表頁面出現(xiàn):
sleep(n)//毫秒數(shù)
log("message")//打印日志
toast("message")//氣泡提示
toastLog("message")//打印日志并氣泡提示
setClip("text")//設(shè)置剪貼板內(nèi)容
exit()//立即停止腳本運行
random(min, max)//隨機數(shù)
二.應(yīng)用(App)
launch("包名")//通過包名啟動應(yīng)用
launchPackage("包名")//通過包名啟動應(yīng)用
launchApp(appName)//通過名稱啟動應(yīng)用
getPackageName(appName)//獲取應(yīng)用名稱對應(yīng)的已安裝的應(yīng)用的包名
getAppName("包名")//獲取應(yīng)用包名對應(yīng)的已安裝的應(yīng)用的名稱
app.openAppSetting("包名")//打開應(yīng)用的詳情頁(設(shè)置頁)抹蚀。返回false; 否則返回true(全局)
app.editFile("/sdcard/1.txt/);//用其他應(yīng)用編輯文件文本文件
app.uninstall("com.tencent.mobileqq");//卸載應(yīng)用
app.openUrl("包名");//瀏覽器打開網(wǎng)站镜悉,Url,如果不以"http://"或"https://“開頭則默認(rèn)是"http://”
三.坐標(biāo)
setScreenMetrics(width, height)在width*height的設(shè)備中,坐標(biāo)操作自適應(yīng)
width {number} //屏幕寬度暑劝,單位像素
height {number} //屏幕高度,單位像素
click(x, y)//點擊
longClick(x, y)//長按
press(x, y, duration)//按住
swipe(x1, y1, x2, y2, duration)//滑動
swipeEx(x1, y1, x2, y2, duration)//仿真隨機曲線滑動
gesture(duration, [x1, y1], [x2, y2], …)//手勢路徑颗搂,時長2s
gestures([delay1, duration1, [x1, y1], [x2, y2], …], [delay2, duration2, [x3, y3], [x4, y4], …], …)//延時多點手勢路徑
四.控件
①.文本控件
setText([i, ]text)//輸入框的文本置為text//返回是否輸入成功担猛。當(dāng)找不到對應(yīng)的文本框時返回false。//i表示i + 1個輸入框
input([i, ]text)//輸入框文本追加內(nèi)容text//返回是否輸入成功。當(dāng)找不到對應(yīng)的文本框時返回false傅联。//i表示i + 1個輸入框
click(text[, i])//點擊大部分包含文字的按鈕
while(!click("掃一掃"));//通常與while同時使用以便點擊按鈕直至成功
longClick(text[, i]))//長按文本
②.滑動控件
scrollUp([i])//找到第i+1個可滑動控件上滑或左滑先改。
scrollDown([i])//找到第i+1個可滑動控件下滑或右滑
className("ImageView").depth(10).findOne().click()//多條件定位點擊
③.方形控件
Rect//UiObject.bounds(), UiObject.boundsInParent()返回的對象。//表示一個長方形(范圍)蒸走。
Rect.left//長方形左邊界的x坐標(biāo)
Rect.right//長方形右邊界的x坐標(biāo)
Rect.top//長方形上邊界的y坐標(biāo)
Rect.bottom//長方形下邊界的y坐標(biāo)
Rect.centerX()//長方形中點x坐標(biāo)
Rect.centerY()//長方形中點y坐標(biāo)
Rect.width()//長方形寬度仇奶。通常可以作為控件寬度
Rect.height()//長方形高度比驻。通掣盟荩可以作為控件高度
device.width來獲取屏幕寬度
device.height來獲取屏幕高度
Rect.contains(Rect)//返回是否包含另一個長方形r。包含指的是别惦,長方形r在該長方形的里面(包含邊界重疊的情況)狈茉。
Rect.intersect(Rect)//返回是否和另一個長方形相交。
五.選擇器進階
UiSelector.text(str)//text控件str
UiSelector.textContains(包含)//包含
UiSelector.textStartsWith(前綴)//前綴
UiSelector.textEndsWith(后綴)//后綴
UiSelector.textMatches(正則)//正則
UiSelector.desc(str)//desc控件str
UiSelector.descContains(前綴)//前綴
UiSelector.descStartsWith(prefix)//
UiSelector.descEndsWith(suffix)//
UiSelector.descMatches(正則)//正則
UiSelector.id(str)//id控件str
UiSelector.idContains(包含)//包含
UiSelector.idStartsWith(前綴)//前綴
UiSelector.idEndsWith(后綴)//后綴
UiSelector.idMatches(正則)//正則
UiSelector.className(str)//className控件str
UiSelector.classNameContains(包含)包含
UiSelector.classNameStartsWith(前綴)//前綴
UiSelector.classNameEndsWith(后綴)//后綴
UiSelector.classNameMatches(正則)為正則
UiSelector.packageName(str)packageName控件str
UiSelector.packageNameContains(包含)包含
UiSelector.packageNameStartsWith(前綴)//前綴
UiSelector.packageNameEndsWith(后綴)//后綴
UiSelector.packageNameMatches(正則)//正則
(左邊距掸掸;上邊距氯庆;下邊距;右邊距)
UiSelector.bounds(left, top, right, buttom)//定位控件的bounds屬性為屏幕上顯示的范圍扰付。
UiSelector.boundsInside(left, top, right, buttom)在參數(shù)構(gòu)成的范圍里面查找符合條件的控件堤撵。用于限制選擇器在某一個區(qū)域選擇控件。
UiSelector.boundsContains(left, top, right, buttom)在參數(shù)構(gòu)成的范圍里面查找符合條件的控件羽莺。用于限制控件的范圍必須包含所給定的范圍实昨。
UiSelector.drawingOrder(number)//為一個控件在父控件中的繪制順序,通城菀恚可以用于區(qū)分同一層次的控件屠橄。為當(dāng)前選擇器附加控件"drawingOrder等于order"的條件。
UiSelector.clickable([b = true])為當(dāng)前選擇器附加控件是否可點擊的條件闰挡。類名為android.view.View的控件大多可點擊
UiSelector.longClickable([b = true])為當(dāng)前選擇器附加控件是否可長按的條件锐墙。
UiSelector.checkable([b = true])為當(dāng)前選擇器附加控件是否可勾選的條件。
UiSelector.selected([b = true])為當(dāng)前選擇器附加控件是否已選中的條件长酗。
UiSelector.enabled([b = true])為當(dāng)前選擇器附加控件是否已啟用的條件溪北。
UiSelector.scrollable([b = true])為當(dāng)前選擇器附加控件是否可滑動的條件《崞ⅲ可以用這個條件來尋找可滑動控件來滑動界面之拨。
UiSelector.editable([b = true])為當(dāng)前選擇器附加控件是否可編輯的條件;一般來說可編輯的控件為輸入框(EditText)但不是所有
UiSelector.multiLine([b = true])為當(dāng)前選擇器附加控件是否文本或輸入框控件是否是多行顯示的條件咧叭。
UiSelector.findOne()對屏幕上的控件進行搜索蚀乔,找不到控件,當(dāng)屏幕內(nèi)容發(fā)生變化時會重新尋找菲茬,直到屏幕上出現(xiàn)并返回該控件吉挣。未出現(xiàn)則阻塞
UiSelector.findOne(timeout)毫秒的時間內(nèi)沒有找到終止搜索并返回null
UiSelector.findOnce()對屏幕上的控件進行搜索派撕,只找一次;返回第1個符合條件的控件睬魂;否則返回null
UiSelector.findOnce(i)對屏幕上的控件進行搜索终吼,只找一次;返回第 i + 1 個符合條件的控件氯哮;否則返回null
UiSelector.find()對屏幕上的控件進行搜索际跪,找到所有滿足條件的控件集合并返回。只進行一次
empty()函數(shù)判斷找到的是否為空
UiSelector.untilFind()對屏幕上的控件進行搜索喉钢,直到找到至少一個滿足條件的控件為止姆打,并返回所有滿足條件的控件集合。
UiSelector.exists()判斷屏幕上是否存在控件符合選擇器所確定的條件出牧;一般搭配if使用
UiSelector.waitFor()等待屏幕上出現(xiàn)符合條件的控件穴肘;在滿足該條件的控件出現(xiàn)之前,該函數(shù)會一直保持阻塞舔痕。
UiSelector.filter(f)為當(dāng)前選擇器附加自定義的過濾條件。
六.UiSelector選擇器
①控件屬性
className 類名豹缀。類名表示一個控件的類型伯复,例如文本控件為"android.widget.TextView", 圖片控件為"android.widget.ImageView"等。
packageName 包名邢笙。包名表示控件所在的應(yīng)用包名啸如,例如QQ界面的控件的包名為"com.tencent.mobileqq"。
bounds 控件在屏幕上的范圍氮惯。
drawingOrder 控件在父控件的繪制順序叮雳。
indexInParent 控件在父控件的位置。
clickable 控件是否可點擊妇汗。
longClickable 控件是否可長按帘不。
checkable 控件是否可勾選。
checked 控件是否可已勾選杨箭。
scrollable 控件是否可滑動寞焙。
selected 控件是否已選擇。
editable 控件是否可編輯互婿。
visibleToUser 控件是否可見捣郊,可以篩選在屏幕可視范圍內(nèi)的組件。
enabled 控件是否已啟用慈参。
depth 控件的布局深度呛牲。
②.控件類型
android.widget.TextView//文本控件
android.widget.ImageView//圖片控件
android.widget.Button//按鈕控件
android.widget.EditText//輸入框控件
android.widget.AbsListView//列表控件
android.widget.LinearLayout//線性布局
android.widget.FrameLayout//幀布局
android.widget.RelativeLayout//相對布局
android.widget.RelativeLayout//相對布局
android.support.v7.widget.RecyclerView//通常也是列表控件
七.選擇器操作
exits() 判斷控件是否存在
waitFor() 等待控件出現(xiàn)
UiObject.click()//點擊該控件,并返回是否點擊成功驮配。
UiObject.longClick()//長按該控件娘扩,并返回是否點擊成功尊勿。
UiObject.setText(text)//設(shè)置輸入框控件的文本內(nèi)容,并返回是否設(shè)置成功畜侦。
UiObject.copy()//對輸入框文本的選中內(nèi)容進行復(fù)制元扔,并返回是否操作成功。
UiObject.cut()//對輸入框文本的選中內(nèi)容進行剪切旋膳,并返回是否操作成功澎语。
UiObject.paste()//對輸入框控件進行粘貼操作,把剪貼板內(nèi)容粘貼到輸入框中验懊,并返回是否操作成功擅羞。
UiObject.setSelection(start, end)//對輸入框控件設(shè)置選中的文字內(nèi)容,并返回是否操作成功义图。
UiObject.scrollForward()//對控件執(zhí)行向前滑動的操作减俏,并返回是否操作成功。
UiObject.scrollBackward()//對控件執(zhí)行向后滑動的操作碱工,并返回是否操作成功娃承。
UiObject.select()//對控件執(zhí)行"選中"操作,并返回是否操作成功怕篷。"選中"和isSelected()的屬性相關(guān)
UiObject.collapse()//對控件執(zhí)行折疊操作历筝,并返回是否操作成功。
UiObject.expand()//對控件執(zhí)行操作廊谓,并返回是否操作成功梳猪。
UiObject.show()//對集合中所有控件執(zhí)行顯示操作,并返回是否全部操作成功蒸痹。
UiObject.scrollUp()//對集合中所有控件執(zhí)行向上滑的操作春弥,并返回是否全部操作成功。
UiObject.scrollDown()//對集合中所有控件執(zhí)行向下滑的操作叠荠,并返回是否全部操作成功匿沛。
UiObject.scrollLeft()//對集合中所有控件執(zhí)行向左滑的操作,并返回是否全部操作成功蝙叛。
UiObject.scrollRight()//對集合中所有控件執(zhí)行向右滑的操作俺祠,并返回是否全部操作成功。
children()//返回該控件的所有子控件組成的控件集合借帘≈┰可以用于遍歷一個控件的子控件
childCount()//返回子控件數(shù)目。
parent()//返回該控件的父控件肺然。如果該控件沒有父控件蔫缸,返回null。
bounds()//返回控件在屏幕上的范圍际起,其值是一個Rect對象拾碌。
boundsInParent()//返回控件在父控件中的范圍吐葱,其值是一個Rect對象。
drawingOrder()//返回控件在父控件中的繪制次序校翔。
id()//獲取控件的id弟跑,如果一個控件沒有id,則返回null防症。
text()//獲取控件的文本孟辑,如果控件沒有文本,返回""蔫敲。
findByText(str)//根據(jù)文本text在子控件中遞歸地尋找并返回文本或描述(desc)包含這段文本str的控件饲嗽,返回它們組成的集合。
findOne(selector)//根據(jù)選擇器selector在該控件的子控件奈嘿、孫控件…中搜索符合該選擇器條件的控件貌虾,并返回找到的第一個控件;如果沒有找到符合條件的控件則返回null裙犹。
find(selector)//根據(jù)選擇器selector在該控件的子控件尽狠、孫控件…中搜索符合該選擇器條件的控件,并返回它們組合的集合伯诬。
UiCollection//控件集合, 通過選擇器的find(), untilFind()方法返回的對象晚唇。
UiCollection.size()//返回集合中的控件數(shù)。歷史遺留函數(shù)盗似,相當(dāng)于屬性length。
UiCollection.get(i)//返回集合中第i+1個控件(UiObject)平项。歷史遺留函數(shù)赫舒,建議直接使用數(shù)組下標(biāo)的方式訪問元素。
UiCollection.each(func)//遍歷集合闽瓢。歷史遺留函數(shù)接癌,相當(dāng)于forEach。參考forEach扣讼。
empty()//返回控件集合是否為空缺猛。
nonEmpty()//返回控件集合是否非空。
UiCollection.find(selector)//根據(jù)selector所確定的條件在該控件集合的控件椭符、子控件荔燎、孫控件…中找到所有符合條件的控件并返回找到的控件集合。
UiCollection.findOne(selector)//根據(jù)選擇器selector在該控件集合的控件的子控件销钝、孫控件…中搜索符合該選擇器條件的控件有咨,并返回找到的第一個控件;
如果沒有找到符合條件的控件則返回null蒸健。
八.模擬按鍵
back()返回
home()Home鍵
recents()顯示最近任務(wù)座享。
powerDialog()電源鍵菜單
notifications()拉出通知欄婉商。
quickSettings()顯示快速設(shè)置(下拉通知欄到底)。
splitScreen()分屏渣叛。
示例:
①.一般排序
id("recent_chat_list").className("AbsListView").findOne().scrollForward();
②.在屏幕上半部分尋找文本控件TextView
var w = className("TextView").boundsInside(0, 0, device.width, device.height / 2).findOne();
log(w.text());
③.findOne設(shè)置延時尋找控件
//啟動Auto.js
launchApp("Auto.js");
//在6秒內(nèi)找出日志圖標(biāo)的控件
var object = id("action_log").findOne(6000);
//如果找到控件則點擊
if(object != null){
object.click();
}else{
//否則提示沒有找到
toast("沒有找到日志圖標(biāo)");
}
④.findOnce
let object = text("抖音號").findOnce()
log(object)
if (object != null) {
log("已找到")
} else {
log("Error:未找到")
}
⑤.findOnce()
object = text("在線").findOnce();
if (object != null) {
log(object.parent().parent().click()) //點擊元素
}else {
//錯誤處理
};
⑥.setText
//刷屏-------------------
while(true){
className("EditText").findOne().setText("刷屏...");
text("發(fā)送").findOne().clicK();
sleep(500);
}
或者
while(true){
className("EditText").setText("刷屏...");
text("發(fā)送").clicK();
sleep(500);
}
⑦.App
//啟動APP------
if (currentPackage() != "com.chaoxing.mobile") {//是否不在APP界面toast("即將打開超星丈秩!"); //直接打開學(xué)習(xí)通app.launchApp("學(xué)習(xí)通");//不在則打開} else {//否則就是在頁面toast("已經(jīng)在學(xué)習(xí)通中,即將開始進行下一步操作淳衙!");//不執(zhí)行操作};
//強制停止應(yīng)用------
"auto";var appName = rawInput("請輸入應(yīng)用名稱");openAppSetting(getPackageName(appName));while(!click("強制停止"));
⑧.發(fā)送意圖
//發(fā)送意圖-文本消息分享------
var content = rawInput('請輸入要分享的文本');
app.startActivity({
action: "android.intent.action.SEND",
type: "text/*",
extras: {
"android.intent.extra.TEXT": content
},
packageName: "com.tencent.mobileqq",
className: "com.tencent.mobileqq.activity.JumpActivity"
});
⑨.事件監(jiān)聽
events.onKeyDown(keyName, listener); // keyName:要監(jiān)聽的按鍵名稱蘑秽,listener:按鍵監(jiān)聽器
- volume_up 音量上鍵
- volume_down 音量下鍵
- home 主屏幕鍵
- back 返回鍵
- menu 菜單鍵
舉個例子:
//啟用按鍵監(jiān)聽
events.observeKey();
//監(jiān)聽"主屏幕鍵按下
events.onKeyDown("home", function(event){
toast("主屏幕鍵被按下了");
});
//監(jiān)聽返回鍵按下
events.onKeyDown("back", function(event){
toast("返回鍵被按下了");
exit();
});
events.onKeyUp(keyName, listener); // keyName:要監(jiān)聽的按鍵名稱,listener:按鍵監(jiān)聽器
舉個例子:
//啟用按鍵監(jiān)聽
events.observeKey();
//監(jiān)聽音量下鍵彈起
events.onKeyDown("volume_down", function(event){
toast("音量上鍵彈起");
});
//監(jiān)聽Home鍵彈起
events.onKeyDown("home", function(event){
toast("Home鍵彈起");
exit();
});
⑩.懸浮窗
floaty.window(layout); // 指定懸浮窗的布局滤祖,創(chuàng)建并顯示一個懸浮窗
舉個例子:
var w = floaty.window(
<frame gravity="center">
<text id="text">懸浮文字</text>
</frame>
);
setInterval(() => { }, 1000);
floaty.rawWindow(layout); // 指定懸浮窗的布局筷狼,創(chuàng)建并顯示一個原始懸浮窗,您可以根據(jù)自己需要編寫任何布局
舉個例子:
var w = floaty.rawWindow(
<frame gravity="center">
<text id="text">懸浮文字</text>
</frame>
);
w.setPosition(500, 500); 設(shè)置懸浮窗位置匠童。
setTimeout(()=>{
w.close();
}, 2000);
①①:文件系統(tǒng)
files.createWithDirs(path); // 創(chuàng)建一個文件或文件夾并返回是否創(chuàng)建成功埂材。如果文件所在文件夾不存在,則先創(chuàng)建他所在的一系列文件夾
舉個例子:
files.createWithDirs("/sdcard/新文件夾/新文件夾/新文件夾/1.txt");
files.exists(path); // 返回在路徑path處的文件是否存在汤求。
舉個例子:
log(files.exists("/sdcard/新文件夾/新文件夾/新文件夾/1.txt"));
files.read(path[, encoding = "utf-8"]); // 讀取文本文件path的所有內(nèi)容并返回
舉個例子:
log(files.read("/sdcard/1.txt", encoding = "utf-8"));
files.write(path, text); // 把text寫入到文件path中俏险。 新的text會覆蓋以前的
舉個例子:
var text = "這是一個文件內(nèi)容";
// 判斷是否有此文件,如果沒就創(chuàng)建一個
files.createWithDirs("/sdcard/1.txt");
//寫入文件
files.write("/sdcard/1.txt", text);
//用其他應(yīng)用查看文件
app.viewFile("/sdcard/1.txt");
files.append(path, text); // 把text追加到文件path的末尾
舉個例子:
var text = "追加的文件內(nèi)容";
files.append("/sdcard/1.txt", text);
files.append("/sdcard/1.txt", text);
//用其他應(yīng)用查看文件
app.viewFile("/sdcard/1.txt");
files.copy(fromPath, toPath); // 復(fù)制文件扬绪,返回是否復(fù)制成功
舉個例子:
files.copy("/sdcard/1.txt", "/sdcard/Download/1.txt");
files.move(fromPath, toPath); // 移動文件竖独,返回是否移動成功也可改名
舉個例子:
files.move("/sdcard/1.txt", "/sdcard/Download/1.txt");
files.getName(path); // 返回文件的文件名
舉個例子:
log(files.getName("/sdcard/1.txt"));
files.remove(path); // 刪除文件或空文件夾,返回是否刪除成功
舉個例子:
log(files.remove("/sdcard/1.txt"));
files.removeDir(path); // 刪除文件夾挤牛,如果文件夾不為空莹痢,則刪除該文件夾的所有內(nèi)容再刪除該文件夾
舉個例子:
log(files.removeDir("/sdcard/1.txt"));
files.getSdcardPath(); // 返回SD卡路徑
舉個例子:
log(files.getSdcardPath()); // 返回結(jié)果:/storage/emulated/0
close(); // 關(guān)閉該文件
①②.全局函數(shù)
sleep(n); // n:暫停運行n毫秒的時間。1秒等于1000毫秒墓赴。
舉個例子:
sleep(1000); // 暫停運行1秒
currentPackage(); // 返回正在運行的應(yīng)用的包名
舉個例子:
log(currentPackage()); // 返回:org.autojs.autojspro
currentActivity(); // 返回正在運行的Activity的名稱
舉個例子:
log(currentActivity()); // 返回:org.autojs.autojs.ui.main.MainActivity
toast(message); // 以氣泡顯示信息message幾秒
舉個例子:
toast("你好autoJS"); // 屏幕出現(xiàn) 你好autoJS 字樣竞膳,幾秒后消失
toastLog(message); // 顯示信息message并在控制臺中輸出
舉個例子:
toastLog("你好autoJS"); // 屏幕和控制臺同時出現(xiàn) 你好autoJS 字樣
waitForActivity(activity]); // activity:等待指定的Activity出現(xiàn),period:為檢查Activity的間隔诫硕。
舉個例子:
log(waitForActivity("org.autojs.autojs.ui.main.MainActivity"));
waitForPackage(package); // 等待指定的應(yīng)用出現(xiàn)
舉個例子:
waitForPackage("org.autojs.autojspro");
exit(); // 立即停止腳本運行坦辟。
random(min, max); // 返回一個在[min...max]之間的隨機數(shù)
舉個例子:
log(random(0, 2)); // 返回可能時0,1章办,2
random(); // 返回一個[0锉走,1)的隨機浮點數(shù)
①③.Http
http.get(url,options,callback); // 對地址url進行一次GET請求,option:加入請求頭藕届,callback:回調(diào)函數(shù)
舉個例子:
console.show();
var r = http.get("www.baidu.com");
log("code = " + r.statusCode);
log("html = " + r.body.string());
option:
console.show();
var r = http.get("www.baidu.com", {
headers: {
'Accept-Language': 'zh-cn,zh;q=0.5',
'User-Agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11'
}
});
log("code = " + r.statusCode);
log("html = " + r.body.string());
回調(diào)函數(shù):
console.show();
http.get("www.baidu.com", {}, function(res, err){
if(err){
console.error(err);
return;
}
log("code = " + res.statusCode);
log("html = " + res.body.string());
});
http.post(url, data, options, callback); // 對地址url進行一次GET請求挪蹭,data:POST數(shù)據(jù),option:加入請求頭翰舌,callback:回調(diào)函數(shù)
舉個例子:
var url = "https://login.taobao.com/member/login.jhtml";
var username = "你的用戶名";
var password = "你的密碼";
var res = http.post(url, {
"TPL_username": username,
"TPL_password": password
});
var html = res.body.string();
if(html.contains("頁面跳轉(zhuǎn)中")){
toast("登錄成功");
}else{
toast("登錄失敗");
}
http.postJson(url, data, options, callback); // 以JSON格式向目標(biāo)Url發(fā)起POST請求嚣潜。
舉個例子:
var url = "http://www.tuling123.com/openapi/api";
r = http.postJson(url, {
key: "65458a5df537443b89b31f1c03202a80",
info: "你好啊",
userid: "1",
});
toastLog(r.body.string());
http.request(url, options, callback); // 對目標(biāo)地址url發(fā)起一次HTTP請求
____待補充
Response // HTTP請求的響應(yīng)。
Response.statusCode // 當(dāng)前響應(yīng)的HTTP狀態(tài)碼椅贱。例如200(OK), 404(Not Found)等懂算。
Response.statusMessage // 當(dāng)前響應(yīng)的HTTP狀態(tài)信息只冻。例如"OK", "Bad Request", "Forbidden"。
舉個例子:
var res = http.get("www.baidu.com");
if(res.statusCode >= 200 && res.statusCode < 300){
toast("頁面獲取成功!");
}else if(res.statusCode == 404){
toast("頁面沒找到哦...");
}else{
toast("錯誤: " + res.statusCode + " " + res.statusMessage);
}
Response.headers // 當(dāng)前響應(yīng)的HTTP頭部信息计技。
舉個例子:
console.show();
var res = http.get("www.qq.com");
console.log("HTTP Headers:")
for(var headerName in res.headers){
console.log("%s: %s", headerName, res.headers[headerName]);
}
Response.body // 當(dāng)前響應(yīng)的內(nèi)容
Response.request // 當(dāng)前響應(yīng)所對應(yīng)的請求
Response.url // 當(dāng)前響應(yīng)所對應(yīng)的請求URL
Response.method // 當(dāng)前響應(yīng)所對應(yīng)的HTTP請求的方法喜德。例如"GET", "POST", "PUT"等。
①④.圖片與顏色
找圖找色
images.requestScreenCapture([landscape]) // 申請截圖權(quán)限(只需執(zhí)行一次)
舉個例子:
//請求截圖
if(!requestScreenCapture()){
toast("請求截圖失敗");
exit();
}
//連續(xù)截圖10張圖片(間隔1秒)并保存到存儲卡目錄
for(var i = 0; i < 10; i++){
captureScreen("/sdcard/screen_capture_" + i + ".png");
sleep(1000);
}
images.captureScreen() // 截圖當(dāng)前屏幕返回一個Image對象
舉個例子:
// 請求橫屏截圖
requestScreenCapture(true);
// 截圖
var img = captureScreen();
// 獲取在點(100, 100)的顏色值
var color = images.pixel(img, 100, 100);
// 顯示該顏色值
toast(colors.toString(color));
images.captureScreen(path); // path:截圖保存路徑
舉個例子:
// 請求截圖
if(!requestScreenCapture()){
toast("請求截圖失敗");
exit();
}
// 截圖保存在指定path
images.captureScreen("/sdcard/DCIM/新建文件夾/1.png");
// 在圖片img指定區(qū)域中找到顏色和color完全相等的某個點
images.findColorEquals(img, color[, x, y, width, height]);
舉個例子:
requestScreenCapture(); //請求截圖
launchApp("QQ"); // 啟動QQ
sleep(1200); // 等待1.2秒
var p = findColorEquals(captureScreen(), "#f64d30");
if(p){
toast("有未讀消息");
}else{
toast("沒有未讀消息");
}
舉個例子:
// 請求截圖
var 獲取截圖權(quán)限 = requestScreenCapture();
// console.log("獲取截圖權(quán)限===>", 獲取截圖權(quán)限);
// 截圖屏幕圖片 并放指定位置
images.captureScreen("/sdcard/屏幕大圖" + ".png");
// 扣小圖片
var 讀取圖片 = images.read("/sdcard/屏幕大圖.png"); // 讀取大圖
var 小心心 = images.clip(讀取圖片, 923, 828, 109, 115); // 根據(jù)大圖進行xyz裁剪
images.save(小心心, "/sdcard/小心心.png"); // 將圖片存儲指定位置
var 小圖片 = images.read("/sdcard/小心心.png"); // 讀取小圖片
// var 是否找到 = images.findImage(讀取圖片, 小圖片); // 根據(jù)大圖找小圖
var 是否找到 = images.findImageInRegion(讀取圖片, 小圖片, 921, 830, 116, 113); // 根據(jù)區(qū)域找圖
console.log("是否找到===>", 是否找到);
①⑤.基于控件的操作
auto.waitFor(); // 檢查無障礙服務(wù)是否已經(jīng)啟用垮媒,如果沒有啟用則跳轉(zhuǎn)到無障礙服務(wù)啟用界面舍悯,并等待無障礙服務(wù)啟動;
click("小紅書"); // 點擊文本
click("啦啦啦", 0); // 點擊文本 點擊第一個文本
longClick("小紅書"); // 長按文本
longClick("啦啦啦", 0); // 長按文本 點擊第一個文本
scrollUp(0); // 找到上滑或左滑
setText("測試"); // 輸入文本 會清除
input("測試一下"); // 輸入文本 會追加后面
var sendButton = text("小紅書").findOne().click(); // 定義這個元件 根據(jù)文本
sendButton.click(); // 元件點擊
desc("搜索").findOne().click(); // 根據(jù)desc進行點擊
id("action_search").findOne().click(); // 根據(jù)id進行點擊
className("ImageView").depth(10).findOne().click(); // 組合來完成定位
click(); // 控件clickable為true睡雇,才能使用
longClick(); // 控件longClickable屬性為true
setText(); // 設(shè)置文本萌衬,用于編輯控件設(shè)置文本 id("search_edit_text").findOne().setText("測試");
exits(); // 判斷控件是否存在
waitFor(); // 等待控件出現(xiàn)
scrollForward(); // id("music_list").findOne().scrollForward(); 上滑 如果控件scrollForward屬性為true
scrollBackward(); // id("music_list").findOne().scrollBackward(); 下滑 scrollBackward屬性為true
舉個例子:
className("android.widget.EditText").findOne().setText("狐貍");
var 搜索 = text("搜索").findOne().click();
搜索.click();
// 如果控件名以“android.widget.”開頭 可以直接省略,例如文本控件可以直接使用
className("TextView");
常見控件的類名如下:
android.widget.TextView 文本控件
android.widget.ImageView 圖片控件
android.widget.Button 按鈕控件
android.widget.EditText 輸入框控件
android.widget.AbsListView 列表控件
android.widget.LinearLayout 線性布局
android.widget.FrameLayout 幀布局
android.widget.RelativeLayout 相對布局
android.widget.RelativeLayout 相對布局
android.support.v7.widget.RecyclerView 通常也是列表控件
UiSelector.findOne(timeout); // 對屏幕上的控件進行搜索,直到屏幕上出現(xiàn)滿足條件的一個控件為止
舉個例子:
//啟動Auto.js
launchApp("Auto.js");
//在6秒內(nèi)找出日志圖標(biāo)的控件
var w = id("action_log").findOne(6000);
//如果找到控件則點擊
if(w != null){
w.click();
}else{
//否則提示沒有找到
toast("沒有找到日志圖標(biāo)");
}
UiSelector.findOnce(i); // 對屏幕上的控件進行搜索它抱,如果找到符合條件的控件則返回該控件 i:索引
UiSelector.find(); // 找出所有滿足條件的控件并返回一個控件集合
舉個例子:
var c = className("AbsListView").find();
if(c.empty()){ // empty() 返回控件集合是否為空
toast("找到啦");
}else{
toast("沒找到╭(╯^╰)╮");
}
UiSelector.untilFind(); // 對屏幕上的控件進行搜索秕豫,直到找到至少一個滿足條件的控件為止 沒找到會一直卡在那兒
UiSelector.exists(); // 判斷屏幕上是否存在控件
舉個例子:
if(text("某個文本").exists()){
//要支持的動作
toast("這是某個文本");
}
UiSelector.waitFor(); // 等待屏幕上出現(xiàn)符合條件的控件
舉個例子:
textContains("退出").waitFor(); // textContains(str) 為當(dāng)前選擇器附加控件"text需要包含字符串str"的篩選條件
click("退出");
UiSelector.filter(f) // 為當(dāng)前選擇器附加自定義的過濾條件。
舉個例子:
// 要找出屏幕上所有文本長度為10的文本控件的代碼為:
var uc = className("TextView").filter(function(w){
return w.text().length == 10;
});
UiObject.click(); // 點擊該控件 需要控件的clickable為true才可使用
UiObject.longClick(); // 長按該控件 需要控件的longClickable為true才可使用
UiObject.setText(text); // 設(shè)置輸入框控件的文本內(nèi)容 需要控件的editable為true才可使用
UiObject.copy(); // 對輸入框文本的選中內(nèi)容進行復(fù)制 該函數(shù)只能用于輸入框控件观蓄,并且當(dāng)前輸入框控件有選中的文本
舉個例子:
var et = className("EditText").findOne();
//選中前兩個字
et.setSelection(0, 2); // setSelection() 設(shè)置輸入框選中的內(nèi)容
//對選中內(nèi)容進行復(fù)制
if(et.copy()){
toast("復(fù)制成功");
}else{
toast("復(fù)制失敗");
}