python-uiautomator2


簡單介紹

python-uiautomator2是一個自動化測試開源工具,僅支持Android平台的原生應用測試。

支持平台及語言

python-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python接口。他允許測試人員直接在PC上編寫Python的測試代碼,操作手機應用,完成自動化,大大提高了自動化代碼編寫的效率。

工作原理

以下圖片使用Windows畫圖軟件

如圖所示,python-uiautomator2主要分為兩個部分,python客戶端,移動設備

  • python端: 運行腳本,並向移動設備發送HTTP請求
  • 移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,並轉化成uiautomator2的代碼。

整個過程

  1. 在移動設備上安裝atx-agent(守護進程), 隨后atx-agent啟動uiautomator2服務(默認7912端口)進行監聽
  2. 在PC上編寫測試腳本並執行(相當於發送HTTP請求到移動設備的server端)
  3. 移動設備通過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操作

安裝工具

  • Python2或者Python3均可。(也可以嘗試使用Android上Python客戶端:QPython)
  • 移動設備

環境搭建

安裝adb

如命令行可以執行adb devices,則跳過此步驟
從谷歌官網下載Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解壓,並加包含adb.exe的目錄加入到系統的PATH中。

安裝python-uiautomator2

pip install --pre -U uiautomator2

設備安裝atx-agent

首先設備連接到PC,並能夠adb devices發現該設備。

# github下載atx-agent文件,並推送到手機。在手機上安裝包名為`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success

最后提示success,代表atx-agent初始化成功。

應用及操作

調用uiautomator2的過程

  1. 配置手機設備參數,設置具體操作的是哪一台手機
  2. 抓取手機上應用的控件,制定對應的控件來進行操作
  3. 對抓取到的控件進行操作,比如點擊、填寫參數等。

配置手機設備參數

python-uiautomator2連接手機的方式有兩種,一種是通過WIFI,另外一種是通過USB。兩種方法各有優缺點。
WIFI最便利的地方要數可以不用連接數據線,USB則可以用在PC和手機網絡不在一個網段用不了的情況。

  1. 使用WIFI連接

    手機獲取到手機的IP,並確保電腦可以PING通手機。手機的IP可以在設置-WIFI設置里面獲取到。
    比如手機的IP是192.168.0.100,連接設備的代碼為

    import uiautomator2 as u2
    d = u2.connect('192.168.0.100')
  2. 使用USB連接

    手機的序列號可以通過adb devices獲取到,假設序列號是123456f,連接代碼為

    import uiautomator2 as u2
    d = u2.connect_usb('123456f')

抓取手機上應用的控件

雖然很想用Android SDK內置工具uiautomatorviewer.bat,但是運行uiautomator2的時候,uiautomatorviewer.bat運行不起來,兩者之間沖突太嚴重。
於是參考着uiautomatorviewer的界面,我又寫了一個weditor,調用python-uiautomator2的兩個接口screenshotdump_hierarchy這樣就不會有沖突問題了

注:weditor依然處於開發期,功能可能會跟文中描述的有所不同

安裝方法: pip install --pre weditor

使用方法:
首先運行python -m weditor,之后瀏覽器會自動打開一個網頁 http://atx.open.netease.com (注:這個網址僅提供一個前端,而python -mweditor這個命令則本地開放了HTTP的接口,前端去跟本地的服務去通信)

下圖為網頁的截圖

重點說下這個部分

先忽略iOSNeco這兩個,直接選擇Android。輸入框中可以寫設備的IP或者設備的Serial(序列號),跟上面提到的配置手機設備參數用法一致。之后點擊Connect,如果一切正常就會出現一個綠色的葉子。

頁面刷新時,點擊藍色的Reload按鈕重新刷新。

定位方式

  1. ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()
  2. Text定位 d(text="秒表").click()
  3. Description定位 d(description="..").click()
  4. ClassName定位 d(className="android.widget.TextView").click()

xpath定位並不支持,一開始打算做支持的,但是發現不用也能搞定。就是代碼寫的長一點而已。

操作控件

# click
d(text="Settings").click()

# long click
d(text="Settings").long_click()

# 等待元素的出現
d(text="Settings").wait(timeout=10.0)

九宮格解鎖:以前文章寫過 https://testerhome.com/topics/11034

中文字符的輸入
如果可以定位到元素,直接通過set_text就可以輸入中文

d(text="Settings").set_text("你好")

如果定位不到元素需要使用send_keys方法,以及切換輸入法

d.set_fastinput_ime(True)
d.send_keys("你好 Hello")
d.set_fastinput_ime(False) # 輸入法用完關掉

截圖:d.screenshot("home.jpg")
獲取圖層信息:xml = d.dump_hierarchy()


免責聲明!

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



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