一、按键使用

返回值

方法名

说明

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() 模拟短按搜索键

按键主要为模拟设备的物理按键,如home键,menu键,back键,音量键等

例子:

按home键:UiDevice.getInstance().pressHome();

按menu键:UiDevice.getInstance().pressMenu();

按back键:UiDevice.getInstance().pressBack();

keycode使用

meta_key未被激活 0
shift或caps_lock被激活时 1
alt被激活 2
alt,shift或caps_lock同时被激活时 3

对于  pressKeyCode(int keyCode)  模拟短按键盘代码。键盘代码为何物呢,其实我们键盘上的每个按键都对应一个整数的代码,比如说delete键为67。

具体键盘代码请到谷歌官网查询,附上网址,需要查什么按键只需搜索相应的英文就可以了。

http://developer.android.com/reference/android/view/KeyEvent.html

例子:

如按字母A,打开上面网页Ctrl+f 打开搜索 KEYCODE_A   查到代码为29

int KEYCODE_A=29;

UiDevice.getInstance().pressKeyCode(KEYCODE_A);
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);//输入小写a 

UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);//输入大写a

二、获取坐标与坐标点击

返回值

方法名

说明

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);//点击屏幕中心点

UiDevice.getInstance().click(300, 300);//点击坐标点(300,300)
或 getUiDevice().click(300, 300); 推荐使用上面的UiDevice.getInstance()进行书写,如果使用下面的书写,在同一个类中没问题,如果要在其他类中的方法使用了getUiDevice,调用到本类中不会有语法错误,但是执行的时候会出错。以下也是如此,不再写getUiDevice。

三、旋转

返回值 方法名 描述
void setOrientationLeft() 通过禁用传感器,然后模拟设备向左旋转并且固定位置
void setOrientationNatural() 通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置
void setOrientationRight() 通过禁用传感器,然后模拟设备向又旋转并且固定位置
void unfreezeRotation() 重新启用传感器和允许物理旋转
boolean isNaturalOrientation() 检测设置是否处于默认旋转状态
int getDisplayRotation() 返回当前的显示旋转,0度,90度,180度,270度值分别为:0,1,2,3
void freezeRotation() 禁用传感器和冻结装置物理旋转在其当前旋转状态

实例1:

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(); }
}

实例2:

UiDevice.getInstance().freezeRotation();

当前手机状态为竖屏,锁定当前手机为竖屏,不让手机跟随着手机物理旋转而旋转。

四、锁屏和唤屏

返回值

方法名

描述

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();    //亮屏操作

    }

}

五、等待对象

返回值

方法名

描述

void waitForIdle(long timeuot) 自定义超时等待当前应用处于空闲状态
void waitForIdle() 等待当前应用处于空闲状态,默认等待10s
boolean waitForWindowUpdate(Steing packageName,long timeout) 等待窗口内容更新时间的发生窗口更新事

实例:

public void testIdle(){
//通过坐标点击界面上的,一个应用,点开应用后点击界面上的“搜索”按钮 UiDevice.getInstance().click(580, 654); //等待500000,如果界面还没有打开则,超时异常
UiDevice.getInstance().waitForIdle(500000); UiObject searchObject=new UiObject(new UiSelector().text("搜索")); searchObject.click(); //超时等待等待时间为0到500000,如果在这个时间内,界面载入完成则算成功。 //[0,417][64,480]这个是浏览器坐标 UiDevice.getInstance().click(32, (480-417)/2+417);//点击浏览器 UiDevice.getInstance().waitForIdle(20000);//超时等待20s } 
等待当前应用处于空闲状态,如打开应用程序,打开载入的动作一直在进行,当前完全载入程序,处于应用主界面,而没有去操作他,此时的状态就是空闲状态。
窗口更新事件,如点击一个按钮这个按钮会跳转到其他的activity中,则点击这个按钮就发生了窗口更新事件。

六:截图

返回值

方法名

描述

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
   
返回     说明
True 截图成功
False 截图失败

实例:

//把当前窗口截图并将其存储为png默认的1.0f的规格(原尺寸)和90%质量,参数为file类的文件路径为"sdcard/test1.png"

public void testScreen(){

    UiDevice.getInstance().takeScreenshot(new File("sdcard/test1.png"));

}

//参数为File类,注意参数的使用形式,请参照以下例子
//截图保存到sd卡更目录中,图片文件名为test1 UiDevice.getInstance().takeScreenshot(new File("/sdcard/test1.png"));

七:拖拽与滑动

返回值 方法名 说明
boolean

swipe(Point[] segments, int segmentSteps)

在点阵列中滑动,5ms一步
boolean

swipe(int startX, int startY, int endX, int endY, int steps)

通过坐标滑动屏幕
boolean

drag(int startX, int startY, int endX, int endY, int steps)

从一个坐标到另一个坐标进行拖拽
拖拽:将一个组件从一个坐标移动到另一个坐标处
滑动:从一个坐标点移动到另一个坐标点
步长:从一点滑动到另一点使用的时间(1步长=5毫秒,1秒=1000毫秒);步长越长,即两点之间移动越慢

  

参数说明:

参数 说明
segments

Poing[]点阵列,可以多个点

segmentSteps 滑动步长
StartX-StartY 具体坐标值
   
返回     说明
True 滑动成功
False 滑动失败

实例:

//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); }

八:获取包名&开启通知栏&快速设置&获取布局文件

返回值 方法名 描述
void getCurrentPackageName() 获取当前界面的包名
void dumpWindowHierarchy(String fileName) 获取当前界面的布局文件,保存在/data.local/tmp/目录下
boolean openNotification() 打开通知栏
boolean openQuickSettings() 打开快速设置
void

setCompressedLayoutHeirarchy(boolean compressed)

启用或禁用布局层次压缩。

实例:

//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:\"命令将该文件导出来

}

九:监听器

返回值  方法名 说明
void

registerWatcher(String name, UiWatcher watcher)

注册一个监听器,当前运行指定步骤被打断的时候,处理中断异常
void

removeWatcher(String name)

移除之前注册的监听器
void

resetWatcherTriggers()

重置一个监听器
void

runWatchers()

强制运行所有的监听器
boolean hasAnyWatcherTriggered() 检查是否有监听器触发过
boolean

hasWatcherTriggered(String watcherName)

检查某个特定的监听器是否触发过

实例:

//在循环打开百度关闭百度应用过程中来电话,使用监听器挂断电话,让脚本继续执行 
//注册监听器,处理来电
UiDevice.getInstance().registerWatcher("hangUpThePhone", new UiWatcher() {
@Override
public boolean checkForCondition() {
// TODO Auto-generated method stub
UiObject text=new UiObject(new UiSelector().text("来电"));
UiObject call=new UiObject(new UiSelector().className(""));
if(text.exists()){
try {
call.swipeRight(10);
} catch (UiObjectNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}else{
return false;
}
}
});
//测试脚本
UiObject baiduObject=new UiObject(new UiSelector().text("百度"));
for(int i=0;i<100;i++){
baiduObject.clickAndWaitForNewWindow();
sleep(2000);
UiDevice.getInstance().pressHome();
sleep(1000);
}
监听器用于处理中断,当脚本其他未知情况打断执行的时候,如果有监听器则会跳转到监听器中执行,我们可以使用监听器做一些特殊的测试如,来电,来闹钟日常等测试。还可以处理异常中断,如我最先设计的测试步骤,中途突然10086来了封短信,弹窗短信,直接打断我的脚本步骤,如果我没有做预先的处理则,这条用例最终就执行失败。另外监听器需要写在脚本的开头。

  

快学UiAutomator UiDevice API 详解的更多相关文章

  1. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  2. [转]百度地图API详解之地图坐标系统

    博客原文地址:http://www.jiazhengblog.com/blog/2011/07/02/289/ 我们都知道地球是圆的,电脑显示器是平的,要想让位于球面的形状显示在平面的显示器上就必然需 ...

  3. 大数据学习笔记——Spark工作机制以及API详解

    Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...

  4. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  5. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  6. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  7. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  8. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  9. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

随机推荐

  1. 看后端程序员调试CORS的姿势

    # 目录 为什么有同源策略? 需要解决的问题 CORS跨域请求方案 preflight withCredentials 附:高效.优雅地调试CORS实现 为什么有同源策略?       同源策略Sam ...

  2. ugui mask失效

    android平台 PlayerSettings-Resolution and Presentation-DisableDepth and Stencil这项勾选,mask失效

  3. 3D max模型导入unity 3D中注意事项

    一.单位,比例统一   在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. ...

  4. Unity AnimatorController注意事项

    通过assetbundle加载的单独打包AnimatorController使用下面方法赋值 Go.GetComponent<Animator>().runtimeAnimatorCont ...

  5. assembly x86(nasm)子程序1

    T: 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来.要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示. 思路: Main主调程 ...

  6. C - Aladdin and the Flying Carpet

    #include<bitset> #include<map> #include<vector> #include<cstdio> #include< ...

  7. shell学习(4)- awk

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  8. jmeter beanshell处理请求响应结果时Unicode编码转为中文

    在Test Plan下创建一个后置BeanShell PostProcessor,粘贴如下代码即可: String s=new String(prev.getResponseData()," ...

  9. vi编辑器查找

    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢? 你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了. 如 ...

  10. Linux下命令行中的复制和粘贴

    安装gpm:yum install -y gpm* 开启gpm服务:systemctl start gpm 按住鼠标左键,选中想要复制的内容,松开就完成复制,再在复制的位置按右键就完成粘贴.