1.UiDevice API 详细介绍
1.UiDevice按键与keycode使用
返回值 |
方法名 |
说明 |
boolean | pressBack() | 模拟短按返回back键 |
boolean | pressDPadCenter() | 模拟按轨迹球中点按键 |
boolean | pressSPadDown() | 模拟轨迹球向下按键 |
boolean | pressDPadLeft() | 模拟轨迹球向左按键 |
boolean |
pressDPadRight() | 模拟轨迹球向右按键 |
boolean | pressDPadUp() | 模拟轨迹球向上按键 |
boolean | pressDelete() | 模拟短按删除delete按键 |
boolean | pressEnter() | 模拟短按回车enter键 |
boolean | pressHome() | 模拟短按home键 |
boolean | pressKeyCode(int keyCode,int metaState) | 模拟短按键盘代码keycode |
boolean | pressKetCode(int keyCode) | 模拟短按键盘代码keycode |
boolean | pressMenu() | 模拟短按menu键 |
boolean | pressRecentApps() | 模拟短按最近使用程序 |
boolean | pressSearch() | 模拟短按搜索键 |
例如:
UiDevice.getInstance().pressHome();//点击Home键 UiDevice.getInstance().pressBack();//点击返回键
- keycode使用
meta_key未被激活 | 0 |
shift或caps_lock被激活时 | 1 |
alt被激活 | 2 |
alt,shift或caps_lock同时被激活时 | 3 |
例如:
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);//输入小写a UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);//输入大写a
2.获取坐标与坐标点击
手机屏幕坐标也就是手机屏幕从屏幕左上角到右下角的像素
坐标相关API:
返回值 |
方法名 |
说明 |
boolean | click(int x,int y) | 使用坐标点击屏幕 |
int |
getDisplayHeight() | 获取屏幕高度 |
point |
grtDisplaySizeDp() | 获取显示尺寸返回显示大小(设备独立像素) |
int |
getDisplayWidth() | 获得屏幕宽度 |
例如:
int w=UiDevice.getInstance().getDisplayWidth();//获取屏幕宽度 int h=UiDevice.getInstance().getDisplayHeight();//获取屏幕高度 UiDevice.getInstance().click(h/2, w/2);//点击屏幕中心点
4.拖拽与滑动
拖拽:将一个组件从一个坐标移动到另一个坐标处
滑动:从一个坐标点移动到另一个坐标点
步长:从一点滑动到另一点使用的时间(1步长=5毫秒,1秒=1000毫秒);步长越长,即两点之间移动越慢
返回值 |
方法名 |
说明 |
boolean | drag(int startX,int startY,int endX,int endY,int steps) | 拖动对象从一个坐标移动到另一个坐标 |
boolean | swipe(Point[] segments,int segmentSteps) | 在点阵列中滑动,5ms一步 |
boolean | swipe(int startX,int startY,intendX,int endY,int steps ) | 通过坐标滑动屏幕 |
例如:
//1.拖动对象从一个坐标移动到另一个坐标 public void testDrag(){ //[64,417][128,480] 找到坐标位置先 int startX, startY, endX, endY, steps; startX=(128-64)/2+64; startY=(480-417)/2+417; endX=startX=(128-64)/2+64; endY=startY-200; steps=30; UiDevice.getInstance().drag(startX, startY, endX, endY, steps); }
//2.通过坐标滑动屏幕 public void testSwipe(){ int h=UiDevice.getInstance().getDisplayHeight(); //获取屏幕高度 int w=UiDevice.getInstance().getDisplayWidth(); //获取屏幕宽度 UiDevice.getInstance().swipe(w-10, h/2, 10, h/2, 30); //从左往右进行滑动 }
//3.在点阵列中滑动(例子中为画了一个不规则矩形) public void testSwipe2(){ //227,318 746,335 784,814 221,840 矩形的四个定点,比如随意画手势,滚动,滑动等都会用到这个 Point p1=new Point(); Point p2=new Point(); Point p3=new Point(); Point p4=new Point(); p1.x=227;p1.y=318; p2.x=746;p1.y=335; p3.x=784;p1.y=814; p4.x=221;p1.y=840; Point[] pp={p1,p2,p3,p4}; UiDevice.getInstance().swipe(pp, 50); }
5.旋转屏幕(模拟器上无法进行模拟,只能真机使用)
旋转方向:0度,90度,180度,270度
返回值 | 方法名 | 描述 |
void | setOrientationLeft() | 通过禁用传感器,然后模拟设备向左旋转并且固定位置 |
void | setOrientationNatural() | 通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置 |
void | setOrientationRight() | 通过禁用传感器,然后模拟设备向又旋转并且固定位置 |
void | unfreezeRotation() | 重新启用传感器和允许物理旋转 |
boolean | isNaturalOrientation() | 检测设置是否处于默认旋转状态 |
int | getDisplayRotation() | 返回当前的显示旋转,0度,90度,180度,270度值分别为:0,1,2,3 |
void | freezeRotation() | 禁用传感器和冻结装置物理旋转在其当前旋转状态 |
例如:
public void testOrientation() throws RemoteException{ //1.模拟设备向左向右旋转 UiDevice.getInstance().setOrientationLeft(); //设备向左旋转
UiDevice.getInstance().setOrientationRight(); //设备向右旋转 //2.如果设备处于默认旋转状态,就向左旋转 if (UiDevice.getInstance().isNaturalOrientation()){ UiDevice.getInstance().setOrientationLeft(); } //3.变量a获取当前新鲜事旋转度数,然后进行相应if判断 int a=UiDevice.getInstance().getDisplayRotation(); if (a==Surface.ROTATION_0){ UiDevice.getInstance().setOrientationLeft(); } if (a==Surface.ROTATION_90){ UiDevice.getInstance().setOrientationLeft(); } if (a==Surface.ROTATION_180){ UiDevice.getInstance().setOrientationLeft(); } if (a==Surface.ROTATION_270){ UiDevice.getInstance().setOrientationLeft(); }
}
6.灭屏与唤醒屏幕
返回值 |
方法名 |
描述 |
void | wakeUp() | 模拟按电源键,如果屏幕是唤醒的没有任何作用 |
void | sleep() | 模拟按电源键,如果屏幕已经是关闭的则没有任何作用 |
boolean | isScreenOn() | 检查屏幕是否亮屏 |
例如:
public void testScreenOn() throws RemoteException{ //如果屏幕是亮屏,则关闭屏幕 if (UiDevice.getInstance().isScreenOn()){ UiDevice.getInstance().sleep(); //灭屏操作 } //如果屏幕是灭屏状态则转为亮屏状态 if (!UiDevice.getInstance().isScreenOn()){ UiDevice.getInstance().wakeUp(); //亮屏操作 } }
7.截图与等待空闲(需要导入java.io.File)
图片格式:PNG
空闲状态:窗口没有动作的时候称之为空闲状态
窗口更新事件:打开一个应用,打开的过程称之为窗口更新事件
①截图相关API:
返回值 |
方法名 |
描述 |
boolean | takeScreenshot(FilestorePath) | 把当前窗口截图并将其存储为png默认的1.0f的规格(原尺寸)和90%质量,参数为file类的文件路径 |
boolean | takeScreenshot(File storePath,float scale,int quality) | 把当前窗口截图为png格式图片,可以自定义缩放比例与原图质量 |
参数说明:
storePath:存放路径,必需为png格式
Scale:缩放比例,1.0为原图
Quality:图片压缩质量,范围为0-100
例如:
//把当前窗口截图并将其存储为png默认的1.0f的规格(原尺寸)和90%质量,参数为file类的文件路径为"sdcard/test1.png" public void testScreen(){ UiDevice.getInstance().takeScreenshot(new File("sdcard/test1.png")); }
②等待空闲相关API
返回值 |
方法名 |
描述 |
void | waitForIdle(long timeuot) | 自定义超时等待当前应用处于空闲状态 |
void | waitForIdle() | 等待当前应用处于空闲状态,默认等待10s |
boolean | waitForWindowUpdate(Steing packageName,long timeout) | 等待窗口内容更新时间的发生窗口更新事件:打开一个应用 |
例如:
public void testIdle(){ //[0,417][64,480]这个是浏览器坐标 UiDevice.getInstance().click(32, (480-417)/2+417);//点击浏览器 UiDevice.getInstance().waitForIdle(20000);//超时等待20s
}
8.获取包名&开启通知栏&快速设置&获取布局文件
返回值 | 方法名 | 描述 |
void | getCurrentPackageName() | 获取当前界面的包名 |
void | dumpWindowHierarchy(String fileName) | 获取当前界面的布局文件,保存在/data.local/tmp/目录下 |
boolean | openNotification() | 打开通知栏 |
boolean | openQuickSettings() | 打开快速设置 |
例如:
//1.获取并输出包名 public void testGet(){ String packageName=UiDevice.getInstance().getCurrentPackageName(); //获取包名 System.out.print("浏览器的包名为:"+packageName); //在控制台输出包名 UiDevice.getInstance().openNotification(); //打开通知栏 UiDevice.getInstance().openQuickSettings(); //打开快速设置栏 UiDevice.getInstance().dumpWindowHierarchy("n.xml");//获取当前界面的布局文件并命名为n //对于该文件可以使用命令"adb pull /data/local/tmp/n.xml F:\"命令将该文件导出来 }
9.实例演示(示例中的内容都为本文内容)
//步骤亮屏--解锁--单击浏览器--输入"www.baidu.com"--按回车键--旋转屏幕--截图 public void testDemo() throws RemoteException{
//检查屏幕是否亮屏状态,如果否则进行亮屏、解锁操作
if (!UiDevice.getInstance().isScreenOn()){
UiDevice.getInstance().wakeUp();
sleep(2000);
//161,352 解锁按钮坐标250,352为滑动到的位置
UiDevice.getInstance().swipe(161, 352, 161+100, 352, 30);
sleep(2000);
}
//如果是亮屏状态,则跳过亮屏、解锁操作进行后续操作 //先点一下Home键确保屏幕在主界面上
UiDevice.getInstance().pressHome();
sleep(2000);
//[0,417][64,480]浏览器的坐标
UiDevice.getInstance().click(64/2,(480-417)/2+417);
sleep(2000);
//68,49为浏览器输入网址窗口中的一个点
UiDevice.getInstance().click(68, 49);
sleep(2000);
//删除原先的默认网址
UiDevice.getInstance().pressDelete();
sleep(2000);
//输入网址"www.baidu.com"
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);//点为"PERIOD"
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_I);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_D);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_U);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);//点为"PERIOD"
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_O);
sleep(1000);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_M);
sleep(1000);
//然后点击回车键
UiDevice.getInstance().pressEnter();
sleep(5000);
//检测屏幕是否处于旋转状态,如果不是,就让屏幕向左旋转90度
if(!UiDevice.getInstance().isNaturalOrientation()){
UiDevice.getInstance().setOrientationLeft();
sleep(2000);
UiDevice.getInstance().takeScreenshot(new File("sdcard/screen1.png"));
}
//如果屏幕是处于旋转状态
int a=UiDevice.getInstance().getDisplayRotation();
System.out.print("当前屏幕旋转状态为:"+a);
UiDevice.getInstance().takeScreenshot(new File("sdcard/screen2.png")); }
1.UiDevice API 详细介绍的更多相关文章
- 7.Configurator API 详细介绍
一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...
- 6.UiWatcher API 详细介绍
Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...
- 5.UiScrollable API 详细介绍
Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...
- 2.UiSelector API 详细介绍
一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- 4.UiCollection API 详细介绍
一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...
- 3.UiObejct API 详细介绍
一.点击与长按 1.组件区域位置关系: Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标) 2.点击与长按相关API: 返回值 API 说明 ...
- 百度地图API详细介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- HTML5全屏(Fullscreen)API详细介绍
// 整个页面 onclick= launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...
随机推荐
- Liunx expect 基础
a script for study except #!/usr/bin/expect 声明文件内的语法使用 expect 的语法来执行. send send: 向进程发送字符串,用于模拟用户的输入. ...
- shell基础 -- 入门篇
shell 英文含义是“壳”,这是相对于内核来说的,shell 也确实就像是内核的壳,通常来说,所有对内核的访问都要经由 shell .同时,shell 还是一门功能强大的编程语言.shell 是 L ...
- Professional Books
Machine Learning: Pattern Recognition and Machine Learning(PRML) https://mqshen.gitbooks.io/p ...
- Buy the Ticket HDU 1133 卡特兰数应用+Java大数
Problem Description The "Harry Potter and the Goblet of Fire" will be on show in the next ...
- Scrum立会报告+燃尽图(十月二十一日总第十二次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- struts常量<constant>说明
1.<constant name="struts.action.extension" value="do" />这个时候访问action都必须加.d ...
- c# printDialog不显示问题
1.遇到问题:同样的代码,一个可以运行成功,另一个失败.百思不得其解情况下,监视下看每一个参数的属性是否一样,但参数太多,需要时间. 主要问题一般归结为:两个项目的属性编译设置不同,果然,一个x86正 ...
- Beta版冲刺前准备
[团队概要] 团队项目名:小葵日记 团队名:日不落战队 队员及角色: 队员 角色 备注 安琪 前端工程师 队长 佳莹 前端工程师 智慧 后端工程师 章鹏 后端工程师 语恳 UI设计师 炜坤 前端工程师 ...
- Scala快速入门-函数组合
compose&andThen 两个函数组装为一个函数,compose和andThen相反 def f(test: String):String = { "f(" + te ...
- html超链接返回上一页面
超链实现返回刚刚访问的网页: <a href="#" onclick="javascript:history.back(-1);"></a&g ...