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 详细介绍的更多相关文章

  1. 7.Configurator API 详细介绍

    一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...

  2. 6.UiWatcher API 详细介绍

    Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...

  3. 5.UiScrollable API 详细介绍

    Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...

  4. 2.UiSelector API 详细介绍

    一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...

  5. 腾讯微博java(android)sdk新增微博api详细介绍

    本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...

  6. 4.UiCollection API 详细介绍

    一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...

  7. 3.UiObejct API 详细介绍

    一.点击与长按 1.组件区域位置关系: Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标) 2.点击与长按相关API: 返回值 API 说明 ...

  8. 百度地图API详细介绍

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  9. HTML5全屏(Fullscreen)API详细介绍

    // 整个页面 onclick=   launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...

随机推荐

  1. 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)

    项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run  -h h1,h2,h3   -g web_clusters,db_ ...

  2. Hibernate入门篇<1>hibernate.cfg.xml学习小结

    Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中.Hibernate配置文件支持两种形式, ...

  3. 2017软工第十周个人PSP

    11.17--11.23本周例行报告 1.PSP(personal software process )个人软件过程. C(类别) C(内容) ST(开始时间) ET(结束时间) INT(间隔时间) ...

  4. 王者荣耀交流协会第6次Scrum立会

    Scrum master :刘耀泽 任思佳的导入excel原型博客地址:http://www.cnblogs.com/rensijia/p/7766812.html 王玉玲psp表格记录功能博客地址: ...

  5. 02慕课网《进击Node.js基础(一)》——CommonJs标准

    是一套规范管理模块 每个js 为一个模块,多个模块作为一个包 node.js和Couchdb是对其的实现: 不同于jQuery 模块:定义.标识.引用(地址/模块名称) 模块类型: 核心模块http ...

  6. Java微笔记(7)

    String 类常用方法 注意点: 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引:如果没有匹配 ...

  7. Ubuntu中Google Chrome安装

    转载自博客 1. 方法一   1.在ubuntu中启动终端   2.在终端中,输入以下命令: sudo wget http://www.linuxidc.com/files/repo/google-c ...

  8. Jquery mobile div常用属性

    组件 页面 jQuery Mobile 应用了 HTML5 标准的特性,在结构化的页面中完整的页面结构分为 header. content.footer 这三个主要区域. 在 body 中插入内容块: ...

  9. Week2-作业1 -阅读《构建之法》

    第一章 在阅读第1.2.2节时,感受最深,记得开学初有老师就给我们分析过计算机专业和我们专业的区别,当时是给我们讲的是计算机科学注重的是理论,偏向于硬件方面,而软件工程则注重实践,偏向于软件方面.然很 ...

  10. 2."结对项目"的心得体会

    上个星期,老师给我们布置了个课堂小作业:   某公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道(100以内)四则运算题目给小学生做.二柱立马就想到写一个小程序来做这件事. 这个事情可以用很 ...