1.UiDevice API 详细介绍

1.UiDevice按键与keycode使用

 

返回值

方法名

说明

booleanpressBack()模拟短按返回back键
booleanpressDPadCenter()模拟按轨迹球中点按键
booleanpressSPadDown()模拟轨迹球向下按键
booleanpressDPadLeft()模拟轨迹球向左按键

boolean

pressDPadRight()模拟轨迹球向右按键
booleanpressDPadUp()模拟轨迹球向上按键
booleanpressDelete()模拟短按删除delete按键
booleanpressEnter()模拟短按回车enter键
booleanpressHome()模拟短按home键
booleanpressKeyCode(int keyCode,int metaState)模拟短按键盘代码keycode
booleanpressKetCode(int keyCode)模拟短按键盘代码keycode
booleanpressMenu()模拟短按menu键
booleanpressRecentApps()模拟短按最近使用程序
booleanpressSearch()模拟短按搜索键

 

  • 例如:

 

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:

 

返回值

方法名

说明

booleanclick(int x,int y)使用坐标点击屏幕
intgetDisplayHeight()获取屏幕高度
pointgrtDisplaySizeDp()获取显示尺寸返回显示大小(设备独立像素)
intgetDisplayWidth()获得屏幕宽度

  

  • 例如:

 

int w=UiDevice.getInstance().getDisplayWidth();//获取屏幕宽度

    int h=UiDevice.getInstance().getDisplayHeight();//获取屏幕高度

    UiDevice.getInstance().click(h/2, w/2);//点击屏幕中心点
4.拖拽与滑动
  • 拖拽:将一个组件从一个坐标移动到另一个坐标处
  • 滑动:从一个坐标点移动到另一个坐标点
  • 步长:从一点滑动到另一点使用的时间(1步长=5毫秒,1秒=1000毫秒);步长越长,即两点之间移动越慢

返回值

方法名

说明

booleandrag(int startX,int startY,int endX,int endY,int steps)拖动对象从一个坐标移动到另一个坐标
booleanswipe(Point[] segments,int segmentSteps)在点阵列中滑动,5ms一步
booleanswipe(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度
返回值方法名描述
voidsetOrientationLeft()通过禁用传感器,然后模拟设备向左旋转并且固定位置
voidsetOrientationNatural()通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置
voidsetOrientationRight()通过禁用传感器,然后模拟设备向又旋转并且固定位置
voidunfreezeRotation()重新启用传感器和允许物理旋转
booleanisNaturalOrientation()检测设置是否处于默认旋转状态
intgetDisplayRotation()返回当前的显示旋转,0度,90度,180度,270度值分别为:0,1,2,3
voidfreezeRotation()禁用传感器和冻结装置物理旋转在其当前旋转状态

 

 

  • 例如:
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.灭屏与唤醒屏幕

返回值

方法名

描述

voidwakeUp()模拟按电源键,如果屏幕是唤醒的没有任何作用
voidsleep()模拟按电源键,如果屏幕已经是关闭的则没有任何作用
booleanisScreenOn()检查屏幕是否亮屏

 

  • 例如:
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:

返回值

方法名

描述

booleantakeScreenshot(FilestorePath)把当前窗口截图并将其存储为png默认的1.0f的规格(原尺寸)和90%质量,参数为file类的文件路径
booleantakeScreenshot(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

 

返回值

方法名

描述

voidwaitForIdle(long timeuot)自定义超时等待当前应用处于空闲状态
voidwaitForIdle()等待当前应用处于空闲状态,默认等待10s
booleanwaitForWindowUpdate(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.获取包名&开启通知栏&快速设置&获取布局文件

 

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

 

  • 例如:
//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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值