今天直接進入正文,給你們推薦一款超級好用的ui自動化工具 uiautomator2javascript
我將從如下幾個方面,向你們介紹 uiautormator2,但願該項目的做者看到個人文章以後,能夠請我喝杯奶茶。
css
一、簡要介紹
java二、實現原理
python三、安裝步驟
nginx四、使用簡介git
五、優勢缺點程序員
項目地址:https://github.com/openatx/uiautomator2
github
start:2kweb
一看名字,你們可能會以爲uiautormator2是Uiautomator的升級版本,其實並非。
面試
你們都知道,UiAutomator是Google提供的用來作安卓自動化測試的一個Java庫,功能強大,但支持Java語言,並不支持python。
然而,當今測試行業,最流行的編程語言,仍是python。ui自動化,怎麼能不支持python呢?
因此 uiautormator2 應運而生。
uiautomator2 是一個開源的自動化測試工具,提供了一系列的python API,方便測試
人員用python編寫自動化測試腳本。
其餘與 uiautomator2 相關的工具
weditor:
簡介:抓取ui控件的工具,並可進行簡單調試
項目地址:https://github.com/openatx/weditor
atxserver2:
簡介:機型管理平臺,能夠實現多臺手機羣控
項目地址:https://github.com/openatx/atxserver2
ATX-Test:
簡介:UI自動化框架,PO模型,方便管理ui自動化項目代碼
項目地址:https://github.com/pengchenglin/ATX-Test
原理是在手機上運行了一個http rpc服務,將Uiautomator中的功能開放出來,而後再將這些http接口封裝成Python庫。
原理圖:
如圖所示,uiautomator2主要分爲兩個部分,python客戶端,移動設備
python端: 運行腳本,並向移動設備發送HTTP請求
移動設備:移動設備上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,並轉化成uiautomator2的代碼。
整個過程
在移動設備上安裝
atx-agent
(守護進程), 隨後atx-agent
啓動uiautomator2服務(默認7912端口)進行監聽在PC上編寫測試腳本並執行(至關於發送HTTP請求到移動設備的server端)
移動設備經過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操做
安裝前置步驟
python(推薦使用python3)
adb環境
Android手機(iOS好像也支持了,具體能夠看做者的 github 項目)
安裝步驟:
(1)pip 安裝 uiautomator2
pip install uiautomator2
(2)pip 安裝 weditor
pip install weditor
(3)手機連電腦,並安裝atx-agent
python -m uiautomator2 init
只需這三個步驟,便可完成安裝。
使用起來也特別方便。
(1)首先,啓動 weditor,鏈接手機,並抓取元素控件
python -m weditor
命令輸入以後,會彈出一個瀏覽器web窗口,輸入手機 DeviceId 便可鏈接weditor。
點擊左側的手機截屏,便可選擇控件,並會生成控件元素代碼。
(2)編寫 python 自動化測試 腳本
鏈接設備
經過手機 IP 地址鏈接
import uiautomator2 as u2
d = u2.connect('10.0.0.1')
print(d.info)
也能夠經過手機 DeviceId 鏈接
import uiautomator2 as u2
d = u2.connect('123456f')
print(d.info)
安裝待測apk
d.app_install('http://some-domain.com/some.apk')
選擇待測的app
d.app_start("com.example.hello_world")
使用封裝好的API,觸發事件,操控手機
# Selector 元素選擇器d(text="Settings")
# 點擊文案是「Settings」的元素d(text="Settings").click()
# 點擊屏幕的(x,y)點座標d.click(x, y)
# 選擇元素並滑動d(text="Settings").swipe("right")d(text="Settings").swipe("left", steps=10)d(text="Settings").swipe("up", steps=20) # 1 steps is about 5ms, so 20 steps is about 0.1sd(text="Settings").swipe("down", steps=20)
# 滑動屏幕d.swipe(sx, sy, ex, ey)d.swipe(sx, sy, ex, ey, 0.5) # swipe for 0.5s(default)
# 等待「Settings」元素出現以後再點擊,設置超時時間是3秒d(text="Settings").wait(timeout=3.0).click()
元素選擇器(Selector)支持如下方式獲取控件
text、resourceId、ClassName、Xpath等
也支持多種方式聯合定位元素,提升準確性
d(text="Settings", resourceId="com.xxx.yyy")
支持的操做事件
click、Double click、Long click、Swipe、Drag、scroll 等等,
更多詳情能夠查看 github 的說明文檔
uiautomator2還有一個比較好的功能是監聽控件。原理是輪詢查找控件,而且會有超時時間,當捕獲到相關控件時,就能夠採起自定義的處理。
# 經常使用寫法,註冊匿名監控d.watcher.when("安裝").click()
# 註冊名爲ANR的監控,當出現ANR和Force Close時,點擊Force Closed.watcher("ANR").when(xpath="ANR").when("Force Close").click()
# 其餘回調例子d.watcher.when("搶紅包").press("back")d.watcher.when("//*[@text = 'Out of memory']").call(lambda d: d.shell('am force-stop com.im.qq'))
監聽控件經常用於,跳過APP的彈窗廣告。
uiautomator2還可讓手機彈出toast
d.toast.show("Hello world")d.toast.show("Hello world", 1.0) # show for 1.0s, default 1.0s
使用方法就簡單介紹到這,感興趣的同窗能夠到做者的github項目上去了解更多內容。
沒有對比就沒有傷害。如今你們都潛意識把Appium當成是Ui自動化的行業標杆,那咱們就來一塊兒對比一下,uiautomator2和Appium。
不知道你們怎麼看,對於一個pythoner來講,uiautomator2顯然更好用一些。
可是,uiautomator2也是有一些缺陷的。
無線鏈接手機的時候,穩定性不太好,常常會掉線。
監聽控件,d.watchers.watched 置換監聽狀態會無效,不過查看文檔,做者是已經把這塊功能移除了。
以上,就是本期帶來的推薦,請記住本期的主角:uiautomator2
長按識別下方二維碼關注公衆號
關注個人微信公衆號【測試開發Guide】,
回覆「java」:便可得到java經典學習資料(我花200元買的),帶你輕鬆入門java編程。
回覆「python」:免費獲取「python入門」高分好書,業餘時間偷偷變牛逼。
回覆「面試」:24個常見的測試面試題,你必定不想錯過。
若是這篇文章對你有幫助,記得點個「在看」,鼓勵一下我。我會繼續給你們推送測試開發相關的優質文章。
本文分享自微信公衆號 - 程序員臻叔(TestDevGuide)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。