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 ...
随机推荐
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- Python基础灬文件常用操作
文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...
- 微软职位内部推荐-Senior Software Lead-Index Gen
微软近期Open的职位: Position: Senior Software Development Lead Bing Index Generation team is hiring! As one ...
- 华为ensp使用
网络学习目录 AR是() Auto:自动线 copper:双绞线缆 serial:串行线 pos: 光纤 E1: ATM: CTL: STA: PC: MCS ...
- python socket详解
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- Python:字符串中引用外部变量的3种方法
方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...
- centos7环境下mysql安装
1.去官网下载合适的yum源安装包 https://dev.mysql.com/downloads/repo/yum/ 2.yum 本地安装 命令:yum localinstall mysql57-c ...
- Alpha冲刺——第八天
Alpha第八天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- HDU 5207 Greatest Greatest Common Divisor
题目链接: hdu:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=153598 bc(中文):http://bestco ...
- HTTP vs HTTPS
参考博文:HTTP与HTTPS的区别 HTTP与HTTPS的区别 一.HTTP和HTTPS的基本概念和区别 HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(T ...