題記: 之前一直用APPium直到用安卓9.0 發現uiautomatorviewer不支持安卓 9.0,點擊截屏按鈕 一直報錯,百度很久解決方法都不可以,偶然間看見有人推薦:uiautomator2 就嘗試使用 發現比appium要簡單一些; 下面文字主要來自蟲師的博客
一、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的代碼。
二、安裝uiautomator2
pip install --pre uiautomator2
pip install pillow
三、初始化
部署相關的守護進程。
電腦連接上一個手機或多個手機, 確保adb已經添加到環境變量中,執行下面的命令會自動安裝本庫所需要的設備端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch
python -m uiautomator2 init
安裝完成,設備上會多一個uiautomator的應用。
配置手機設備參數:
有兩種方法,一種是通過WIFI,另一種是通過USB數據線將手機鏈接電腦。 (我是通過USB這個方法,按照后手機會多一個ATX小汽車圖標的軟件)
WiFi連接更方便一點,需要保持PC和手機使用的一個WIFI,查看手機連接WIFI的IP地址。
定位元素:
我們可以借助Android SDK自的uiautomatorviewer查看元素,這就要求手機必須以USB的方式連接PC,我前面使用的是WIFI連接進行連接的。所以,openatx提供了另外一個工具weditor 來解決這個問題。
GitHub地址:https://github.com/openatx/weditor
1、安裝:
pip install --pre --upgrade weditor
2、使用:
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