UiAutomator笔记之UiDevice API(二)

来源:互联网 发布:linux创建属性目录命令 编辑:程序博客网 时间:2024/05/24 00:47
一、UiDevice类简介

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

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

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

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

二、按键与KEYCODE使用


1、点击按键 相关API

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

返回值方法名描述booleanpressBack()模拟短按返回back键booleanpressDPadCenter()模拟按轨迹球中点按键booleanpressDPadDown()模拟轨迹球向下按键booleanpressDPadLeft()模拟轨迹球向左按键booleanpressDPadRight()模拟轨迹球向右按键booleanpressDPadUp()模拟轨迹球向上按键booleanpressDelete()模拟短按删除delete按键booleanpressEnter()模拟短按回车键booleanpressHome()模拟短按HOME键booleanpressKeyCode(int keyCode, int metaState)模拟短按键盘代码keycodebooleanpressKeyCode(int keyCode)模拟短按键盘代码keycodebooleanpressMenu()模拟短按menu键booleanpressRecentApps()模拟短按最近使用程序booleanpressSearch()模拟短按搜索键


2、KEYCODE 键盘映射码

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

(2)META Key

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

<2>辅助功能键的状态

 激活状态metaStatebaseMETA_key未被激活0capsSHIFT或CAPS_LOCK被激活时1fnALT被激活2caps_fnALT,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实例调用以下方法即可实现获取坐标和点击操作。
返回值方法名描述booleanclick(int x, int y)使用坐标点击屏幕intgetDisplayHeight()获取屏幕高度PointgetDisplaySizeDp()获取显示尺寸返回显示大小(设备独立像素);屏幕旋转返回的显示大小调整intgetDisplayWidth()

获得屏幕宽


3、Uiautomator Viewer

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

(2)启用方式

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

方式二、Eclipse/DDMS/Devices/UiautomatorViewer 


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

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



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

返回值方法名描述booleandrag(int startX, int startY, int endX, int endY, int steps)拖动对象从一个坐标拖动到另一个坐标,step表示拖拽过程使用的时间(ms)booleanswipe(Point[] segments, int segmentSteps)在点阵列中滑动,5ms一步booleanswipe(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

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


六、灭屏与唤醒

灭屏与唤醒相关API

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


七、截图与等待空闲


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

2、截图相关API

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

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

3、等待空闲相关API

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


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


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

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



0 0
原创粉丝点击