目前 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☆, 这是对作者付出的一种肯定, 反正我是给了
来源: https://www.cnblogs.com/semishigure/p/11376690.html