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 ...
随机推荐
- drupal CVE-2018-7600 复现
1.系统环境 Drupal 8.5 linux 主机 ruby 代码 2.原理说明 影响版本 Drupal 6.x,7.x,8.x 参考:CVE-2018-7600漏洞分析 3.利用 在Python2 ...
- centos上搭建git服务--2
在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.window ...
- php 通过curl上传图片
通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...
- 经验之谈:10位顶级PHP大师的开发原则
导读:在Web开发世界里,PHP是最流行的语言之一,从PHP里,你能够很容易的找到你所需的脚本,遗憾的是,很少人会去用“最佳做法”去写一个PHP程序.这里,我们向大家介绍PHP的10种最佳实践,当然, ...
- Polycarp and Letters(set首战!)
Description Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string s con ...
- 团队开发——软件需求分析报告(Hello World 团队)
一. 项目名称 超级迷宫 二. 设计背景 随着生活节奏加快,游戏更新速度的加快,游戏大同小异缺少新颖度,同时为了满足多游戏的结合,充实人们的生活,同时增加知识,有协作模式增进友谊和感情,在闲暇 ...
- 第八次作业(课堂实战)- 项目UML设计
本次作业博客 团队信息 队名:起床一起肝活队 原组长: 白晨曦(101) 原组员: 李麒 (123) 陈德斌(104) 何裕捷(214) 黄培鑫(217) 王焕仁(233) 林志华(128) 乐忠豪( ...
- Access连接数据源配置(新手必知)
今天要连接Access时发现win7 64位旗舰版控制面板中管理工具下的数据源(ODBC)配置竟然只有SQLServer的驱动,其他的都没有了,这可不好玩!上网百度了一番,有人也遇过这样的问题,我在此 ...
- SpringBoot与Swagger2整合
一.Swagger简介与优势 相信各位在公司写API文档数量应该不少,当然如果你还处在自己一个人开发前后台的年代,当我没说,如今为了前后台更好的对接,还为了以后交接方便,都有要求写API文档. Swa ...
- mac python install zlib not available
用brew install 3.4.4(python)时报 zipimport.ZipImportError: can't decompress data; zlib not available 的错 ...