手機APP自動化之uiautomator2 +python3 UI自動化

題記: 以前一直用APPium直到用安卓9.0  發現uiautomatorviewer不支持安卓 9.0,點擊截屏按鈕 一直報錯,百度好久解決方法都不能夠,偶然間看見有人推薦:uiautomator2 就嘗試使用 發現比appium要簡單一些; 下面文字主要來自蟲師的博客html

 

1、Uiautomator2原理介紹

1.uiautomator2是一個可使用Python對Android設備進行UI自動化的庫。其底層基於Google uiautomator,Google提供的uiautomator庫能夠獲取屏幕上任意一個APP的任意一個控件屬性,並對其進行任意操做,目前僅支持android平臺的原生應用測試,https://github.com/openatx/uiautomator2。但有兩個缺點:

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

2.工做原理

分爲兩個部分:

PC上的python端:運行腳本,並向系統設備發送http請求

移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,並轉化成uiautomator2的代碼。

python

2、安裝uiautomator2android

pip install --pre uiautomator2git

pip install pillow github

3、初始化小程序

部署相關的守護進程。微信小程序

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

python -m uiautomator2 init

 

安裝完成,設備上會多一個uiautomator的應用。微信

配置手機設備參數:app

有兩種方法,一種是經過WIFI,另外一種是經過USB數據線將手機連接電腦。 (我是經過USB這個方法,按照後手機會多一個ATX小汽車圖標的軟件)

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

 

定位元素:

咱們能夠藉助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/

下面這個跟用uiautomatorviewer定位元素是同樣的 並且多了xpath的定位語句,用起來更方便,

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

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

 

編寫測試腳本 這裏參考怎麼去定位元素,在定位元素和啓動APP 相對比APPium  要簡單不少

這裏針對魅族社區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()

小結:其實關注該項目已經好幾個月了,目前該項目已經趨於穩定,整個測試環境的搭建過程也要比Appium簡單得多。

 

我是練習分割線


 

在嘗試對APP進行登陸的時候發現一個問題,在用APPium 是能夠隱藏鍵盤進行輸入, 用uiautomator2 發現不能夠 ,一直卡主鍵盤無法辦收起來提交失敗;

最後嘗試用物理返回,成功解決,

下面嘗試用uiautomator2 打開微信小程序並進行受權 代碼以下:

#連接設備
driver = u2.connect_usb("XXXX")
#打開APP
driver.app_start("com.tencent.mm")

time.sleep(3)
#下拉操做
driver.swipe(0.513,0.399, 0.513,0.6)
#經過文本定位打開小程序
driver(text="XX").click()

 打開APP,並進行登陸:

#定位driver
driver = u2.connect_usb("L081")
#啓動app driver.app_start("com.XXX.XXXX")
#經過id定位輸入框輸入帳號密碼 driver(resourceId="com.XXX.XXXX:id/login_username_et").set_text("test") driver(resourceId="com.XXX.XXXX:id/login_password_et").send_keys("123456") #經過物理返回,收齊鍵盤 driver.press("back") time.sleep(2) #點擊登陸 driver(resourceId="com.XXX.XXXX:id/login_commit_btn").click()

 疑問:在校驗還沒涉及  若是有朋友涉及  請不吝賜教,謝謝

 

 

 

下面是原文連接和一些用法介紹:

原文:

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

用法:

https://blog.csdn.net/ricky_yangrui/article/details/81415365

相關文章
相關標籤/搜索