UiAutomator笔记之UiDevice API

一、UiDevice类简介

1、UiDevice代表设备状态。如屏幕的大小、旋转方向、按压各种按键等。

2、UiDevice为单例模式,可有2种方式获取其实例。

(1)UiDevice.getInstance();--->推荐
(2)getUiDevice.pressHome();---->在类A中封装方法,方法被类B调用的时候会出现空指针异常

3、主要功能
(1)获取设备信息:屏幕分辨率、选装状态、亮灭屏......
(2)操作:按键、坐标操作、滑动、拖拽、截图......
(3)监听器功能

二、按键与KEYCODE使用


1、点击按键 相关API

UiDevice实例调用以下方法即可实现点击按键操作。

返回值 方法名 描述
boolean pressBack() 模拟短按返回back键
boolean pressDPadCenter() 模拟按轨迹球中点按键
boolean pressDPadDown() 模拟轨迹球向下按键
boolean pressDPadLeft() 模拟轨迹球向左按键
boolean pressDPadRight() 模拟轨迹球向右按键
boolean pressDPadUp() 模拟轨迹球向上按键
boolean pressDelete() 模拟短按删除delete按键
boolean pressEnter() 模拟短按回车键
boolean pressHome() 模拟短按HOME键
boolean pressKeyCode(int keyCode, int metaState) 模拟短按键盘代码keycode
boolean pressKeyCode(int keyCode) 模拟短按键盘代码keycode
boolean pressMenu() 模拟短按menu键
boolean pressRecentApps() 模拟短按最近使用程序
boolean pressSearch() 模拟短按搜索键


2、KEYCODE 键盘映射码

(1)KeyEvent:按键事件,每个键盘映射码都保存在keyEvent的常量中。

(2)META Key

<1>辅助功能键: ALT、SHIFT、CAPS_LOCK

<2>辅助功能键的状态

  激活状态 metaState
base META_key未被激活 0
caps SHIFT或CAPS_LOCK被激活时 1
fn ALT被激活 2
caps_fn ALT,SHIFT或CAPS_LOCK同时被激活时 3

<3>示例

UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);//点击输入小写字母a
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);//点击输入大写字母A

三、获取坐标与坐标点击


 1、坐标相关知识

(1)手机屏幕坐标:从左上角(0,0)开始到右下角(X,Y)
(2)dp:设备独立像素,例如,320像素显示到640像素上要拉伸一倍
(3)Point:代表一个点(x,y)

2、坐标相关API

UiDevice实例调用以下方法即可实现获取坐标和点击操作。
返回值 方法名 描述
boolean click(int x, int y) 使用坐标点击屏幕
int getDisplayHeight() 获取屏幕高度
Point getDisplaySizeDp() 获取显示尺寸返回显示大小(设备独立像素);屏幕旋转返回的显示大小调整
int getDisplayWidth()

获得屏幕宽


3、Uiautomator Viewer

(1)功能:获取屏幕快照,并通过快照获取到控件的属性。

(2)启用方式

方式一、启动路径:adt/sdk/tools/UiautomatorViewer 

方式二、Eclipse/DDMS/Devices/UiautomatorViewer 


(3)屏幕快照参数之控件坐标

 通过UiautomatorViewer获取屏幕快照,选中目标控件,通过Node Detail / bounds[左上角顶点坐标][右下角顶点坐标] 可获取到控件的位置。

UiAutomator笔记之UiDevice API_第1张图片

4、示例

(1)

UiDevice.getInstance().click(399,355);//点击[399,355]坐标点

(2)
int h = UiDevice.getInstance().getDisplayHeight();
int w = UiDevice.getInstance().getDisplayWidth();
UiDevice.getInstance().click(w/2,h/2); //点击屏幕的中心点

(3)

UiObject object = new UiObject(new UiSelector.resoutceId("com.andr....控件Id"));//根据ID获取控件

Rect r = object.getBounds();//获取控件对应的矩形区域相关属性
r.left; //矩形左上角顶点X坐标
r.top; //矩形左上角顶点Y坐标
r.right; //矩形右下角顶点X坐标
r.bottom; //矩形右下角顶点Y坐标
r.centerX(); //矩形的中心点X坐标
r.centerY(); //矩形的中心点Y坐标

四、拖拽与滑动

1、相关概念
(1)拖拽:将一个组件从一个坐标移动到另一个坐标处。
(2)滑动:手指从一个坐标点移动到另一个坐标点。
(3)步长:从一点滑动到另一点使用的时间,步长越短说明移动越快。

2、拖拽与滑动相关API

返回值 方法名 描述
boolean drag(int startX, int startY, int endX, int endY, int steps) 拖动对象从一个坐标拖动到另一个坐标,step表示拖拽过程使用的时间(ms)
boolean swipe(Point[] segments, int segmentSteps) 在点阵列中滑动,5ms一步
boolean swipe(int startX, int startY, int endX, int endY, int steps) 通过坐标滑动屏幕


3、示例:按照一个矩形的路径滑动
 Point p1 = new Point();
 Point p2 = new Point();
 Point p3 = new Point(); 
 Point p4 = new Point();
 p1.x =277;
 p1.y =318; 
 ......
//设置四个顶点的横纵坐标
 Point[] pp = {p1,p2,p3,p4};
 UiDevice.getInstance().swipe(pp,50); //每50毫秒走一步(从一个点滑动到下一个点)

五、旋转屏幕

1 、旋转屏幕相关知识
(1)旋转方向:4个方向,分别为 0度,90度,180度,270度
(2)重力感应器
(3)固定位置与物理旋转
固定位置:屏幕的方向固定在0、90、180、270度;
物理旋转:与重力感应器连接,关闭了物理旋转就是关闭了重力感应器。

2、屏幕旋转相关API

返回值 方法名 描述
void setOrientationLeft() 通过禁用传感器,然后模拟设备向左转,并且固定位置
void setOrientationNatural() 通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置
void setOrientationRight() 通过禁用传感器,然后模拟设备向右转,并且固定位置
void unfreezeRotation() 重新启用传感器和允许物理旋转
boolean isNaturalOrientation() 检测设置是否处于默认旋转状态
int getDisplayRotation() 返回当前的显示旋转,0度,90度,180度,270度值分别为:0(Surface.ROTATION_0)、1(Surface.ROTATION_90)、2(类推)、3(类推)
void freezeRotation() 禁用传感器和冻结装置物理旋转在其当前旋转状态


六、灭屏与唤醒

灭屏与唤醒相关API

返回值 方法名 描述
void wakeUp() 模拟按电源键,如果屏幕是唤醒的没有任何作用
void sleep() 模拟按电源键,如果屏幕已经是关闭的则没有任何作用
boolean isScreenOn() 检查屏幕是否亮屏


七、截图与等待空闲


1 、截图与等待空闲相关知识
(1)图片缩放比例:如缩小1/2,即将100*100px的图片长宽都缩小为原来的1/2,50*50px。
(2)图片质量:一般是指图片的大小,质量越高图片越大。
(3)File 类:文件或者文件夹。
(4)图片格式 :截图的格式都是PNG。
(5)空闲状态:窗口没有更新或界面无动作。
(6)窗口更新事件。

2、截图相关API

返回值 方法名 描述
boolean takeScreenshot(File storePath) 把当前窗口截图并将其存储为png默认1.0f的规模(原尺寸)和90%质量,参数为file类的文件路径。
boolean takeScreenshot(File storePath, float scale, int quality) 把当前窗口截图为png格式图片,可以自定义缩放比例与图片质量。

参数说明:
storePath:存储路径,必须为png格式。
scale:缩放比例,1.0为原图。
quality:图片压缩质量,范围为0-100。

3、等待空闲相关API

返回值 方法名 描述
void waitForIdle(long timeout) 自定义超时等待当前应用处于空闲状态
void waitForIdle() 等待当前应用处于空闲状态,默认等待10s;即10s后还不处于空闲状态则报错,程序在该句代码处中断;10s内程序处于空闲状态,则该句代码执行完毕。
boolean waitForWindowUpdate(String packageName, long timeout) 等待窗口内容更新事件的发生


八、获取包名&开启通知栏&快速设置&获取布局文件


1、相关知识
包名:应用的唯一标识。
通知栏:从手机顶部下滑,出现的下拉界面即通知栏。
快速设置:即通知栏中的快速设置控件,快速设置界面可设置网络、屏幕亮度、飞行模式等。

2、相关API
返回值 方法名 描述
void getCurrentPackageName() 获取当前界面的包名,即目前处于手机前台的应用的包名
void dumpWindowHierarchy(String fileName) 获取当前界面的布局文件,fileName给布局文件命名如“layout.xml”,保存在/data/local/tmp/目录下
boolean openNotification() 打开通知栏
boolean openQuickSettings() 打开快速设置

你可能感兴趣的:(Andorid)