最全Airtest接口功能介紹和示例總結,新手同學千萬不能錯過呀!(一)


前言

不知道同學們會不會有這樣的煩惱:鼓起動力寫腳本的時候,卻發現官方文檔的內容太零散,總是找不到自己想要的功能介紹;小白剛入門,還不會看源碼,常常面對一大堆陌生的接口根本無處下手。

作為萬能的官方小助手,肯定要想辦法把各種常用的接口給新手同學整得明明白白!接下來我們會連載幾期的推文,盡量把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 腳本時,會自動插入這個腳本初始化接口:

image

圖中的 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)

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.auto_setup

2).py腳本:cli_setup()

在IDE新建 .py 腳本時,會自動在腳本中插入如下的初始化接口:

image

上面這段代碼的意思是說,當使用 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")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.connect_device

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")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.init_device

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")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.set_current

PS:關於設備連接的詳細教程,推薦大家閱讀 用1行代碼搞定自動化測試的設備連接問題 ;利用設備切換實現多機協作的案例,推薦大家閱讀 “多機協作”--微信互加好友案例分析 。

3.操作應用相關的接口

1)啟動應用:start_app()

在設備上啟動目標應用,需傳入應用的包名,支持Android和iOS平台,示例:

start_app("com.netease.cloudmusic")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.start_app

2)終止應用運行:stop_app()

在設備上終止目標應用的運行,需傳入應用的包名,支持Android和iOS平台,示例:

stop_app("com.netease.cloudmusic")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.stop_app

3)清除應用數據:clear_app()

清理設備上的目標應用數據,需傳入應用的包名,僅支持Android平台 ,示例:

clear_app("com.netease.cloudmusic")
4)安裝應用:install()

安裝應用到設備上,需傳入完整的apk的安裝路徑,僅支持Android平台,示例:

install(r"D:\demo\tutorial-blackjack-release-signed.apk")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.install

5)卸載應用:uninstall()

卸載設備上的應用,需傳入被卸載應用的包名,僅支持Android平台,示例:

uninstall("com.netease.cloudmusic")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.uninstall

PS:安裝卸載應用的實例教程,推薦閱讀推文 如何解決“自動裝包”過程中oppo、vivo等手機需要輸入密碼的問題

4.常用的模擬操作

1)截圖:snapshot()

對目標設備進行一次截圖,並且保存到文件中,可以傳入截圖文件名、截圖的簡短描述、截圖壓縮精度和截圖最大尺寸,示例如下:

snapshot(filename="123.jpg",msg="首頁截圖",quality=90,max_size=800)

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.snapshot

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)

image

接口的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)

image

接口的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)

image

接口的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)))

image

接口的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))

image

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.find_all

9)按鍵事件:keyevent()

在設備上執行keyevent按鍵事件,不同平台下支持的keyevent差別比較大,請同學們按照具體平台的支持情況來使用,常用的keyevent如下:

# Android平台下
keyevent("HOME")
keyevent("BACK")
keyevent("KEYCODE_DEL")

# Windows平台下
keyevent("{DEL}")

# iOS平台下只支持HOME
keyevent("HOME")

接口的api文檔鏈接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html#airtest.core.api.keyevent

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM