uiautomator2 + weditor的入門科普,可以用來實現安卓平臺自動化

之前呢一直用的python+appium做安卓自動化測試,最近看大佬的博客,發現了又一個神器,簡單介紹一下哈:

轉載地址:https://mp.weixin.qq.com/s/TWhKS1EORLT4Ua26heM8aA

uiautomator2 的api文檔:https://www.cnblogs.com/jec1999/p/8976960.html

uiautomator是Google提供的用來做安卓自動化測試的一個Java庫。功能很強,可以對第三方App進行測試,獲取屏幕上任意一個APP的任意一個控件屬性,並對其進行任意操作,但有兩個缺點:

  1. 測試腳本只能使用Java語言
  2. 測試腳本必須每次被上傳到設備上運行。

我們希望測試能夠用Python編寫,能夠在電腦上運行的時候就控制手機,於是就有了python-uiautomator,後來又有了python-uiautomator2,詳情查看github地址https://github.com/openatx/uiautomator2

1. 安裝uiautomator2

使用pip3安裝uiautomator2 ,安裝的過程中有點坑,用pip install \--pre \-U uiautomator2一直安裝失敗,找了很多教程都是這個。
最後去github上找了下教程https://github.com/openatx/uiautomator2,發現用pip3安裝,抱着試試的心態,安裝成功了
需cd到python的Scripts目錄,再使用pip3安裝

E:\python36\Scripts>pip3 install -U uiautomator2

2. adb連上手機

確保手機和電腦能連得上,使用adb devices查看鏈接狀態,adb相關的環境本篇就不多說了,搞android測試的都知道

E:\python36\Scripts>adb devicesList of devices attachedadb server version (31) doesn't match this client (40); killing...* daemon started successfullyemulator-5554   device

2.1 安裝atx-agent

python -m uiautomator2 init

E:\python36\Scripts>python -m uiautomator2 init[D 190716 23:34:53 __main__:28] use cache directory: C:\Users\dell\.uiautomator2Namespace(serial=None, server=None, subparser='init') init[I 190716 23:34:53 __main__:88] >>> Initial device AdbDevice(serial=emulator-5554)[I 190716 23:34:53 __main__:172] Install minicap, minitouch[Kminitouch |################################| 33.5K / 33.5K[?25h[D 190716 23:34:56 __main__:157] Push https://github.com/openatx/stf-binaries/raw/master/node_modules/minitouch-prebuilt/prebuilt/x86/bin/minitouch -> /data/local/tmp/minitouch:0755[I 190716 23:34:56 __main__:176] abi:x86 seems to be android emulator, skip install minicap[I 190716 23:34:56 __main__:182] Install com.github.uiautomator, com.github.uiautomator.test[D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator')[D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator.test')[Kapp-uiautomator.apk |################################| 1.7M / 1.7M.7M[?25h[D 190716 23:35:05 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator.apk -> /data/local/tmp/app-uiautomator.apk:0644[D 190716 23:35:05 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator.apk')[Kapp-uiautomator-test.apk |################################| 966.8K / 966.8K[?25h[D 190716 23:35:11 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator-test.apk -> /data/local/tmp/app-uiautomator-test.apk:0644[D 190716 23:35:11 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator-test.apk')[I 190716 23:35:18 __main__:193] Install atx-agent[Katx-agent_0.6.0_linux_386.tar.gz |################################| 4.0M / 4.0M.0M[?25h[D 190716 23:35:23 __main__:157] Push https://github.com/openatx/atx-agent/releases/download/0.6.0/atx-agent_0.6.0_linux_386.tar.gz -> /data/local/tmp/atx-agent:0755[D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '--stop')[D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '-d')[I 190716 23:35:26 __main__:202] Check install[D 190716 23:35:26 __main__:212] Forward: local:tcp:53461 -> remote:tcp:7912[D 190716 23:35:28 __main__:214] atx-agent version 0.6.0Successfully init AdbDevice(serial=emulator-5554)

看到Successfully就是安裝成功了(當然總是有幾個小夥伴的手機需要換下了!!!)

2.2 連接手機

python-uiautomator2連接手機的方式有兩種,一種是通過WIFI,另外一種是通過USB

首先查看uiautomator狀態是啓動狀態

2.2.1 usb連接手機

先使用adb devices獲取手機的唯一識別序列號,也就是devices前面的那一串:emulator-5554

E:\python36\Scripts>adb devices
List of devices attached
emulator-5554 device

測試是否連接成功,先打開你的手機上的任意app,比如淘寶,cmd輸入以下信息

E:\python36\Scripts>pythonPython 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import uiautomator2 as u2>>> d = u2.connect_usb('emulator-5554')>>> d.info{'currentPackageName': 'com.taobao.taobao', 'displayHeight': 1280, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 720, 'productName': 'h60-l01', 'screenOn': True, 'sdkInt': 22, 'naturalOrientation': True}>>>

看到輸出’currentPackageName’: ‘com.taobao.taobao’說明連接成功了

2.2.2 wifi連接

首先保證手機和電腦在一個局域網,可以先ping 手機ip,看能不能ping的通

>>> import uiautomator2 as u2>>> d = u2.connect('192.168.1.xx')>>> d.info

3. weditor環境準備

使用pip安裝weditor,github地址https://github.com/openatx/weditor

pip install —pre weditor

創建桌面快捷圖標

python -m weditor —shortcut

創建完成後,桌面會出現一個WEditor快捷圖標,雙擊就能啓動了

也可以不創建圖標,用命令行啓動

python -m weditor

看到窗口出現如下信息,就是啓動成功了(窗口別關掉了)

C:\Users\dell>python -m weditorlistening on http://192.168.1.125:17310[I 190717 23:50:55 web:2246] 304 GET / (::1) 7.98ms[I 190717 23:50:55 web:2246] 304 GET /static/libs/css/buttons.css (::1) 196.47ms[I 190717 23:50:55 web:2246] 304 GET /static/loading.svg (::1) 5.99ms[I 190717 23:50:55 web:2246] 304 GET /static/ace/ace.js (::1) 12.97ms[I 190717 23:50:55 web:2246] 304 GET /static/running.svg (::1) 13.96ms[I 190717 23:50:55 web:2246] 304 GET /static/ace/mode-python.js (::1) 19.96ms[I 190717 23:50:55 web:2246] 304 GET /static/libs/fontawesome/css/font-awesome.min.css (::1) 1.99ms[I 190717 23:50:59 web:2246] 304 GET /api/v1/version (::1) 0.00ms

3.1 weditor連接手機

先使用adb連上手機,輸入adb devices查看手機設備號:emulator-5554

C:\Users\dell>adb devicesList of devices attachedadb server version (31) doesn't match this client (40); killing...* daemon started successfullyemulator-5554   device

在頁面上輸入手機設備號,點Connet按鈕,看到出現一個小草的圖標,就是連接成功了

3.2 頁面元素抓取

3.2.1 定位元素

定位元素的方法支持uiautomator的定位方法,也可以支持xpath和座標定位

  • 1.可以查看元素的resourceId屬性
  • 2.自動生成xpath定位方法
  • 3.支持座標點擊,根據屏幕的比例
  • 4.自動生成uiautomator定位方法參考代碼
  • 5.可以勾選強制使用xpath

3.2.2 在線Coding調試

可以在頁面的右邊調試運行代碼,這點比appium強很多,可以編寫代碼邊調試,還是非常方便的

操作步驟:點勾選高鐵動車後,點查詢按鈕

d(resourceId="com.yipiao:id/checkGaotie").click()d.xpath('//*[@resource-id="com.yipiao:id/layQueryCard"]/android.widget.FrameLayout[1]').click()

Ctr+Enter運行代碼,會發現手機上已經點擊成功

3.3 支持wifi連接

首先保證電腦和手機wifi在一個局域網,電腦上能ping的通手機的ip,輸入手機的ip也可以抓到手機上的頁面元素

看完上面的文章再加上文章開頭的api文檔相信基本使用應該沒問題了,下面呢,我寫一個用uiautomator2去支付寶收集能量的一個腳本哈:

腳本如下:

# coding:utf-8import uiautomator2 as u2d = u2.connect_usb('740dc3d1')print('打開支付寶')d.app_start('com.eg.android.AlipayGphone')print('點擊螞蟻森林')d.xpath('//*[@text="螞蟻森林"]').click()n = d(descriptionContains='收集').countfor i in range(n):    d.xpath('//*[contains(@content-desc,"收集能量")]').click()    print('收集能量成功')print('收集能量結束!')

怎麼樣?只要將這個腳本設置未定時任務就可以自己每天定時去收取能量了,這樣你的小樹纔會長得快呀!

總體來說呢,uiautomator2比appium安裝搭建環境要簡單一點,代碼呢也十分簡潔!其次就是這個weditor 也比appium查看頁面元素要方便,反應快,可實時調代碼這是關鍵!期待後面的自動化項目可以用uiautomaor2 來試試手,屆時會繼續更新uiautomator2的詳細使用,及踩坑的記錄!

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