一、初始化
安装包
pip install --pre uiautomator2
pip install pillow
初始化
python -m uiautomator2 init
可视化工具
pip install --pre --upgrade weditor
开启可视化工具
python -m weditor
查看pid
netstat -ano
连接mumu
adb connect 127.0.0.1:7555
查看 需要执行初始化
adb devices
二、UIAutomator2一些操作
# 连接手机的方式:
1.通过WiFi:ip根据情况自己修改
>d=u2.connect_wifi("ip")
2.通过usb:
>d=u2.connect_usb()
# 安装应用
d.app_install(' url ')
# 跳过弹窗,禁止弹窗
d.disable_popups() # 自动跳过弹出窗口
d.disable_popups(False)# 禁用自动跳过弹出窗口
d.info # 获取基本信息
d.window_size() # # 获取窗口大小
# 打开/关闭屏幕
d.screen_on() # 打开
d.screen_off() # 关闭
# 获取当前屏幕状态
d.info.get('screenOn')
# 解锁屏幕
d.unlock()
# 点击屏幕
d.click(x, y)
# 双击
d.double_click(x,y)
# 长按一下屏幕
d.long_click(x,y)
d.long_click(x,y) # 长按1秒(默认)
# 滑动
d.swipe(x, y, x, y)
# 解锁9宫格,points不抬起
d.swipe_points([(0.228, 0.525),(0.005, 0.525),(0.766, 0.525),(0.5, 0.677),(0.228, 0.828),(0.497, 0.828),(0.761, 0.828)],0.05)
# 按键操作
d.press("home")
d.press("back")
d.press(x, y)
# 向上滑动
d(scrollable=True).scroll.vert.backward()
# 竖直滑动到结尾
d(scrollable=True).scroll.toEnd(60)
# 向下滑动
d(scrollable=True).scroll(steps=30)
# 竖直滑动到开头
d(scrollable=True).scroll.toBeginning(steps=60)
# 水平向右滑动
d(scrollable=True).scroll.horiz.forward(steps=60)
# 水平向右滑动,直到最右边
d(scrollable=True).scroll.horiz.toEnd(steps=50, max_swipes=500)
# 水平向左滑动
d(scrollable=True).scroll.horiz.backward(steps=50)
# 水平向左滑动,直到最左边
d(scrollable=True).scroll.horiz.toBeginning(steps=100, max_swipes=1000)
# 拖动
d(text="Settings").drag_to(x, y, duration=0.5)
# 拖动到指定位置,1s内完成:
d(text="Settings").drag_to(text="text", duration=1)
# 双指从(a,b),(c,d)滑动(a1,b1),(c1,d1),步长100:
d().gesture((a,b),(c,d), (a1,b1),(c1,d1),steps=100)
# 从屏幕外侧向中心滑动,percent为左右起始位置占两边的比例:
d().pinch_out(percent=33, steps=100)
# 从屏幕中心向外侧滑动,percent为左右起始位置占两边的比例:
d().pinch_out(percent=33, steps=100)
三、Python_UIAutomator2屏幕操作行为
# 1.点击特定对象中心位置:
d(text="Settings").click()
# 2.等待对象显示并点击,等待最多10s:
d(text="Settings").click(timeout=10)
# 3.当10s内对象出现就点击,默认0s:
clicked = d(text='Skip').click_exists(timeout=10.0)
# 4.点击并轮询对象直到消失,其中maxretry为最多点击次数,默认10;interval为轮询时间间隔,默认1:
d(text="Skip").click_gone(maxretry=10, interval=1.0)
# 5.长按指定的对象,duration为按住时间,timeout为超时时间:
d(text="Settings").long_click(duration=10,timeout=10)
# 6.拖动指定对象到x,y位置,0.5s完成:
d(text="Settings").drag_to(x, y, duration=0.5)
# 7.拖动指定对象到另一个对象位置,0.5s内完成:
d(text="Settings").drag_to(text="Clock", duration=0.5)
# 8.双指从(a,b),(c,d)滑动(a1,b1),(c1,d1),步长100:
d().gesture((a,b),(c,d), a1,b1),(c1,d1),steps=100)
# 9.从屏幕外侧向中心滑动,percent为左右起始位置占两边的比例:
d().pinch_out(percent=33, steps=100)
# 10.从屏幕中心向外侧滑动,percent为左右起始位置占两边的比例:
d().pinch_out(percent=33, steps=100)
# 11.等待对象:
d(text='相机').wait(10)
# 12.等待对象消失,最多等待10s:
d(text='相机').wait_gone(timeout=10)
# 13.滚动:
d(scrollable=True).scroll(steps=10) # a.向上滚动
d(scrollable=True).scroll.vert.backward() # b.向下滑动
d(scrollable=True).scroll.horiz.forward(steps=50) # c.水平向右滚动
d(scrollable=True).scroll.horiz.backward(steps=50) # d.水平向左滚动
d(scrollable=True).scroll.horiz.toBeginning(steps=100, max_swipes=1000) # e.水平滑动到最左边
d(scrollable=True).scroll.horiz.toEnd(steps=100, max_swipes=1000) # f.水平滑动到最右边
d(scrollable=True).scroll.toEnd() # g.竖直滑动到结尾
d(scrollable=True).scroll.toBeginning(steps=50) # h.竖直滑动到开头
d(scrollable=True).scroll.to(text ='测试') # i.滑动到指定位置(测试)
四、命令行
init: 为设备安装所需要的程序
install: 安装apk,apk通过URL给出
python -m uiautomator2 install $device_ip https://example.org/some.apk
clear-cache: 清空缓存
python -m uiautomator2 clear-cache
app-stop-all:停止所有应用
python -m uiautomator2 app-stop-all $device_ip
screenshot: 截图
python -m uiautomator2 screenshot $device_ip screenshot.jpg
healthcheck: 健康检查
python -m uiautomator2 healthcheck $device_ip
五、app信息
#1.设备信息
'''
print(http://d.info)
#2.隐示等待
d.implicitly_wait(3)
#3.安装包 只支持远程apk路径
d.app_install("http://baidu.com/demo.apk")
#4.启动app 直接填写app 包名
d.app_start("com.example.demo")
#5.停止app 停止应用,直接杀死应用
d.app_stop("com.example.demo")
#停止app,清空app的应用数据
d.app_clear("com.example.demo")
#6.停止所有app
d.app_stop_all()
#停止所有app 除了 com.example.demo
d.app_stop_all(excludes=["com.example.demo"])
#7.保存应用图标
img=d.app_icon("com.example.demo")
img.save("icon.png")
#8.push文件到设备中
d.push("本地文件","设备的路径")
#push文件并修改文件的权限
d.push("本地文件","设备的路径",mode=777)
#9.pull文件到本地文件中
d.pull("设备的文件路径","本地文件的路径")
#10.获取屏幕分辨率
d.window_size()
#11.获取当前的页面和包名
d.current_app()
#12.等待activity出现
d.wait_activity(".demoActivity",timeout=10)
#13.获取设备serial 编号
print(d.serial)
#14.获取wlan ip
print(d.wlan_ip)
#15.获取设备信息
print(d.device_info)