uiautomator2 使用Python測試 Android應用

GitHub地址:https://github.com/openatx/uiautomator2html

 

介紹

uiautomator2 是一個可使用Python對Android設備進行UI自動化的庫。其底層基於Google uiautomator,Google提供的uiautomator庫能夠獲取屏幕上任意一個APP的任意一個控件屬性,並對其進行任意操做,但有兩個缺點:python

一、測試腳本只能使用Java語言。android

二、測試腳本必須每次被上傳到設備上運行。 咱們但願測試可以用一個更腳本化的語言,例如Python編寫,同時能夠每次所見即所得地修改測試、運行測試。nginx

 

安裝

安裝uiautomator2git

pip install --pre uiautomator2 pip install pillow

 

初始化

部署相關的守護進程。github

電腦鏈接上一個手機或多個手機, 確保adb已經添加到環境變量中,執行下面的命令會自動安裝本庫所須要的設備端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouchsql

python -m uiautomator2 init

安裝完成,設備上會多一個uiautomator的應用。瀏覽器

配置手機設備參數:app

有兩種方法,一種是經過WIFI,另外一種是經過USB數據線將手機連接電腦。工具

WiFi鏈接更方便一點,須要保持PC和手機使用的一個WIFI,查看手機鏈接WIFI的IP地址。

 

測試

編寫如下腳本進行驗證:

import uiautomator2 as u2 d = u2.connect('192.168.31.234') print(d.info)

運行結果:

{'currentPackageName': 'com.meizu.flyme.launcher', 'displayHeight': 1920, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 1080, 'productName': 'meizu_PRO5', 'screenOn': True, 'sdkInt': 24, 'naturalOrientation': True}

 

定位元素:

咱們能夠藉助Android SDK自的uiautomatorviewer查看元素,這就要求手機必須以USB的方式鏈接PC,我前面使用的是WIFI鏈接進行鏈接的。因此,openatx提供了另一個工具weditor 來解決這個問題。

GitHub地址:https://github.com/openatx/weditor

一、安裝:

pip install --pre --upgrade weditor

二、使用:

python3 -m weditor

默認會經過瀏覽器打開頁面:http://atx.open.netease.com/

在頁面左上角選擇Android,輸入設備IP(192.168.31.234),點擊Connect按鈕。

當咱們操做完手機後,能夠點擊「Reload」按鈕進行刷新,從而保持與設備上的界面保持同步。weditor 還能夠幫咱們生成代碼。總之,你研究一下就會用了。

 

編寫測試腳本

這裏針對魅族社區App進行測試。

import uiautomator2 as u2 from time import sleep d = u2.connect('192.168.31.234') # 啓動App d.app_start("com.meizu.mzbbs") # 搜索 d(resourceId="com.meizu.mzbbs:id/j0").click() # 輸入關鍵字 d(resourceId="com.meizu.mzbbs:id/p9").set_text("flyme") # 搜索按鈕 d(resourceId="com.meizu.mzbbs:id/tp").click() sleep(2) # 中止app d.app_stop("com.meizu.mzbbs") 

app_start()和app_stop()用於啓動和中止應用。

經常使用的定位方式:

  • ResourceId定位:
    d(resourceId="com.meizu.mzbbs:id/tp").click()

  • Text定位:
    d(text="精選").click()

  • Description定位:
    d(description="..").click()

  • ClassName定位:
    d(className="android.widget.TextView").click()

 

https://www.cnblogs.com/fnng/p/8486863.html

相關文章
相關標籤/搜索