AIRTest入門

AirTest

安裝 & 配置

AirTest 的安裝

官網地址:https://airtest.netease.com/home/

安裝並解壓至本地目錄,打開即可執行。

如果使用了本地 python 環境,請同步運行 pip install -U airtest 更新到最新版本。

ADB 的安裝

官網地址:https://developer.android.google.cn/studio/command-line/adb

安裝並解壓至本地目錄,在環境變量 PATH 中配置目錄,即可執行。

手機配置

1.    安卓手機打開“設置”

2.    進入“關於手機”,並連續點擊 5 次“版本號”,打開“開發者模式” (如果已經開啓,則忽略此步驟)

3.    進入“開發者選項”,打開 “OEM解鎖” 和 “USB調試”

4.    電腦打開 cmd 並輸入 adb devices,顯示連接的手機 (如果是第一次打開,手機會彈授權,確認即可)

5.    如果顯示沒有設備,則可以嘗試輸入 adb kill-server 關閉服務後重試

基礎使用 AirTest

連接手機

 

 

 

紅色框

物理連接設備使用紅色框子的兩個功能。

1.    刷新 ADB 的連接設備

2.    重啓 ADB,在刷新無效的情況下,可以嘗試重啓 ADB 進行識別

藍色框

模擬器及網絡設備可以通過網絡協議來連接設備。

當出現設備,選擇設備狀態爲 "device" 的設備並選擇右側的箭頭進行模式選擇。
然後按 connect 按鈕進行連接。

 

 

 

元素查看

1.    左側的工具欄選擇 Poco 輔助窗,並選擇 Android 模式。

2.    使用 Inspector 按鈕,在右側的窗口滑動,查看想要查看的元素。

3.    在中間的 Log 查看窗查看詳細的元素信息。

 

 

 

在 Log 查看窗中可以看到的信息包括:

名稱

解釋

type

元素的類型

name

元素的唯一標識,
不同的設備可能有不同的識別,需要嘗試,
後面的數字是隨機的,使用時避開

desc

文案,有時也可用於搜索元素使用

pos

元素的位置,是一個百分比,以左上角爲起點

package

元素所屬包的名稱,打開或關閉應用的時候需要,可以如此定位

新建項目

 

 

 

通過 Python 腳本新建任務。

基礎命令

鏈接手機指令

serialNo 是手機的序列號,通過參數傳入,這樣可以指定執行任務的手機,提高效率。
這三行命令必須有。

auto_setup(__file__, devices=[
    "Android:///%s" % serialNo,
])

實例化操作框架

這一行代碼必須有。

poco = AndroidUiautomationPoco()

打開和關閉 App

start_app("com.xingin.xhs")
stop_app("com.xingin.xhs")

線程掛起/睡眠

單位是秒

time.sleep(20)

滑動指令

注意這裏的像素位置,如果手機的分辨率不足,會出問題。
如果可以在外層設置一個 長:寬 的值,這裏採用百分比更安全,適配各個手機的能力更高。

swipe((700, 1479), (700, 450))

按鍵指令

按鍵的鍵值可以參考網站 https://blog.csdn.net/qq_42293487/article/details/102929123

keyevent('BACK')

查找元素

# 通過文案查找
poco(text="進入兒童/青少年模式").exists()
 
# 通過元素文字描述查找
poco(desc="搜索").click()
 
# 通過元素類型查找
poco(type="android.widget.EditText").set_text(keyword)
 
# ↓↓↓↓ 以下三個方法,當超時時,會拋出異常,可以使用 try except 來捕獲 ↓↓↓↓ #
 
# 最長等待 20s 的時間,用於等待一個元素出現
poco(desc="搜索").wait_for_appearance(20)
 
ele1 = poco(text="text_content_1")
ele2 = poco(text="text_content_2")
ele3 = poco(text="text_content_3")
 
# 最長等待 20s 的時間,用於等待多個元素都出現
poco.wait_for_all([ele1, ele2, ele3])
 
# 最長等待 20s 的時間,用於等待某一個元素出現
poco.wait_for_any([ele1, ele2, ele3])

點擊指令

poco(type="android.widget.EditText").click()

文本輸入

poco(type="android.widget.EditText").set_text(keyword)

數據抓取

用戶證書偷渡到系統證書

部分應用只信任系統級證書,所以需要將 Fiddler 中的用戶級證書包裝成系統級證書。

注意:需要一臺 Root 過的手機纔可以偷渡證書。

證書準備

1.    導出 Fiddler 中的證書,默認名稱:FiddlerRoot.cer

2.    使用 OpenSSL 將 cer 的證書轉換成 crt 證書:

3.   openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.crt

4.    根據 crt 文件獲取證書的 Hash 值,輸出內容的首行即 269953fb(可能不一樣,獲取到值後,後續自己替換)

5.   openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.crt

6.    將 FiddlerRoot.crt 重命名爲 269953fb.0

寫入手機

adb devices
adb root
↓↓↓ 解決 Read-Only file system 的問題 ↓↓↓
adb remount
 
adb push 269953fb.0 /sdcard/
 
adb shell
>$ su
↓↓↓ 解決 Read-Only file system 的問題 ↓↓↓
># mount -o rw,remount /system
># mv /sdcard/269953fb.0 /system/etc/security/cacerts/
># chmod -R 755 /system/etc/security/cacerts/
># chown -R root:root /system/etc/security/cacerts/
># reboot

檢驗

在手機設置 -> 安全 -> 信任的憑據 檢查是否已經存在即可。

Fiddler 的數據抓取

使用 Fiddler 可以抓取文件,在 Fiddler 中增加自定義規則,即可將數據保存在本地

Fiddler -> Rules -> Customize Rules -> OnBeforeResponse

在函數內增加以下命令:

// 抖音搜索
if (oSession.fullUrl.Contains("/aweme/v1/general/search/single/?")) {
    oSession.utilDecodeResponse();
 
    var fso;
    var file;
 
    fso  = new ActiveXObject("Scripting.FileSystemObject");
    file = fso.OpenTextFile("e:/douyin_search", 8, true, true);
 
    file.writeLine(oSession.GetResponseBodyAsString()); 
    file.close(); 
}

代碼的含義爲:

搜索完整的 URL 中包含 "/aweme/v1/general/search/single/?" 的請求,並將內容追加到文件 e:/douyin_search 中。

代碼演示

 

 

 

  • 紅框代碼
    註明了代碼所用的編碼及作者信息,UTF-8 的編碼註釋爲必須有的。
  • 藍框代碼
    爲必要框架和公共類的引入部分,如果後期有使用其他類,需要引入更多,框內爲基礎部分幾乎都要使用到的。
  • 黃框代碼
    日誌類,可以不寫,如果需要使用希望放在 airtest 類目下。
  • 灰框代碼
    一些重要的註釋,包括抖音需要使用的版本,該低版本下,可以抓包使用。
    還有 Fiddler 中需要用到的腳本,可以略加修改後,複用其他的功能。
  • 綠框代碼
    一些基礎的配置,提到文件外,方便內部使用和統一修改。

 

 

 

  • 紅框代碼
    統計數據收集到的日誌文件的行數,在 Fiddler 中收集到數據爲一行一條,所以統計行數即可知道抓取了大概多少數據。
  • 藍框代碼
    格式化數據,將收集到的 json 格式的數據清洗並返回給調用方固定格式,可供外層直接使用的數據。
  • 綠框代碼
    清空數據收集文件,常在初始化及掃尾工作中使用。
  • 灰框代碼
    寫入數據庫的工作。

 

 

 

  • 紅框代碼
    初始化工作,包括指定手機設備、初始化 Poco 框架、清理數據日誌文件、關閉舊的 APP、重新打開新的 APP、等待部分時間完成加載等工作。
  • 藍框代碼
    部分應用會有一些檢測,在這步處理掉。
  • 綠框代碼
    搜索功能的實現,點擊搜索按鈕 -> 鍵入關鍵詞 -> 按下確認按鈕 -> 等待部分時間。
  • 灰框代碼
    開始根據收集到的數據日誌行數來判斷是否滿足定額條件,滿足則退出,不滿足則繼續向下滑動獲取更多數據。

 

 

 

  • 紅框代碼
    循環處理數據,並寫入到數據庫中。
  • 藍框代碼
    清理日誌文件,並輸出 success 退出。
    輸出 success 很重要,調度程序就是根據 success 來判斷是否是執行完成或失敗
  • 灰框代碼
    獲取命令行參數並調用執行動作的任務。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章