使用pocoui進行airtest測試

一、pocoui安裝

poco是網易自研的無需嵌入sdk。使用poco可以向appuim、selenium一樣定位app上的元素對象位置。
poco安裝有兩種方式,第一種是直接網上搜索poco依賴包下載,然後使用python進行解壓安裝,這裏不做介紹。另外一種是直接使用pip安裝。
在命令行中使用指令:pip install pocoui進行安裝。
等待安裝完後使用pip list命令查看是否安裝成功,如下,pip list指令下顯示有pocoui了,版本是目前的最新版本。
在這裏插入圖片描述

二、pocoui的使用

poco的使用前還需要在手機上安裝pocoserver,一般情況下在airtest連接手機的時候會自動安裝pocoserver這個app,但是有些奇葩手機就沒能安裝,那麼這個時候就要手動進行安裝,可以使用手機助手安裝,當然這裏我使用的是adb shell指令安裝的,使用adb指令:adb shell install apk路徑。
在這裏插入圖片描述

  1. 啓用poco。在Poco輔助窗口下,點擊展開下拉菜單,然後選擇Android (如果是iOS就選iOS),此時會自動啓動pocosdk了,在窗口下會顯示app當前界面的所有元素對象的活動名字(activity),同時在代碼區域中會自動導入紅色框的兩行代碼。這兩行代碼如無特殊情況請不要刪除。這兩行代碼的功能是導入AndroidUIautomationPoco並且實例化poco。實例化後的poco可供後面代碼直接使用。
    在這裏插入圖片描述

  2. poco元素對象定位。在編寫代碼之前要先定好好元素對象的位置在輔助窗口的那個地方,下圖箭頭按鈕是開啓實時顯示元素對象的結構位置,我們只需要在鼠標標移到都某個UI上面,左邊的元素結構就會自動顯示到該UI的結構位置處,能夠快速定位到具體的UI結構位置。
    在這裏插入圖片描述
    最右表的按鈕是自動定位且記錄功能按鈕,也能夠實時顯示元素UI的位置,如果我們點擊某UI時,就會自動在代碼去生成對應的代碼。不過不推薦此種方式,原因後面說明。
    在這裏插入圖片描述
    同時也可以在手機中鼠標置於某UI上,然後右擊可以選擇定位該UI的元素對象位置。
    在這裏插入圖片描述

  3. 雙擊poco輔助窗下的具體元素,在代碼中就會自動生成poco代碼。我們只需要添加具體的操作即可。比如我們要定位到相冊這個元素上,然後進行點擊操作,所以可以這樣操作。
    在log查看窗口中會顯示我們選中的元素具體信息,我們主要關注的是name、enable、touchable這幾個屬性即可,name用來作poco定位,需要留意的一點是,要注意查看上下幾個同級的元素的name是否相同,如果是相同的話,name就不可以用來定位,因爲多個名字poco不知要找那個(可以理解爲同班級有倆張三,點名時不知道是叫那個)。enable值一般要爲true纔可以,說明這個元素對象是可用的。touchable也要爲true,說明這個ui是可以點擊的,否則這個UI是不可以點擊的。一般情況是點擊、輸入等操作的話要爲true,如果用來作判定比較的則不要求是true。
    說明:以上這幾點是poco的使用基礎,熟悉並靈活使用poco定位對於用例的編寫有很大的幫助。
    在這裏插入圖片描述

三用例實例編寫

這裏使用poco定位,以企業微信作爲例子編寫一下實例作爲用例例子。

  1. 啓動app
    啓動app使用的方法是start_app()方法。該方法在airtest.core.api.py下的方法。方法的參數是包名,activity名。air的代碼如下:
    在這裏插入圖片描述
    airtest的源碼如下所示:
    在這裏插入圖片描述
    這裏就僅簡單列舉一下啓動app的操作,置於其他的操作,這裏不做多說明。

四poco源碼定義的操作

要使用poco的操作,首先要實例化poco對象。聲明poco對象的方法是:
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
通過上面這句話,就實例化了poco對象。可以使用poco封裝好了的操作了。poco的操作方法放在poco\pocofw.py裏面。
當實例化了poco後,在poco後面添加“.”後,會彈出可以調用的操作,操作有數十種,主要有等待、獲取\設置文本信息、點擊(單擊\雙擊\長按等)、截圖、滑動等常規操作。
在這裏插入圖片描述
這裏介紹poco對象的幾個常用的操作方法:
poco().wait_for_any(self, objects, timeout=120):
等待超時之前顯示給定的UI,最後返回第一個出現的UI。每個UI都會有一個特定的時間輪詢。第一個參數objects是一個可以迭代的UI對象,第二個參數是超時閾值,數值是float類型,默認時間是120秒。
poco().wait_for_all(self, objects, timeout=120):
等待所有的UI顯示,如果沒有顯示出來在超時。同時所有的UI都會有個定期進行輪詢。第一個參數objects是一個可以迭代的UI對象,第二個參數是超時閾值,數值是float類型,默認時間是120秒。
poco().wait_stable()
睡眠固定的秒數,以等待UI變得穩定(穩定)。無需手動調用此方法。需要時會自動調用它。
poco().click()
在給定座標下點擊設備屏幕
poco().long_click(self, pos, duration=2.0)
但在給定的時間間隔內按屏幕,然後釋放。第一個參數是座標位置,第二個參數是長按的時間。
poco().scroll(self, direction=‘vertical’, percent=0.6, duration=2.0)
屏幕滾動,第一個參數滾動方向:水平\垂直,第二個參數是根據方向滾動距離佔整個屏幕高度或寬度的百分比,第三個參數是執行操作的時間間隔。
poco().snapshot(self, width=720)
從目標設備獲取屏幕截圖。支持的輸出格式(png,jpg等)取決於代理程序的實現。

airtest的其他常用api操作方法:
airtest的核心操作在core下的api.py下。api.py幾乎封裝了所有的操作,這裏介紹下常用的操作方法。
在這裏插入圖片描述
這些操作都是api裏面封裝好了的,我們可以直接調用,要想調用一個函數,我們需要知道函數的名字與參數。如果參數傳入的數量不對的話,那麼會報TypeError的錯誤。
install(filepath, **kwargs):
安裝app應用,第一個參數是app的路徑名,**kwargs是可變參數,如無特殊情況,可以不需要。下面是install的使用例子:
install(filepath=‘xxx/xxx.apk’) # 安裝應用
uninstall(package):
卸載app,參數是app的包名。例子:uninstall(‘包名’)
wake():
喚醒連接的手機。
home():
設置連接的手機返回home界面。
例子:
在這裏插入圖片描述
touch(v, times=1, **kwargs):
觸摸設備屏幕,參數v是圖片名字或者需要觸摸屏幕的座標,times參數是觸摸次數,默認次數是1,**kwarges是平臺特殊參數。return:返回被點擊的位置。
例子:
在這裏插入圖片描述
double_click(v):
雙擊,參數v是圖片名字或者需要觸摸屏幕的座標,最後返回點擊的圖片或者位置。
在這裏插入圖片描述
swipe(v1, v2=None, vector=None, **kwargs):
滑動,在設備上執行滑動操作。參數v1表示開始座標或者圖片,參數v2表示結束座標或者結束的圖片,參數vector表示矢量座標,或者滑動座標的百分比,比如(0.5,0.5)
例子:
在這裏插入圖片描述
pinch(in_or_out=‘in’, center=None, percent=0.5):
在屏幕上執行縮放操作,參數in_or_out表示要進行的是縮放還是放大,默認是in,表示縮放,out表示放大,只能枚舉這兩個值。center參數表示縮放的中心,默認是None,表示屏幕中心,如果是其他地方的話,則使用(x,y)來表示縮放的中心座標。percent縮放操作的縮放比,默認是0.5,表示縮放一倍。
text(text, enter=True, **kwargs):
輸入文本信息,注意,這個輸入的UI必須是激活狀態的,否則無法輸入,例如網易靚號界面在有登錄彈出的時候,後面的搜索輸入框是非激活狀態,所以是無法輸入消息的。參數text表示輸入的內容,參數enter表示回車鍵是否除非事件,默認是True。
在這裏插入圖片描述
sleep(secs=1.0):
睡眠,默認執行睡眠事件1s。
wait(v, timeout=None, interval=0.5, intervalfunc=None):
在設定時間內等等匹配目標圖片,如果能匹配到目標圖片,則返回目標座標,如果等待超時,引發TargetNotFoundError錯誤。參數v表示目標圖片,參數timeout表示超時時間,intarval表示每次匹配的時間間隔。intervalfunc 表示在每次未成功嘗試找到相應匹配項後調用,默認是None。
exists(v):
檢查屏幕上的目標是存在。參數v表示目標圖片、文本。如果沒有找到,則返回false,否則返回找到的座標。
find_all(v):
檢查屏幕上所有的目標。參數v表示目標圖片,文本。結果返回一個所有的匹配結果座標的列表。
assert_exists(v, msg=""):
斷言目標存在。參數v表示斷言的目標,msg表示說明信息,這個信息會記錄到報告中。如果斷言失敗則會報AssertionError錯誤。如果斷言成功,則返回目標座標。
assert_not_exists(v, msg=""):
斷言目標不存在。參數v表示斷言目標,msg表示說明信息,這個信息會記錄到報告中。如果斷言失敗則會報AssertionError錯誤。
assert_equal(first, second, msg=""):
斷言兩個值相等。first表示第一個值,second表示第二個值。msg表示說明信息,這個信息會記錄到報告中。如果斷言失敗則會報AssertionError錯誤。返回值無。
assert_not_equal(first, second, msg=""):
斷言兩個值不相等。first表示第一個值,second表示第二個值。msg表示說明信息,這個信息會記錄到報告中。如果斷言失敗則會報AssertionError錯誤。返回值無。
以上基本就是pocoui的常用的一些操作,當然,也可以通過瀏覽源碼或者官方文檔說明了解對應操作的具體原理。

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