Python-uiautomator使⽤说明⽂档
本⽂是基于xiaocong uiautomator项⽬⽂件通过机器翻译和个⼈理解翻译,如有错误还望指出。
原本地址:
这个Python库是基于Android⾃带的uiautomator测试框架的⼀个python封包。适⽤于Android 4.1以上版本,需要通过adb连接Android设备。
from uiautomator import device as d
d . ()
d(text="Clock").click()
安装
pip install uiautomator
前置条件
安装 Android的SDK,设置Android_home环境以正确的路径。
启动 adb 并且通过usb数据线将电脑与Android设备相连接。
设置Android设备,在开发者选项中允许未知来源应⽤安装。
导⼊uiautomator
如果仅有⼀台设备或在 Android_serial 环境变量中配置。
from uiautomator import device as d
通过设备的设备ID来确定设备对象:
from uiautomator import Device
d=Device('014E05DE0F02000E')
通过其他计算机的端⼝及连接运⾏adb服务
虽然 adb ⽀持sdk 4.3的 -a选项 ,但是现在它有问题。在所有⾮本地服务上启动adb监听服务使⽤
adb -a -P 5037 fork-server server &
from uiautomator import Device
d=Device('014E05DE0F02000E', adb_server_host='192.168.1.68', adb_server_port=5037)
注:在下⾯的例⼦中,我们使⽤d代表Android设备对象。
基本API⽤法
此部分通过⼀些简单的⽰例显⽰设备的正常操作。
检索设备信息
d.info
以下是我这⾥得到的信息:
{u'displayRotation': 0,
u'displaySizeDpY': 640,
u'displaySizeDpX': 360,
nodeselector
u'currentPackageName': u'com.android.launcher',
u'productName': u'takju',
u'displayWidth': 720,
u'sdkInt': 18,
u'displayHeight': 1184,
u'naturalOrientation': True
设备的关键时间操作
打开/关闭屏幕
#在屏幕上打开
()
#关闭屏幕
d.screen.off()
替代⽅法是:
#唤醒设备
d.wakeup()
#睡眠设备,⼀样关闭屏幕。
d.sleep()
按硬/软键
#按home键
d.press.home()
#按返回键
d.press.back()
#正常的⽅式按返回键
d.press( “back”)
#按下键码0×07(‘0’)与ALT (0X02)
d.press(0x07,0X02)
⽬前下列按键⽀持上述⽅法
home
back
left
right
home
back
left
right
up
down
center
menu
search
enter
delete(or del)
recent(recent apps)
volume_up
volume_down
volume_mute
camera
power
down
center
menu
search
enter
delete(or del)
recent(recent apps)
volume_up
volume_down
volume_mute
camera
power
你可以到所有的键值定义在Android KeyEvent连接如下: 在设备上模拟⼿势交互
滑动拖动#点击屏幕
# click (x, y) on screen
d.click(x, y)
#长按屏幕
# long click (x, y) on screen
d.long_click(x, y)
# swipe from (sx, sy) to (ex, ey)
#从sx,sy坐标滑动⾄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)
# 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)
设备屏幕的事件
有以下⼏种属性:
natural 或者 n 代替
left 或者 l 代替
right 或者 r 代替
upsidedown或 u(不能设定)
#获取orientation(⽅向),可能是上述中的任意⼀种
orientation = d.orientation
#设置定向和冻结旋转。
#说明:"upsidedown"不能⽤于Android 4.3 以前的版本
锁定/解除旋转
#锁定旋转
d.freeze rotation()
#解除旋转锁定
d.freeze_rotation(False)
屏幕截图
获取屏幕截图并且将其存本机地址中,命名为home.png,不能被⽤于Android 4.2以前的版本
d.screenshot("hom
e.png")
将屏幕结构储存(就是使⽤uiautomatorviewer看到的那个结构,以xml格式保存)#将当前屏幕结构保存在本机并命名为"l"
d.dump("l")
#或者将存储值作为结果返回
xml=d.dump()
打开通知消息栏或快速设置
#打开通知消息栏,不能⽤于Android 4.3以前的版本
#打开快速设置栏,不能⽤于Android 4.3以前的版本
d.open.quick_settings()
等待空闲或者窗⼝刷新
# 等待当前窗⼝空闲
d.wait.idle()
#等待直到窗⼝发⽣刷新事件
d.wait.update()
监视器
You can register watcher to perform some actions when a selector can not find a match. 当选择器⽆法到匹配时,您可以注册观察器来执⾏⼀些操作。
注册监视器
当⼀个选择器不到匹配时,uiautomator 会运⾏全部已经注册的观察者
条件匹配时点击⽬标
d.watcher("AUTO_FC_WHEN_ANR").when(text="ANR").when(text="Wait") \
.click(text="Force Close")
# d.watcher(name) ## creates a new named watcher.
(创建⼀个新的监视器,并将其命名为“name”)
#  .when(condition)  ## the UiSelector condition of the watcher.
(为监视器添加添加⼀个Uiselector条件)
#  .click(target)  ## perform click action on the target UiSelector.
(执⾏对⽬标Uiselector点击动作)
条件匹配时按下按键
d.watcher("AUTO_FC_WHEN_ANR").when(text="ANR").when(text="Wait") \
.press.back.home()
# Alternative way to define it as below
(可以将其定义为以下⽅法)
d.watcher("AUTO_FC_WHEN_ANR").when(text="ANR").when(text="Wait") \
.press("back", "home")
# d.watcher(name) ## creates a new named watcher.
(创建⼀个监视器)
#  .when(condition)  ## the UiSelector condition of the watcher.
(为监视器添加⼀个Uiselector条件)
#  .press.<keyname>.....<keyname>.()  ## press keys one by one in sequence.
(按顺序依次按下key)
#  Alternative way defining key sequence is press(<keybname>, ..., <keyname>)(定义另⼀种键值序列的⽅法是‘press(<keybname>, ..., <keyname>)’)
检查监视器是否触发
⼀个监视器触发意味着这个监视器所有条件都匹配并且监视器运⾏。
d.watcher("watcher_name").triggered
# true in case of the specified watcher triggered, else false
(监视器被触发为‘真’,反之则为‘假’)
删除监视器命名
# remove the watcher
(删除监视器)
d.watcher("watcher_name").remove()
列出所有的监视器
d.watchers
# a list of all registered wachers' names
(⼀个已注册的监视器名称列表)
检查是否有监视器被触发
iggered
#  true in case of any watcher triggered
(在任何监视器被触发的情况下)
重置所有已触发的监视器