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实例调用以下方法即可实现点击按键操作。

 

 

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

 

2、KEYCODE 键盘映射码

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

(2)META Key

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

<2>辅助功能键的状态

 

 激活状态metaState
baseMETA_key未被激活0
capsSHIFT或CAPS_LOCK被激活时1
fnALT被激活2
caps_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()打开快速设置

--------------------- 本文来自 evaFT 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yiwaChen/article/details/52566427?utm_source=copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值