ATX agent+UIautomation2 自動化測試介紹


純搬運貼,內容幾乎來源於作者的幾篇介紹文章,這里做了整合

目前ATX+UIautomator2 處於自動化界的浪口風尖,現在有幸終於有時間對ATX進行了粗淺的了解

為什么要用ATX

ATX+UIautomator2的優勢:

1.速度吊打appnium,群里面的人這樣說的

    • 運行速度快,比Appium運行速度快了好多。(用戶表示不知道ATX為什么快,PS(作者): 我其實也不知道appium為什么這么慢)
    • 部署和使用比較簡單 (當初就是朝着這個方向開發的)
      最開始筆者在部署appium的時候,花了一整天的時間,最終還是部署好了。但后來還是放棄了,因為想到要部署這么多台機器,還不如自己開發一個測試框架來的方便(當時的需求也比較簡單)

2.即使是id,text相同的控件也能隨意指定哪一個進行點擊操

d(resourceId="com.tencent.wecarnews:id/radio_list_item_frequency")[0].get_text()/click() d(resourceId="com.tencent.wecarnews:id/radio_list_item_frequency", instance=1).get_text()

3.能獲取到控件的安卓原生屬性

d(text="Settings").info

{
u’contentDescription’: u’’,
u’checked’: False,
u’scrollable’: False,
u’text’: u’Settings’,
u’packageName’: u’com.android.launcher’,
u’selected’: False,
u’enabled’: True,
u’bounds’: {u’top’: 385,u’right’: 360,u’bottom’: 585, u’left’: 200},
u’className’: u’android.widget.TextView’,
u’focused’: False,
u’focusable’: True,
u’clickable’: True,
u’chileCount’: 0,
u’longClickable’: True,
u’visibleBounds’: {u’top’: 385,u’right’: 360, u’bottom’: 585,u’left’: 200},
u’checkable’: False
}

4.能拿到toast信息

a = d.toast.get_message(5.0, 10.0, "default message") print(a)

5.處理彈窗,還是顯性等待

d.watcher("INSTALL").when(text="安裝").click() d.watcher("NEXT").when(text="下一步").click() d.watchers.watched = True

 

優勢還有很多,目前總結到這里

 

UIautomator安裝

pip install -U --pre uiautomator2

初始化

python -m uiautomator2 init

一切准備就緒后,就可以進行預約的自動化之旅了!

 

這里貼一段官方的demo

# coding: utf-8
import unittest import uiautomator2 as u2 import time import uiautomator2.ext.htmlreport as htmlreport class TestCloudMusic(unittest.TestCase): @classmethod def setUpClass(cls): cls.u = u2.connect_usb() cls.u.healthcheck() # 解鎖屏幕並啟動uiautomator服務
        hrp = htmlreport.HTMLReport(cls.u, 'report') hrp.patch_click() # cls.u.disable_popups(True) # 允許自動處理彈出框
        cls.u.make_toast("測試開始", 3) @classmethod def tearDownClass(cls): cls.u.make_toast("測試結束", 3) cls.u.app_stop_all() cls.u.service( "uiautomator").stop()  # 停止uiautomator守護程序,允許其他測試框架如 appium 運行

    def setUp(self): self.d = self.u.session("com.netease.cloudmusic")  # restart app
        time.sleep(5)  # 等待首頁廣告結束

    def tearDown(self): pass

    def testPrivateFM(self):  # 私人FM
        self.d(text="私人FM").click() def testRecommendEveryday(self):  # 每日推薦
        self.d(text="每日推薦").click() if __name__ == '__main__': unittest.main()

 

一些簡單的使用方法介紹:

定位方式

ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()

Text定位 d(text="秒表").click()

Description定位 d(description="..").click()

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)

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

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

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

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

 

如果感興趣,更多詳細的api和最新的信息請見項目 https://github.com/openatx/uiautomator2

如果喜歡,請給作者一個start☆,這是對作者付出的一種肯定,反正我是給了


免責聲明!

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



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