Android UI 自动化测试之UiDevice

UiDevice介绍
UiDevice代表设备状态,为单例模式
具体功能:
(1)获取设备信息,屏幕分辨率,旋转状态,亮灭屏状态等
(2)操作:按键,坐标操作,滑动,拖拽,灭屏唤醒屏幕,截图等
(3)监听器功能

//容易造成空指针异常
//getUiDevice().pressMenu();
//getUiDevice().pressHome();
// 一般使用下列方法
UiDevice.getInstance().pressMenu();
UiDevice.getInstance().pressHome();

按键与 KEYCODE使用
手机常见按键
(1) HOME HOME 键
(2)MENU 菜单键
(3)BACK 返回键
(4)VOLUME_UP 音量加
(5)VOLUME_DOWN 音量减
(6)RecentApps 最近使用 App
(7)POWER 电源键
(8)Dpad 上下左右键
(9)….
按键 API说明

//按键 API
//返回
UiDevice.getInstance().pressBack();
//轨迹球中点按键
UiDevice.getInstance().pressDPadCenter();
//轨迹球上按键
UiDevice.getInstance().pressDPadUp();
//轨迹球下按键
UiDevice.getInstance().pressDPadDown();
//轨迹球左按键
UiDevice.getInstance().pressDPadLeft();
//轨迹球右按键
UiDevice.getInstance().pressDPadRight();
//删除
UiDevice.getInstance().pressDelete();
//回车
UiDevice.getInstance().pressEnter();
//Home 键
UiDevice.getInstance().pressHome();
//键盘代码 keycode
//UiDevice.getInstance(int keyCode,int metaState);
//UiDevice.getInstance(int keyCode);
//Menu 键盘
UiDevice.getInstance().pressMenu();
//最近使用 app
UiDevice.getInstance().pressRecentApps();
//搜索
UiDevice.getInstance().pressSearch();
KEYCODE 键盘映射码
(1)keyEvent 按键事件
//小写
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);
//大写
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);

3.获取坐标与坐标点击

(1)方法名:click(int x,int y)使用坐标点击屏幕
(2)方法名:getDisplayHeight() 获取屏幕高度
(3)方法名:getDisplayWidth() 获取屏幕宽度

4.拖拽与滑动
拖拽:将一个组件从一个坐标点移动到另一个坐标处
滑动:从一个坐标顶移动到另一个坐标点
步长:从一点滑动到另一点使用的时间(1步长是5毫秒)

(1)方法名:drag(int starX,int startY,int endX int endY,int steps)拖动对象从一个坐标拖动到另一个坐标
(2)方法名:swipe(Poiint[] segments,int segmentSteps) 在点阵列中滑动,5ms 一步
(3)方法名:swipe(int starX,int startY,int endX int endY,int steps)通过坐标滑动屏幕

5.旋转屏幕
旋转方向;4个方向,分别为0度,90度,180度,270度
重力感应器
固定位置与物理旋转

(1)方法名: setOrientationLeft() 通过禁用传感器,然后模拟设备向左转,并且固定位置
(2)方法名: setOrientationNatural() 通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置
(3)方法名: setOrientationRight() 通过禁用传感器,然后模拟设备向右转,并且固定位置
(4)方法名: sunfreezeRoation() 重新启用传感器和允许物理旋转
(5)方法名: isNaturalOrientation() 检测设置是否处于默认旋转状态
(6)方法名: getDisplayRotation() 返回当前的显示旋转,0度,90度,180度,270度,值分别为0、1、2、3
(7)方法名:freezeRoation() 禁用传感器和冻结装置屋里旋转在其当前旋转状态

6.灭屏与唤醒屏幕
灭屏:按电源键将屏幕熄灭
唤醒屏幕:在灭屏状态下安电源键点亮屏幕

(1)方法名: wakeUp() 模拟按电源键,如果屏幕是唤醒的没有任何作用
(2)方法名: sleep() 模拟按电源键,如果屏幕已经是关闭的则没有任何作用
(3)方法名:isScreenOn() 检查屏幕是否亮屏

7.截图与等待空闲

截图

(1)方法名:takeScreenshot(File storePath) 把当前窗口截图并将其存储为 png 默认1.0f 规模(原尺寸文件)和90%质量,参数为 file 类的文件路径
(2)takeScreenshot(File storePath,float scale,int quality) 把当前窗口截图为 png 格式图片,可以自定义缩放比例与图片质量
参数说明:
storePath:存储路径,必须为 png 格式
Scale: 缩放比例,1.0为原图
Quality: 图片压缩质量,范围为0-100

等待空闲

(1)waitForIdle(long timeout)自定义超时等待当前应用处于空闲状态
(2)waitForIdle()等待当前应用处于空闲状态,默认等待10s
(3)waitForWindowUpdate(String packageName,long timeout) 等待窗口内容更新事件的发生

8.获取包名&;开启通知栏&;快速设置&;获取布局文件
包名,通知栏,快速设置,布局文件

(1)getCurrentPackageName() 获取当前界面的包名
(2)dumpWindowHierachy(String fileName)获取当前界面布局文件,保存在/ data/local/tmp 目录下
(3) openNotification() 打开通知栏
(4)openQuickSettings 打开快速设置