前言
不知道同學們會不會有這樣的煩惱:鼓起動力寫腳本的時候,卻發現官方文檔的內容太零散,總是找不到自己想要的功能介紹;小白剛入門,還不會看源碼,常常面對一大堆陌生的接口根本無處下手。
作為萬能的官方小助手,肯定要想辦法把各種常用的接口給新手同學整得明明白白!接下來我們會連載幾期的推文,盡量把Airtest和poco的各種API和設置給新手同學講清楚, 另外每一個API和設置,我們都會附上示例方便同學們模仿學習 。(Airtest老司機可以自動跳過啦,或者先收藏起來以后可以查漏補缺用)
今天我們就先給同學們安排上Airtest 絕大部分API的功能和用法示例 ,包含以下4個方面:
- 1.腳本初始化接口
- 2.設備連接與使用相關的接口
- 3.操作應用相關的接口
- 4.常用的模擬操作
1.腳本初始化接口
1).air腳本:auto_setup()
自動配置運行環境的接口,可以配置當前腳本所在路徑、使用的設備、log內容的保存路徑、項目根目錄和截圖壓縮精度:
auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None)
新建 .air 腳本時,會自動插入這個腳本初始化接口:
圖中的 auto_setup 接口表示,當前腳本所在路徑為變量 __file__ ,並且嘗試連接第一台安卓設備。(不填入設備參數的情況下,都是嘗試連接第一台安卓設備)。
接口的其它示例:
auto_setup(__file__, devices=["android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH"], logdir=True, project_root=r"D\test", compress=90)
2).py腳本:cli_setup()
在IDE新建 .py 腳本時,會自動在腳本中插入如下的初始化接口:
上面這段代碼的意思是說,當使用 python xx.py 來運行本文件,且不帶任何命令行參數時,則 if not cli_setup() 的判斷成立,自動使用 auto_setup 這個接口來對運行環境進行初始化。這樣只需要在寫 .py 腳本時,在 auto_setup() 里填寫好指定的參數就能直接用 python xx.py 指令來運行腳本了。
同時,傳統的 airtest run xx.air –-devices Android:/// 命令行運行方式也不受影響,只要腳本檢測到傳入了命令行參數(即代碼中的 if not cli_setup() 判斷不成立,不走到里面的 auto_setup() 初始化去),就依然優先使用命令行參數來初始化腳本運行環境的相關配置項。
2.設備連接與使用相關的接口
1)連接設備:connect_device(URI)
連接設備的接口,需要傳入用於初始化設備的URI字符串,示例:
# 連接安卓設備 connect_device("Android://127.0.0.1:5037/SJE5T17B17") # 連接iOS設備 connect_device("iOS:///127.0.0.1:8100") # 連接Windows窗口 connect_device("Windows:///123456") # 連接模擬器 connect_device("Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP&&ori_method=ADBORI")
2)連接設備:init_device()
初始化設備的接口,需要傳入設備平台、設備的uuid和可選參數等,其中uuid為,Android的序列號,Windows的窗口句柄,或iOS的uuid:
init_device(platform='Android', uuid=None, **kwargs)
接口使用示例:
# 連接安卓設備 init_device(platform="Android",uuid="SJE5T17B17",cap_method="JAVACAP") # 連接Windows窗口 init_device(platform="Windows",uuid="123456")
3)獲取當前設備:device()
返回當前正在使用中的設備實例,用法示例如下:
dev = device()
dev.swipe_along([[959, 418],[1157, 564],[1044, 824],[751, 638],[945, 415]])
4)設置當前設備:set_current()
設置當前的使用設備,可以用於在多設備之間切換使用,示例如下:
# 第一種:傳入數字0、1、2等,切換當前操作的手機到Airtest連接的第1台、第2台手機 set_current(0) set_current(1) # 第二種:切換當前操作的手機到序列號為serialno1、serialno2的手機 set_current("serialno1") set_current("serialno2")
PS:關於設備連接的詳細教程,推薦大家閱讀 用1行代碼搞定自動化測試的設備連接問題 ;利用設備切換實現多機協作的案例,推薦大家閱讀 “多機協作”--微信互加好友案例分析 。
3.操作應用相關的接口
1)啟動應用:start_app()
在設備上啟動目標應用,需傳入應用的包名,支持Android和iOS平台,示例:
start_app("com.netease.cloudmusic")
2)終止應用運行:stop_app()
在設備上終止目標應用的運行,需傳入應用的包名,支持Android和iOS平台,示例:
stop_app("com.netease.cloudmusic")
3)清除應用數據:clear_app()
清理設備上的目標應用數據,需傳入應用的包名,僅支持Android平台 ,示例:
clear_app("com.netease.cloudmusic")
4)安裝應用:install()
安裝應用到設備上,需傳入完整的apk的安裝路徑,僅支持Android平台,示例:
install(r"D:\demo\tutorial-blackjack-release-signed.apk")
5)卸載應用:uninstall()
卸載設備上的應用,需傳入被卸載應用的包名,僅支持Android平台,示例:
uninstall("com.netease.cloudmusic")
PS:安裝卸載應用的實例教程,推薦閱讀推文 如何解決“自動裝包”過程中oppo、vivo等手機需要輸入密碼的問題
4.常用的模擬操作
1)截圖:snapshot()
對目標設備進行一次截圖,並且保存到文件中,可以傳入截圖文件名、截圖的簡短描述、截圖壓縮精度和截圖最大尺寸,示例如下:
snapshot(filename="123.jpg",msg="首頁截圖",quality=90,max_size=800)
2)點擊:touch()
在設備上進行點擊操作,可以傳入點擊位置、點擊次數等參數,不同平台下的可選參數稍有不同,示例如下:
# 傳入絕對坐標作為點擊位置 touch([100,100]) # 傳入Template圖片實例,點擊截圖中心位置 touch(Template(r"tpl1606730579419.png", target_pos=5, record_pos=(-0.119, -0.042), resolution=(1080, 1920))) # 點擊2次 touch([100,100],times=2) # Android和Windows平台下,可以設置點擊時長 touch([100,100],duration=2)
接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.touch
PS:關於 touch 接口的教程詳情,推薦閱讀推文 學會這些,你想怎么touch就怎么touch
3)滑動:swipe()
在設備上進行滑動操作,有2種傳參方式,一種是傳入滑動的起點和終點,一種是傳入滑動的起點和滑動方向vector,示例如下:
# 傳入絕對坐標作為滑動的起點和終點 swipe([378, 1460],[408, 892]) # 傳入圖像作為起點,沿着某個方向滑動 swipe(Template(r"tpl1606814865574.png", record_pos=(-0.322, 0.412), resolution=(1080, 1920)), vector=[-0.0316, -0.3311]) # 常見的還可以設置滑動的持續時長 swipe([378, 1460],[408, 892],duration=1)
接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.swipe
PS:關於 swipe 接口的教程詳情,推薦閱讀推文 你的swipe接口用不好,是因為...
4)輸入:text()
在設備上輸入文本,文本框需要處於激活狀態(即先點擊文本框,再使用text()接口進行輸入)。示例如下:
touch(文本框的Template實例) text("輸入的文本") # 默認情況下,text是帶回車的,不需要可以傳入False text("123",enter=False) # 安卓平台下,還支持輸入后點擊軟鍵盤的搜索按鈕 text("123",enter=False,search=True)
接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.text
PS:關於 text 接口的教程詳情,推薦閱讀推文 手把手教你學會文本輸入的text()接口
5)等待時間:sleep()
設置等待時間,默認為1秒,常用於連續的操作之間,防止設備畫面未來得及切換就已經開始執行下一步操作,示例:
touch([100,100]) sleep(3.0) touch([200,200])
6)等待截圖出現:wait()
等待當前畫面上出現某個匹配的 Template 圖片,常用於等待某一張圖片出來之后,再進行下一步操作,可以傳入等待的超時時長、查找的時間間隔和首次嘗試查找失敗的回調函數,示例:
def test(): print("未等待到目標") wait(Template(r"tpl1606821804906.png", record_pos=(-0.036, -0.189), resolution=(1080, 1920)),timeout=120,interval=3,intervalfunc=test)
接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.wait
7)檢查存在:exists()
檢查當前設備畫面上是否存在目標截圖,常和判斷語句一起使用,示例:
if exists(Template(r"tpl1606822430589.png", record_pos=(-0.006, 0.069), resolution=(1080, 1920))) touch(Template(r"tpl1606822430589.png", record_pos=(-0.006, 0.073), resolution=(1080, 1920)))
接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.exists
8)查找目標:find_all()
在設備屏幕上查找所有出現的目標並返回其坐標列表,示例:
a= find_all(Template(r"tpl1606822767366.png", record_pos=(-0.034, -0.184), resolution=(1080, 1920))) print("************************") print(str(a))
9)按鍵事件:keyevent()
在設備上執行keyevent按鍵事件,不同平台下支持的keyevent差別比較大,請同學們按照具體平台的支持情況來使用,常用的keyevent如下:
# Android平台下 keyevent("HOME") keyevent("BACK") keyevent("KEYCODE_DEL") # Windows平台下 keyevent("{DEL}") # iOS平台下只支持HOME keyevent("HOME")
PS:各平台下keyevent的使用規則和支持詳情請參考推文 超詳細!各大平台的keyevent()解析
10)喚醒屏幕:wake()
喚醒並解鎖目標設備,僅支持安卓平台,並且在部分品牌手機上可能無法生效,示例:
wake()
11)返回HOME:home()
返回HOME界面,支持Android和iOS平台,示例:
home()
AirtestProject官方答疑Q群:654700783
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b
