使用前需导入:
implementation 'androidx.test.uiautomator:uiautomator:2.2.0'
implementation 'androidx.test:monitor:1.5.0'
一、UiDevice介绍
1.UiDevice代表设备状态,为单例模式。UiDevice的功能包括:
获取设备信息:屏幕分辨率,旋转状态,亮灭屏状态等
操作:案件,坐标操作,滑动,拖拽,灭屏唤醒屏幕,截图等
监听器功能
2.UiDevice写法有三种,推荐第三种方式,前二种可能会引起某些问题而导致无法运行:
2.1:UiDevice.getInstance();
2.2:getUiDevice();
2.3:Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
UiDevice uiDevice = UiDevice.getInstance(instrumentation);
二、API使用
1. 按键相关的API
pressBack():模拟短按返回back键
pressEnter():模拟短按回车键
pressDelete():模拟短按删除delete按键
pressHome():模拟短按HOME键
PressMenu():模拟短按menu键
pressRecentApps():模拟断案最近使用程序
pressSearch():模拟短按搜索键
pressKeyCode(int keycode,int metaState):模拟短按键盘代码keycode
pressKeyCode(int keyCode):模拟短按键盘代码keycode
KEYCODE,键盘映射码,具体见链接:KeyCode
KeyEvent,为按键事件,具体见链接:Kevevent
metaState为META key的状态。META key是辅助功能键,即ALT、SHIFT、CAPS_LOCK。
metaState有四种状态,分别如下:
2.获取坐标与坐标点击相关API
click(int x,int y):使用坐标点击屏幕
getDisplayHeight():返回值为int,获取屏幕高度
getDisplayWidth():返回值为int,获取屏幕宽度
getDisplaySizeDp():返回值为Point,获取显示尺寸返回大小(设备独立像素,屏幕旋转返回的显示大小调整)DP:设备独立像素,例如,320像素显示到640像素上要拉升一倍
3.拖拽与滑动相关API
drag(int startX,int startY,int endX,int endY,int steps):拖动对象从一个坐标拖拽到另一个坐标
swipe(Point[] segments,int segmentSteps):在点阵列中滑动,5ms一步
swipe(int startX,int startY,int endX,int endY,int steps):通过坐标滑动屏幕
4.旋转屏幕API
setOrinentationLeft():通过禁用传感器,然后模拟设备向左转,并且固定位置
setOrientationNatural():通过禁用传感器,然后模拟设备转到其自然默认方向,并且固定位置
setOrienttationRight():通过禁用传感器,然后模拟设备向右转,并且固定位置
unfreezeRotation():重新启用传感器和允许物理旋转
isNaturalOrientation():检测设置是否处于默认旋转状态
getDisplayRotation():返回值为int,返回当前的显示旋转,0度,90度,180度,270度,值分别为:0、1、2、3.
freezeRotation():禁用传感器和冻结装置物理旋转在其当前旋转状态
5.灭屏与唤醒屏幕API
wakeUp():模拟按电源键,如果屏幕是唤醒的没有任何作用
sleep():模拟按电源键,如果屏幕已经是关闭的则没有任何作用
isScreenOn():检查屏幕是否亮屏
6.截图与等待空闲API
takeScreenshot(File storePath):把当前窗口截图并将其存储为png默认1.0f的规模(原尺寸)和90%质量,参数为file类的文件路径
takeScreenshot(File storePath,float scale,int quality):把当前窗口截图为png格式图片
参数:
storePath:存储路径,必须为png格式
Scale:缩放比例,1.0为原图
Quality:图片压缩质量,范围为0-100
waitForIdle(lonog timeout):自定义超时等待当前应用处于空闲状态
waitForIdle():等待当前应用处于空闲状态,默认等待10s
waitForWindowUpdate(String packageName,long timeout):等待窗口内容更新事件的发生
7.获取包名&开启通知栏&快速设置&获取布局文件相关API
getCurrentPackageName():获取当前界面的包名
dumpWindowHierarchy(String fileName):获取当前界面的布局文件,保存在/data/local/tmp/目录下
openNotification():打开通知栏
openQuickSettings():打开快速设置