Uiautomator2 常用API
纯手动输出建议收藏点赞一键三连
github参考链接:
- https://github.com/openatx/uiautomator2/tree/master/uiautomator2
文章目录
-
安装atx-agent
- python -m uiautomator2 init
-
win下使用weditor
- python -m weditor
-
通过地址进入页面http://192.168.124.133:17310/
-
adb_wifi 是通过adb tcpip模式
-
API
d(resourceId="元素定位表达式") d.implicitly_wait(等待时长) #单位是s d.app_stop('指定的包名') d.app_clear('指定的包名')
标准APi
等待相关
# wait until app running
pid = d.app_wait("com.example.android") # 等待应用运行, return pid(int)
if not pid:
print("com.example.android is not running")
else:
print("com.example.android pid is %d" % pid)
d.app_wait("com.example.android", front=True) # 等待应用前台运行
d.app_wait("com.example.android", timeout=20.0) # 最长等待时间20s(默认)
上传下载文件
- 上传到设备
# push to a folder
d.push("foo.txt", "/sdcard/")
# push and rename
d.push("foo.txt", "/sdcard/bar.txt")
# push fileobj
with open("foo.txt", 'rb') as f:
d.push(f, "/sdcard/")
# push and change file access mode
d.push("foo.sh", "/data/local/tmp/", mode=0o755)
- 从设备下载文件
d.pull("/sdcard/tmp.txt", "tmp.txt")
# FileNotFoundError will raise if the file is not found on the device
d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")
检索设备信息
检查并维持设备端守护进程处于运行状态
d.healthcheck()
获取屏幕大小
print(d.window_size())
# device upright output example: (1080, 1920)
# device horizontal output example: (1920, 1080)
获取当前设备信息
print(d.app_current())
# Output example 1: {'activity': '.Client', 'package': 'com.netease.example', 'pid': 23710}
# Output example 2: {'activity': '.Client', 'package': 'com.netease.example'}
# Output example 3: {'activity': None, 'package': None}
等待活动
d.wait_activity(".ApiDemos", timeout=10) # default timeout 10.0 seconds
# Output: true of false
获取设备序列号
print(d.serial)
# output example: 74aAEDR428Z9
获取网络ip
print(d.wlan_ip)
# output example: 10.0.0.1
获取详细设备信息
print(d.device_info)
## {'udid': '3578298f-b4:0b:44:e6:1f:90-OD103',
'version': '7.1.1',
'serial': '3578298f',
'brand': 'SMARTISAN',
'model': 'OD103',
'hwaddr': 'b4:0b:44:e6:1f:90',
'port': 7912,
'sdk': 25,
'agentVersion': 'dev',
'display': {'width': 1080, 'height': 1920},
'battery': {'acPowered': False,
'usbPowered': False,
'wirelessPowered': False,
'status': 3,
'health': 0,
'present': True,
'level': 99,
'scale': 100,
'voltage': 4316,
'temperature': 272,
'technology': 'Li-ion'},
'memory': {'total': 3690280, 'around': '4 GB'},
'cpu': {'cores': 8, 'hardware': 'Qualcomm Technologies, Inc MSM8953Pro'},
'presenceChangedAt': '0001-01-01T00:00:00Z',
'usingBeganAt': '0001-01-01T00:00:00Z'}
键盘事件
息屏亮屏
d.screen_on() # turn on the screen
d.screen_off() # turn off the screen
获取当前屏幕状态
d.info.get('screenOn') # require Android >= 4.4
按硬/软键
d.press("home") # press the home key, with key name
d.press("back") # press the back key, with key name
d.press(0x07, 0x02) # press keycode 0x07('0') with META ALT(0x02)
home
back
left
right
up
down
center
menu
search
enter
delete ( or del)
recent (recent apps)
volume_up
volume_down
volume_mute
camera
power
解锁屏幕
d.unlock()
# This is equivalent to
# 1. launch activity: com.github.uiautomator.ACTION_IDENTIFY
# 2. press the "home" key
点击交互事件
点击
# 单击
d.click(x, y)
# 双击
d.double_click(x, y)
d.double_click(x, y, 0.1) # default duration between two click is 0.1s
# 长按
d.long_click(x, y)
d.long_click(x, y, 0.5) # long click 0.5s (default)
滑动事件
# 滑动
d.swipe(sx, sy, ex, ey)
d.swipe(sx, sy, ex, ey, 0.5) # swipe for 0.5s(default)
# 滑动扩展功能
d.swipe_ext("right") # 手指右滑,4选1 "left", "right", "up", "down"
d.swipe_ext("right", scale=0.9) # 默认0.9, 滑动距离为屏幕宽度的90%
d.swipe_ext("right", box=(0, 0, 100, 100)) # 在 (0,0) -> (100, 100) 这个区域做滑动
# 实践发现上滑或下滑的时候,从中点开始滑动成功率会高一些
d.swipe_ext("up", scale=0.8) # 代码会vkk
# 还可以使用Direction作为参数
from uiautomator2 import Direction
d.swipe_ext(Direction.FORWARD) # 页面下翻, 等价于 d.swipe_ext("up"), 只是更好理解
d.swipe_ext(Direction.BACKWARD) # 页面上翻
d.swipe_ext(Direction.HORIZ_FORWARD) # 页面水平右翻
d.swipe_ext(Direction.HORIZ_BACKWARD) # 页面水平左翻
拖动
d.drag(sx, sy, ex, ey)
d.drag(sx, sy, ex, ey, 0.5) # swipe for 0.5s(default)
定位滑动
# swipe from point(x0, y0) to point(x1, y1) then