Airtest核心API匯總


上期回顧:Airtest框架源碼目錄結構解析


以下基於airtest1.2.0(截止2021.7.12,最新版本)
https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html
修改自以上鏈接,並更新適配到airtest1.2.0版本,翻譯了部分英文說明

想熟練使用Airtest,以下API必須熟記

1.init_device(platform='Android', uuid=None, **kwargs)
初始化設備,並設置為當前設備。

參數:
platform – Android, IOS or Windows
uuid     – 目標設備的uuid,例如Android的序列號,Windows的窗口句柄,或iOS的uuid
kwargs   – 可選的平台相關的參數,例如Android下的 cap_method=JAVACAP參數

返回:
device對象

示例:

init_device(platform="Android",uuid="songzhenhua", cap_method="JAVACAP")
init_device(platform="Windows",uuid="123456")

2.connect_device(uri)
用URI字符串來初始化設備,並且設置為當前設備。

參數:
uri – 一個用於初始化設備的URI字符串,例如:
android://adbhost:adbport/serialno?param=value&param2=value2

返回:
device對象

示例:

# 本地安卓設備默認參數
connect_device("Android:///")  
# 本地安卓設備ID為:SJE5T17B17,且使用參數
connect_device("Android:///SJE5T17B17?cap_method=javacap&touch_method=adb")
# 遠程安卓設備 Android://adbhost:adbport/serialno
connect_device("Android://127.0.0.1:5037/10.254.60.1:5555")
# connect to the desktop
connect_device("Windows:///") 
# Connect to the window with handle 123456 
connect_device("Windows:///123456")  
# iOS device
connect_device("iOS:///127.0.0.1:8100")  

3.device()
返回當前正在使用中的設備。

返回:
當前設備實例

示例:

dev = device()
dev.touch((100, 100))

4.set_current(idx)
設置當前設備。

參數:
idx – uuid或已初始化的設備列表中的編號,從0開始

引發:
IndexError – 當查找不到設備時

返回:
None

支持平台:
Android, iOS, Windows

示例:

# 設置設備列表中的第1台設備為當前設備
set_current(0)
# 設置序列號為qasite的設備為當前設備
set_current("qasite")

5.auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None)
自動配置運行環境,如果當前沒有連接設備的話,就默認嘗試連接Android設備。

參數:
basedir – 設置當前腳本的所在路徑,也可以直接傳 __file__ 變量進來
devices – 一個內容為 connect_device uri 字符串的列表
logdir  – 用於報告的日志目錄,默認為None不輸出日志, 設置為True時日志目錄為/log
project_root – 用於設置PROJECT_ROOT變量,方便 using 接口的調用
compress – 屏幕截圖的壓縮比率,在[1, 99]范圍內的整數,默認是10

示例:

auto_setup(__file__)
auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17"],
           logdir=True, project_root=r"D:\test\logs", compress=90)

6.shell(cmd)
在目標設備上運行遠程shell指令

參數:
cmd – 需要在設備上運行的指令,例如 ls /data/local/tmp

返回:
shell指令的輸出內容

支持平台:
Android

示例:

# 在當前默認手機執行adb shell ls
print(shell("ls"))
# 在指定手機執行adb shell ls
dev = connect_device("Android:///device1")
dev.shell("ls")
# 設置手機列表中的第1台手機為當前手機,並執行adb shell ls
set_current(0)
shell("ls")

7.start_app(package, activity=None)
在設備上啟動目標應用

參數:
package  – 想要啟動的應用包名package name,例如 com.netease.my
activity – 需要啟動的activity,默認為None,意為main activity

返回:
None

支持平台:
Android, iOS

示例:

start_app("com.netease.cloudmusic")
start_app("com.apple.mobilesafari")  # on iOS

8.stop_app(package)
終止目標應用在設備上的運行

參數:
package – 需要終止運行的應用包名 package name,例如 com.netease.my

返回:
None

支持平台:
Android, iOS

示例:

stop_app("com.netease.cloudmusic")

9.clear_app(package)
清理設備上的目標應用數據

參數:
package – 包名 package name,例如 com.netease.my

返回:
None

支持平台:
Android

示例:

clear_app("com.netease.cloudmusic")

10.install(filepath, **kwargs)
安裝應用到設備上

參數:
filepath – 需要被安裝的應用路徑(PC上的路徑)
kwargs   – 平台相關的參數 kwargs,請參考對應的平台接口文檔

返回:
None

支持平台:
Android

示例:

install(r"D:\demo\qasite.apk")
# adb install -r -t D:\demo\test.apk
install(r"D:\demo\qasite.apk", install_options=["-r", "-t"])

 

11.uninstall(package)
卸載設備上的應用

參數:
package – 需要被卸載的包名

返回:
None

支持平台:
Android

示例:

uninstall("com.netease.cloudmusic")

12.snapshot(filename=None, msg="", quality=None, max_size=None)
對目標設備進行一次截圖,並且保存到文件中。

參數:
filename – 保存截圖的文件名,默認保存路徑為 ST.LOG_DIR
msg      – 截圖文件的簡短描述,將會被顯示在報告頁面中
quality  – 圖片的質量,[1,99]的整數,默認是10
max_size – 圖片的最大尺寸,例如 1200

返回:
截圖文件的絕對路徑

支持平台:
Android, iOS, Windows

示例:

snapshot(msg="index")
# 設置保存文件名
snapshot(filename="測試工程師小站.png", msg="test")

#可以設置截圖的畫質和大小
ST.SNAPSHOT_QUALITY = 30  # 設置截圖質量為30
ST.IMAGE_MAXSIZE = 600  # 設置最大尺寸不超過600*600
# 此截圖質量30,最大不超過600*600
snapshot()  
# 設置了全局參數,又額外設置單語句參數時,單語句優先,此截圖質量90
snapshot(filename="測試工程師小站.png", msg="test", quality=90)
# 設置了全局參數,又額外設置單語句參數時,單語句優先,此截圖最大不超1200*1200
snapshot(filename="qasite.png", msg="test", quality=90, max_size=1200)

13.wake()
喚醒並解鎖目標設備,在部分品牌手機上可能無法生效

返回:
None

支持平台:
Android

示例:

wake()

14.home()
返回HOME界面。

返回:
None

支持平台:
Android, iOS

示例:

home()

15.touch(v, times=1, **kwargs)
在當前設備畫面上進行一次點擊

參數:
v      – 點擊位置,可以是一個 Template 圖片實例,或是一個絕對坐標 (x, y)
times  – 點擊次數
kwargs – 平台相關的參數 kwargs,請參考對應的平台接口文檔

返回:
實際點擊位置坐標 (x, y)

支持平台:
Android, Windows, iOS

示例:

# 點擊絕對坐標:
touch((100, 100))

# 點擊圖片的中心位置:
touch(Template(r"測試工程師小站.png", target_pos=5))

# 點擊兩次:
touch((100, 100), times=2)

# 在Android和Windows下,可以設置點擊持續時間:
touch((100, 100), duration=2)

# 右鍵點擊(Windows):
touch((100, 100), right_click=True)

16.click(*args, **kwargs)
touch()的別名,一樣

 


17.double_click(v)
雙擊

參數:
v – 點擊位置,可以是一個 Template 圖片實例,或是一個絕對坐標 (x, y)

返回:
實際點擊位置坐標 (x, y)

示例:

double_click((100, 100))
double_click(Template(r"測試工程師小站.png"))

18.swipe(v1, v2=None, vector=None, **kwargs)
在當前設備畫面上進行一次滑動操作。
有兩種傳入參數的方式

swipe(v1, v2=Template(...)) # 從 v1 滑動到 v2
swipe(v1, vector=(x, y)) # 從 v1 開始滑動,沿着vector方向。

參數:
v1 – 滑動的起點,可以是一個Template圖片實例,或是絕對坐標 (x, y)
v2 – 滑動的終點,可以是一個Template圖片實例,或是絕對坐標 (x, y)
vector – 滑動動作的矢量坐標,可以是絕對坐標 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
**kwargs – 平台相關的參數 kwargs,請參考對應的平台接口文檔

引發:
Exception – 當沒有足夠的參數來執行滑動時引發異常

返回:
原點位置和目標位置

支持平台:
Android, Windows, iOS

示例:

swipe(Template(r"測試工程師小站.png"), vector=[-0.0316, -0.3311])
swipe((100, 100), (200, 200))

#自定義滑動持續時間1s和經過6步到達終點:
swipe((100, 100), (200, 200), duration=1, steps=6)

19.pinch(in_or_out='in', center=None, percent=0.5)
在設備屏幕上執行一個雙指pinch捏合操作

參數:
in_or_out – 向內捏合或向外擴大,在[“in”, “out”] 中枚舉一個值
center – pinch動作的中心位置,默認值為None則為屏幕中心點
percent – pinch動作的屏幕百分比,默認值為0.5

返回:
None

支持平台:
Android

示例:

# 兩指向屏幕中心點捏合:
pinch()

# 將(100, 100)作為中心點,向外擴張兩指:
pinch('out', center=(100, 100))

20.keyevent(keyname, **kwargs)
在設備上執行keyevent按鍵事件

參數:
keyname  – 平台相關的按鍵名稱
**kwargs – 平台相關的參數 kwargs,請參考對應的平台接口文檔

返回:
None

支持平台:
Android, Windows, iOS

示例:

# 在Android上相當於執行了 adb shell input keyevent KEYNAME
# 內部調用的android.adb.keyevent()
# Android Keyevent詳細文檔:
# https://developer.android.com/reference/android/view/KeyEvent#constants_1
keyevent("HOME")
keyevent("3")  # same as keyevent("HOME")
keyevent("BACK")
keyevent("KEYCODE_DEL")

# 在Windows上內部調用的pywinauto.keyboard 進行按鍵點擊
# Windows Keyevent詳細文檔:
# https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html
keyevent("{DEL}")
keyevent("%{F4}")  # close an active window with Alt+F4

# iOS只支持 home/volumeUp/volumeDown:
keyevent("HOME")
keyevent("volumeUp")

 

21.text(text, enter=True, **kwargs)
在目標設備上輸入文本,文本框需要處於激活狀態。

參數:
text  – 要輸入的文本
enter – 是否在輸入完畢后,執行一次 Enter ,默認是True

返回:
None

支持平台:
Android, Windows, iOS

示例:

text("公眾號:測試工程師小站")  # 輸入完畢后點回車
text("公眾號:測試工程師小站", enter=False)
# 在Android上,有時你需要在輸入完畢后點擊搜索按鈕:
text("公眾號:測試工程師小站", search=True)

# 如果希望輸入其他按鍵,可以用這個接口, code詳情:
# https://developer.android.com/reference/android/view/inputmethod/EditorInfo.html#constants_1
text("公眾號:測試工程師小站")
device().yosemite_ime.code("3")  # 3 = IME_ACTION_SEARCH

22.sleep(secs=1.0)
設置一個等待sleep時間,它將會被顯示在報告中

參數:
secs – sleep的時長

返回:
None

支持平台:
Android, Windows, iOS

示例:

sleep(1)

23.wait(v, timeout=None, interval=0.5, intervalfunc=None)
等待當前畫面上出現某個匹配的Template圖片

參數:
v – 要等待出現的目標Template實例
timeout – 等待匹配的最大超時時長,默認為None即默認取 ST.FIND_TIMEOUT 的值
interval – 嘗試查找匹配項的時間間隔(以秒為單位)
intervalfunc – 在首次嘗試查找匹配失敗后的回調函數

引發:
TargetNotFoundError – 在超時后仍未找到目標則觸發

返回:
匹配目標的坐標

支持平台:
Android, Windows, iOS

示例:

wait(Template(r"測試工程師小站.png"))  # timeout after ST.FIND_TIMEOUT
# 每3秒查找一次, 120秒超時
wait(Template(r"測試工程師小站.png"), timeout=120, interval=3)

# 你可以在每次查找目標失敗時,指定一個回調函數:

def notfound():
    print("No target found")
wait(Template(r"測試工程師小站.png"), intervalfunc=notfound)

24.exists(v)
檢查設備上是否存在給定目標

參數:
v – 要檢查的目標

返回:
如果未找到目標,則返回False,否則返回目標的坐標

支持平台:
Android, Windows, iOS

示例:

if exists(Template(r"測試工程師小站.png")):
    touch(Template(r"測試工程師小站.png"))

# 因為 exists() 會返回坐標,我們可以直接點擊坐標來減少一次圖像查找
pos = exists(Template(r"測試工程師小站.png"))
if pos:
    touch(pos)

25.find_all(v)
在設備屏幕上查找所有出現的目標並返回其坐標列表

參數:
v – 尋找目標

返回:
結果列表

[{‘result’: (x, y), ‘rectangle’: ( (left_top, left_bottom, right_bottom, right_top) ), ‘confidence’: 0.9}, …]

支持平台:
Android, Windows, iOS

示例:

find_all(Template(r"測試工程師小站.png"))
[{'result': (218, 468), 'rectangle': ((149, 440), (149, 496), (288, 496), (288, 440)),'confidence': 0.9999996423721313}]

26.assert_exists(v, msg="")
設備屏幕上存在斷言目標

參數:
v   – 要檢查的目標
msg – 斷言的簡短描述,它將被記錄在報告中

引發:
AssertionError – 如果斷言失敗

返回:
目標坐標

支持平台:
Android, Windows, iOS

示例:

assert_exists(Template(r"測試工程師小站.png"), "assert exists")

27.assert_not_exists(v, msg="")
設備屏幕上不存在斷言目標

參數:
v   – 要檢查的目標
msg – 斷言的簡短描述,它將被記錄在報告中

引發:
AssertionError – 如果斷言失敗

返回:
None.

支持平台:
Android, Windows, iOS

示例:

assert_not_exists(Template(r"測試工程師小站.png"), "assert not exists")

28.assert_equal(first, second, msg="")
斷言兩個值相等

參數:
first  – 第一個值
second – 第二個值
msg    – 斷言的簡短描述,它將被記錄在報告中

引發:
AssertionError – 如果斷言失敗

返回:
None

支持平台:
Android, Windows, iOS

示例:

assert_equal(1, 1, msg="assert 1==1")

29.assert_not_equal(first, second, msg="")
斷言兩個值不相等

參數:
first  – 第一個值
second – 第二個值
msg    – 斷言的簡短描述,它將被記錄在報告中

引發:
AssertionError – 如果斷言異常

返回:
None

支持平台:
Android, Windows, iOS

示例:

assert_not_equal(1, 2, msg="assert 1!=2")

 

---------------------------------------------------------------------------------

關注微信公眾號即可在手機上查閱,並可接收更多測試分享~


免責聲明!

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



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