目录

设备连接

健康守护进程

调试模式

获取设备信息

安装手机应用包

启动应用程序

关闭应用程序

卸载手机应用包

等待应用启动

获取包信息

屏幕操作

文件上传和下载

键盘操作 

driver全局设置

UiAutomator中的超时设置(隐藏方法)

方法或属性设置


设备连接

import uiautomator2 as u2
from pprint import pprint

# 设备连接:USB连接方式
# d = u2.connect('d7eac884')     # 或u2.connect_usb('d7eac884'),这个方法是当前只有一个设备时使用
# 设备连接:WIFI连接方式
d = u2.connect('192.168.1.27')  # 或u2.connect_adb_wifi('192.168.1.27'),ip可带端口号如5555

健康守护进程

d.healthcheck   # 检查并维持设备端守护进程处于运行状态
d.service('uiautomator').stop()   # 停用UiAutomator的守护程序

安卓上的UiAutomator是独享的,一旦一个服务使用了它,其他服务就不能去碰。因此appium, macaca, uiautomatorviewer.bat 只要用了UiAutomator服务,都会冲突。只有使用完之后,停止uiautomator service,才能让其他服务使用。

调试模式

d.debug = True   # 开启调试模式,值为true为开启,为false为关闭

获取设备信息

def device():
    print('___________' * 4, '设备序列号:', '___________' * 4, '\n', d.serial)  # 如果是无线连接输出为连接的设备ip,如果是usb连接输出为设备序列号
    print('___________' * 4, '获取WIFI IP:', '___________' * 4, '\n', d.wlan_ip)
    print('___________' * 4, '设备基本信息(driver信息):', '___________' * 4, '\n')
    pprint(d.info)  # info获取设备基本信息
    print('___________' * 4, '设备详细信息:', '___________' * 4, '\n')
    pprint(d.device_info)  # device_info获取设备详细信息,包括电池,CPU,内存等所有信息
    print('___________' * 4, '窗口大小:', '___________' * 4, '\n')
    x, y = d.window_size()  # 返回的结果是一个元组(横坐标像素大小,纵坐标大小)
    print('x:', x, 'y:', y)
    print('___________' * 4, '当前应用程序:', '___________' * 4, '\n',d.app_current())

device()

安装手机应用包

安装手机应用包,括号里的参数可以是本机地址,也可以是网络url地址

d.app_install('C:/Users/Administrator/Desktop/浏览器下载/hanyucidianv3.5_downcc.com.apk')  # 本地软件安装包
d.app_install('http://a.xzfile.com//apk4/hanyucidianv3.5_downcc.com.apk')  # 网络软件安装包

启动应用程序

d.app_start('org.hisand.zidian.zhs.pro')  # 参数为包名

关闭应用程序

1、退出指定app程序并结束进程

d.app_stop('org.hisand.zidian.zhs.pro')  # 退出指定app程序并结束进程

2、关闭所有应用程序

d.app_stop_all()   # 关闭所有应用程序

3、关闭除了指定应用的其他应用,excludes参数为一个字典,里面是不进行结束进程的包名

d.app_stop_all(excludes=['org.hisand.zidian.zhs.pro'])  # 停止所有应用程序,除了com.examples.demo,excludes参数为一个字典,里面是不进行结束进程的包名

4、清空App数据,相当于重新安装的软件包 

d.app_clear('org.hisand.zidian.zhs.pro')   # 清空App数据,相当于重新安装的软件包

卸载手机应用包

d.app_uninstall('org.hisand.zidian.zhs.pro')

等待应用启动

参数:包名、超时时间、front(等待直到应用程序是当前应用程序,默认为false,表示只要后台有这个应用的进程就会返回PID(true表示不支持后台运行,false表示后台运行即返回PID)),如果没有应用进程返回的PID值为0

applist = d.app_wait('com.cctv.yangshipin.app.androidp',10)
print(applist)   # 返回PID

获取包信息

def apk():
    print('___________' * 4, '获取指定应用包的信息:', '___________' * 4, '\n')
    pprint(d.app_info('org.hisand.zidian.zhs.pro'))
    img_apk = d.app_icon('org.hisand.zidian.zhs.pro')  # 获取指定应用的图标
    img_apk.save('./img/apklogo.png')  # 保存应用图标到指定文件目录下

apk()

屏幕操作

单击,滑动,拖动操作支持百分比位置值 

d.screen_on()    # 打开屏幕
d.screen_off()    # 关闭屏幕
print(d.info.get('screenOn'))   # 获取屏幕开启状态(需要Android>=4.4),返回布尔值,true为开启状态,false为关闭状态
d.unlock()    # 解锁屏幕,没有密码进入到手机桌面,有密码的时候进入到开机解锁界面
d.click(0.536, 0.651)   # 点击屏幕
d.double_click(0.536, 0.651)    # 双击屏幕,参数(x,y,duration),第三个参数为单击之间间隔时间,默认为0.1秒
d.long_click(0.259, 0.853)  # 长按一下屏幕
d.long_click(0.259, 0.853,1)  # 长按1秒(默认)
d.swipe(0.136, 0.651, 0.907, 0.706)   # 指定坐标滑动滑动屏幕,参数(x1,y1,x2,y2,duration,steps)
d(scrollable=True).scroll.vert.backward()    # 向上滑动,下拉操作,backward()的参数为distance,滑动的距离
d(scrollable=True).scroll(steps=30)
d(scrollable=True).scroll.toEnd(60)
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().gesture((0.736, 0.651),(0.507, 0.806),(0.259, 0.653),(0.729, 0.638),steps=100)   # 双指从(a,b),(c,d)滑动(a1,b1),(c1,d1),步长100
d().pinch_in(percent=80, steps=50)   # 从屏幕外侧向中心滑动,percent为左右起始位置占两边的比例
d().pinch_out(percent=10, steps=100)    # 从屏幕中心向外侧滑动,percent为左右起始位置占两边的比例
d.drag(0.207, 0.306, 0.659, 0.653, 1)   # 在屏幕上拖拽

文件上传和下载

推送文件:上传文件到手机设备

d.push("./Img/1.jpg", "/sdcard/贾宝玉/")   # 将文件推送到设备,如果导出的目标设备位置为文件夹,文件夹前后都要加/,否则报错,sdcard为手机的根目录,必须加
d.push("./Img/1.jpg", "/sdcard/贾宝玉/test.jpg")   # 将文件推送到设备并重命名文件

# 使用读写文件的方式导出文件到设备
with open("./Img/1.jpg", 'rb') as f:
    d.push(f, "/sdcard/贾宝玉/test.jpg")

下载文件到本机

# 从设备中拉出一个文件,如果在设备上找不到文件,报错:FileNotFoundError
d.pull('/sdcard/测试/城里的月光.mp3','城里的月光_许美静.mp3')   

键盘操作 

def press_key():
    d.press("back")  # 点击back键
    d.press("home")  # 点击home键
    d.press("left")  # 点击左键
    d.press("right")  # 点击右键
    d.press("up")  # 点击上键
    d.press("down")  # 点击下键
    d.press("center")  # 点击中间
    d.press("menu")  # 点击menu按键,菜单键
    d.press("search")  # 点击搜索按键
    d.press("enter")  # 点击enter键,键盘上的Enter键
    d.press("delete")  # 点击删除按键,delete(or del)对应键盘上的DEL键 用于删除)
    d.press("recent")  # 点击近期活动按键,(recent apps)
    d.press("volume_up")  # 音量+
    d.press("volume_down")  # 音量-
    d.press("volume_mute")  # 静音
    d.press("camera")  # 相机拍照按钮
    d.press("power")  # 电源键

press_key()

更多键盘操作:KeyEvent  |  Android Developers

driver全局设置

print(d.settings)
'''   默认设置的输出结果:
{'fallback_to_blank_screenshot': False,
 'operation_delay': (0, 0),   # 操作前延迟时间和操作后延迟时间
 'operation_delay_methods': ['click', 'swipe'],   # 延迟生效的方法
 'wait_timeout': 20.0,   # 默认等待时间
 'xpath_debug': False}   # xpath日志
'''

d.settings['wait_timeout'],d.settings['operation_delay'] = 30.0,(5,5)   # 修改全局设置

print(d.settings)
'''  修改后的输出结果:
{'fallback_to_blank_screenshot': False,
 'operation_delay': (5, 5),
 'operation_delay_methods': ['click', 'swipe'],
 'wait_timeout': 30.0,
 'xpath_debug': False}
'''

UiAutomator中的超时设置(隐藏方法)

# 为了防止客户端程序响应超时,waitForIdleTimeout和waitForSelectorTimeout目前已改为0

Configurator  |  Android Developers

pprint(d.jsonrpc.getConfigurator())
'''  输出默认设置结果:
{'actionAcknowledgmentTimeout': 500,
 'keyInjectionDelay': 0,
 'scrollAcknowledgmentTimeout': 200,
 'waitForIdleTimeout': 0,
 'waitForSelectorTimeout': 0}
'''

d.jsonrpc.setConfigurator({'waitForIdleTimeout':200})   # 修改UiAutomator中的超时设置

pprint(d.jsonrpc.getConfigurator())
'''  输出修改设置后的结果:
{'actionAcknowledgmentTimeout': 500,
 'keyInjectionDelay': 0,
 'scrollAcknowledgmentTimeout': 200,
 'waitForIdleTimeout': 200,
 'waitForSelectorTimeout': 0}
'''

方法或属性设置

http默认请求超时时间

d.HTTP_TIMEOUT = 60    # 默认值为60s

当设备掉线时,等待设备在线时长

d.WAIT_FOR_DEVICE_TIMEOUT = 70    # 仅当TMQ=true时有效,支持通过环境变量 WAIT_FOR_DEVICE_TIMEOUT 设置

元素查找默认等待时间

d.implicitly_wait(10.0)   # 找不到元素时,等待10后再报异常
Logo

一站式 AI 云服务平台

更多推荐