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"));}
转载于:https://www.cnblogs.com/JianXu/p/5178196.html
1.UiDevice API 详细介绍相关推荐
- 2.UiSelector API 详细介绍
一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例:public void testDemo2() throws UiObjectNotFoundException{UiSe ...
- 5.UiScrollable API 详细介绍
Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...
- 4.UiCollection API 详细介绍
一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...
- 腾讯微博android sdk,腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- 腾讯微博android sdk,腾讯微博java(android)sdk时间线api详细介绍
本文主要介绍腾讯微博android sdk中时间线有关的20个接口,以及正常获取及翻页的使用的示例代码及部分特例 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdk ...
- html游戏全屏代码,HTML5全屏(Fullscreen)API详细介绍
在越来越真实的web应用程序中,JavaScript也变得越来越给力. FullScreen API 是一个新的JavaScript API,简单而又强大. FullScreen 让我们可以通过编程的 ...
- html谷歌全屏像素,HTML5全屏(Fullscreen)API详细介绍
在越来越真实的web应用程序中,JavaScript也变得越来越给力. FullScreen API 是一个新的JavaScript API,简单而又强大. FullScreen 让我们可以通过编程的 ...
- html5 自动设置全屏,HTML5全屏(Fullscreen)API详细介绍
在越来越真实的web应用程序中,JavaScript也变得越来越给力. FullScreen API 是一个新的JavaScript API,简单而又强大. FullScreen 让我们可以通过编程的 ...
- 机器学习算法——详细介绍 集成学习,以及什么是Bagging、随机森林、Boosting、XGBoost
目录 一.集成学习算法简介 1.什么是集成学习 2.机器学习的两个核心任务 3.集成学习中boosting和Bagging 4.小结 二.Bagging和随机森林 1.Bagging集成原理 2.随机 ...
- arcgis api 4.13 —— Layer详细介绍
arcgis api 4.13 Layer详细介绍 近日,esri官方更新了arcgis api4.12版本,接下来我将就此API做一个大概的梳理.本篇文章是关于图层(layer)的一个大概.主要分为 ...
最新文章
- 【转】ubuntu下修改文件夹权限
- android 环形时间显示_Android圆形进度条颜色的设置
- [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘
- Spring Framework总览面试题精选
- electron sqlite3_electron集成sqlite3,win10上折腾了2天
- c语言发展过程,C语言发展史
- NOIP 2005 过河
- MediaBuffer使用要点
- 数据库左连接和右连接有什么区别!
- 如何制作统计报表(盈帆报表: efreprt.com)
- 微信公众平台模版消息
- C++语言入门3(定义整数与整数输入)
- 相机溯源之传统方法(PRNU提取)
- 【Python】批量修改照片日期
- Node学习HTTP模块(HTTP 服务器与客户端)
- gerrit删除Group和Project
- Photoshop文字之——制作斑驳铁锈文字
- 国内最大BT下载站(BTChina.net)关闭声明
- 数据结构之树和二叉树
- 公路检测测试软件,公路水运工程试验检测考试题库APP 4.5.9 安卓版
热门文章
- linux系统中find怎么用,Linux系统中查找命令find的使用方法(一)
- PAT (Basic Level) Practice1012 数字分类
- python 与栈 入门
- 【装饰者模式】Decorator Pattern
- 书籍:Learn Web Development with Python - 2018.pdf
- 他山之石,可以攻玉--从伪代码的角度来理解排序算法
- shell 数组详解
- 咏南中间件D7客户端演示
- PHP原生实现,校验微信公众号||小程序服务器地址
- IE6的3像素神奇bug:缘起与解决方案