uiautomator2使⽤教程
⼀、要求
python 3.6+
android 4.4+
⼆、介绍
uiautomator2 是⼀个可以使⽤Python对Android设备进⾏UI⾃动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意⼀个APP的任意⼀个控件属性,并对其进⾏任意操作。
三、地址
GitHub地址:
or
四、安装
1、安装uiautomator2
pip install --pre uiautomator2
pip install pillow
2、初始化
部署相关的守护进程。
电脑连接上⼀个⼿机或多个⼿机, 确保adb已经添加到环境变量中,执⾏下⾯的命令会⾃动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch
python -m uiautomator2 init
安装完成,设备上会多⼀个uiautomator的应⽤。
配置⼿机设备参数:
有两种⽅法,⼀种是通过WIFI,另⼀种是通过USB数据线将⼿机链接电脑。
WiFi连接更⽅便⼀点,需要保持PC和⼿机使⽤的⼀个WIFI,查看⼿机连接WIFI的IP地址。
3、测试
import uiautomator2 as u2
d = u2.connect('127.0.0.1::6555')
print(d.info)
打印结果:
{'currentPackageName': 'com.android.launcher', 'displayHeight': 1280, 'displayRotation': 1, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 720, 'productName': 'DUK-AL20', 'screenOn': True, 'sdkInt': 23, 'naturalOrientation': False}
五、元素定位
1、查看app控件
我们可以借助Android SDK⾃的uiautomatorviewer查看元素,这就要求⼿机必须以USB的⽅式连接PC,我前⾯使⽤的是WIFI连接进⾏连接的。所以,openatx提供了另外⼀个⼯具weditor 来解决这个问题。
(1)、安装:
pip install --pre --upgrade weditor
(2)、使⽤
python3 -m weditor
(3)、⼯具打开
默认会通过浏览器打开页⾯:atx.openease/
(4)⼯具的操作步骤
选择android、输⼊⼿机或者模拟器的ip+端⼝,点击connect
dump hierarchy是⽤来刷新页⾯的
⿏标点击想要的元素,就可以查看他们的控件了
2、主要语法
(1)启动app
d.app_start("com.addcn.android.house591")
(2)关闭app
cls.d.app_stop("com.addcn.android.house591")
(3)ResourceId定位
cls.d(resourceId="com.addcn.android.house591:id/ad_banner").click()
(4)Text定位
d(text="精选").click()
(5)Description定位
d(description="..").click()
(6)ClassName定位
d(className="android.widget.TextView").click()
(7)xpath定位
d.xpath("//*[@content-desc='分享']").click()
(8)
3、其他操作
(1)#组默认元素等待超时(秒)
cls.d.wait_timeout = 20.0 #默认20
(2)元素拖拽
(3)开关点击
d(A).left(B), selects B on the left side of A.
d(A).right(B), selects B on the right side of A.
d(A).up(B), selects B above A.
d(A).down(B), selects B under A.
例如:
#选择“Wi-Fi”右侧的“开关”
d(text="Wi‑Fi").right(className="android.widget.Switch").click()
(4)获取/统计某个相同条件的数⽬
d(text="Add new").count
或者
len(d(text="Add new"))
得知数⽬之后,我们可以通过索引去定位
d(text="Add new")[0]
numpy教程 pdf
d(text="Add new")[1]
也可以遍历
for view in d(text="Add new"):
view.info
(5)截图
#截取屏幕截图并保存到计算机上的⽂件中,要求Android> = 4.2。
d.screenshot( “ hom
e.jpg ”) # get PIL.Image格式化图像。当然,你需要⾸先安装pillow
image = d.screenshot() # default format =“pillow”
image.save( “ home.jpg ”)#或home.png。⽬前,只有PNG和JPG⽀持
#得到OpenCV的格式图像。当然,你需要先安装numpy和cv2
import cv2
image = d.screenshot( format = ' opencv') cv2.imwrite( ' home.jpg '图像)#获取原始JPEG数据 imagebin = d.screenshot(格式= '原始')打开( “ some.jpg ”, “ WB ”).WRITE(imagebin)
(6)⼿势操作
1、单击
d( text = “ Settings ”).click()
2、长按
d( text = “ Settings ”).long_click()
3、将对象拖向另⼀个点或另⼀个UI对象
#笔记:拖不能⽤于为Android <4.3。
#将UI对象拖动到屏幕点(x,y),0.5秒后
d( text = “设置”).drag_to(x,y, duration = 0.5)
#将UI对象拖动到另⼀个(中⼼位置) UI对象,在0.25秒
d( text = “设置”).drag_to( text = “ Clock ”, duration = 0.25)
4、在屏幕上滑动
# swipe from (sx, sy) to (ex, ey)
d.swipe(sx, sy, ex, ey)
# swipe from (sx, sy) to (ex, ey) with 10 steps
d.swipe(sx, sy, ex, ey, steps=10)
5、在屏幕上拖拽
# drag from (sx, sy) to (ex, ey)
d.drag(sx, sy, ex, ey)
# drag from (sx, sy) to (ex, ey) with 10 steps
d.drag(sx, sy, ex, ey, steps=10)
(7)获取对象信息和状态
1、
d(text="Settings").exists
#如果存在则为True,否则为假
ists(text="Settings") # 进⼀步使⽤ d(text="Settings").exists(timeout=3)
# 等待设置出现在3S,相同.wait(3)
2、检索特定UI对象的信息
d(text="Settings").info
3、获取/设置/清除可编辑字段的⽂本(例如,EditText⼩部件)
d(text = “ Settings ”).get_text() # get widget text
d(text = “ Settings ”).set_text(“ My text ... ”)#设置⽂本
d(text = “ Settings ”).clear_text()#清除⽂字、
(8)系统常⽤按键
# press home key
d.press.home()
# press back key
d.press.back()
# the normal way to press back key
d.press("back")----亲测可⽤
# press keycode 0x07('0') with META ALT(0x02) on
d.press(0x07, 0x02)
home #⼿机Home键
back #⼿机返回键
left #对应键盘上的向右键<-
right #对应键盘上的向右键->
up #对应键盘上的向上键
down #对应键盘上的向下键
center #选中?
menu #菜单
search #查?
enter #对应键盘上的Enter键
delete(or del) #对应键盘上的DEL键⽤于删除recent(recent apps) #任务切换
volume_up #声⾳向上调整
volume_down #声⾳向下调整
volume_mute #静⾳按键
camera #拍照
power #电源键
六、使⽤经验
1、使⽤前初始化
python -m uiautomator2 init
2、打开⼯具
python3 -m weditor
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论