在移動(dòng)端自動(dòng)化測(cè)試領(lǐng)域,Airtest 以其跨平臺(tái)、圖像識(shí)別和易用性著稱,為 iOS 應(yīng)用的測(cè)試提供了強(qiáng)大支持。掌握其核心接口,能極大提升測(cè)試腳本的編寫效率與穩(wěn)定性。本文將詳細(xì)介紹 Airtest 在 iOS 平臺(tái)上的幾個(gè)關(guān)鍵實(shí)用接口,并附上使用建議,建議測(cè)試工程師收藏備用。
1. 設(shè)備連接與初始化接口:connect_device
這是所有測(cè)試的起點(diǎn)。用于連接真實(shí)的 iOS 設(shè)備或模擬器。`python
from airtest.core.api import connect_device
# 連接本地iOS設(shè)備(通過WebDriverAgent)
dev = connect_device("iOS:///127.0.0.1:8100")
# 或使用設(shè)備UDID進(jìn)行指定連接
dev = connect_device("iOS:///http://127.0.0.1:8100?udid=你的設(shè)備UDID")`
要點(diǎn):確保設(shè)備已通過 iproxy 完成端口轉(zhuǎn)發(fā)(例如 iproxy 8100 8100),且 WebDriverAgent 已成功安裝并啟動(dòng)。
2. 元素定位與操作接口:touch, wait, exists
這些是模擬用戶交互的基礎(chǔ)。
- touch:點(diǎn)擊屏幕坐標(biāo)或圖像識(shí)別的目標(biāo)。
`python
touch((100, 200)) # 點(diǎn)擊絕對(duì)坐標(biāo)
touch(Template("button.png")) # 點(diǎn)擊匹配的圖片元素,推薦此方式,抗UI變化能力更強(qiáng)
`
- wait 與 exists:等待或判斷元素出現(xiàn)。
`python
# 等待“登錄按鈕”出現(xiàn),超時(shí)時(shí)間10秒
pos = wait(Template("login_button.png"), timeout=10)
if pos:
touch(pos)
# 快速判斷元素是否存在
if exists(Template("welcome_popup.png")):
touch("close.png")
`
建議:優(yōu)先使用 Template 圖片識(shí)別進(jìn)行定位,而非絕對(duì)坐標(biāo),以提高腳本在不同分辨率設(shè)備上的復(fù)用性。
3. 文本輸入接口:text
用于向輸入框輸入內(nèi)容,比 keyevent 更直接高效。`python
# 在焦點(diǎn)已位于輸入框時(shí),直接輸入文本
text("Hello Airtest")
# 更常見的組合操作:先點(diǎn)擊輸入框,再輸入
touch(Template("username_field.png"))
text("[email protected]")`
注意:對(duì)于某些復(fù)雜輸入(如密碼鍵盤),可能需要結(jié)合 keyevent 模擬按鍵。
4. 滑動(dòng)與手勢(shì)接口:swipe
模擬滑動(dòng)操作,常用于列表滾動(dòng)、頁面切換等場(chǎng)景。`python
# 從坐標(biāo)(300,800)滑動(dòng)到(300,400),持續(xù)0.5秒
swipe((300, 800), (300, 400), duration=0.5)
# 基于圖像識(shí)別結(jié)果的滑動(dòng)(例如從“元素A”滑到“元素B”)
pos1 = wait(Template("itemtop.png"))
pos2 = wait(Template("itembottom.png"))
swipe(pos1, pos2)`
技巧:適當(dāng)增加 duration 參數(shù)值可以使滑動(dòng)更接近真實(shí)用戶操作,避免因滑動(dòng)過快導(dǎo)致檢測(cè)失敗。
5. 斷言與驗(yàn)證接口:assert<em>exists, assert</em>equal
用于測(cè)試結(jié)果驗(yàn)證,是自動(dòng)化測(cè)試的靈魂。`python
# 斷言某個(gè)元素必須存在
assertexists(Template("successtoast.png"), "驗(yàn)證成功提示未出現(xiàn)")
# 結(jié)合poco使用,斷言文本內(nèi)容(需安裝pocoui庫)
from poco.drivers.ios import iosPoco
poco = iosPoco()
assertequal(poco("titleLabel").gettext(), "歡迎頁面", "標(biāo)題文本不符預(yù)期")`
最佳實(shí)踐:斷言應(yīng)清晰明確,失敗信息需能直接定位問題。
6. 關(guān)鍵系統(tǒng)操作接口:home, snapshot
home:模擬按下Home鍵,返回桌面。home()snapshot:截取當(dāng)前屏幕,并自動(dòng)保存到測(cè)試報(bào)告。snapshot(msg="登錄后主頁截圖")
7. 封裝與復(fù)用:using 與自定義模塊
對(duì)于復(fù)雜或重復(fù)操作,建議進(jìn)行封裝。`python
# 使用using引入其他公共腳本
using("common_login.air")
# 調(diào)用其中封裝好的方法
from common_login import login
login("username", "password")`
與收藏建議
- 環(huán)境是前提:穩(wěn)定連接
WebDriverAgent是 iOS 測(cè)試的基礎(chǔ),務(wù)必先確保環(huán)境暢通。 - 圖像識(shí)別為主:盡量使用
Template進(jìn)行元素定位,并維護(hù)好一套基準(zhǔn)截圖。 - 組合使用:將基本接口(
wait->touch->text->assert)組合成業(yè)務(wù)流。 - 善用報(bào)告:關(guān)鍵步驟后使用
snapshot(),斷言時(shí)填寫清晰信息,讓測(cè)試報(bào)告一目了然。 - 結(jié)合Poco:對(duì)于原生應(yīng)用,強(qiáng)烈建議結(jié)合
poco框架進(jìn)行基于UI層級(jí)的精準(zhǔn)定位,與圖像識(shí)別互補(bǔ)。
通過熟練掌握以上接口,您將能利用 Airtest 高效地構(gòu)建出穩(wěn)定、可維護(hù)的 iOS 自動(dòng)化測(cè)試腳本,有效覆蓋核心功能回歸與兼容性測(cè)試場(chǎng)景。