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 ...
随机推荐
- Python的sys.argv使用说明
刚开始使用这个参数的时候,很不明白其含义.网上搜索很多都是贴的官网上面的一则实例,说看懂,就明白.可是,我看不懂.现在在回头看这个参数使用,并不是很麻烦. 举几个小例子就明白了. 创建一个脚本,内容如 ...
- kNN--近邻算法
kNN--近邻算法 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性. 在机器学习中常用于分类. 数学内容: ...
- python错误记录
在主函数里调用其他函数时形参顺序要一致 错例如下:
- Centos上搭建git服务
1.安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum ...
- Scrum立会报告+燃尽图(Beta阶段第六次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2388 项目地址:https://coding.net/u/wuyy694 ...
- 欢迎来怼——第四次Scrum会议
一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/16 17:15~17:40,总计25min.地点:东北师范 ...
- java分页算法
int totalPageNum = (totalRecord + pageSize - 1) / pageSize;
- selenium Object Page 设计模式理解及实现!
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...
- Node.js系列——(3)连接DB
背景 node.js,有人称之为运行在服务器端的JavaScript.以往我们使用JavaScript时,都是依赖后端查询数据库并返回数据,而JavaScript只需要展示即可.问题来了,就不能绕开后 ...
- Java设计模式 - 单例模式 (懒汉方式和饿汉方式)
概念: Java中单例模式是一种常见的设计模式,单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的写法有好几种,这 ...