当前位置:文档之家› Android自动化测试之Uiautomator_UiDevice-API详解

Android自动化测试之Uiautomator_UiDevice-API详解

Android自动化测试之Uiautomator-UiDevice-API详解*****************[在此处键入]目录UiDevice-API (2)1.click (2)2.freezeRotation (2)3.getCurrentPackageName (3)4.getDisplayHetght与getDisplayWidth . 35.getDisplayRotation (3)6.getDisplaySizeDp (4)7.getProductName (5)8.监听器 (5)9.按键事件 (8)10.旋转 (9)11.锁屏与唤醒 (10)12.等待对象 (11)13.截图 (12)14.拖拽与滑动 (12)15.通知栏.快速设置 (13)16.窗口布局结构 (13)UiDevice-APIuidevice提供关于设备的状态信息。

你也可以使用这个类来模拟装置上的用户的行为,如按方向键或按菜单按钮。

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

以下也是如此,不再写getUiDevice。

2.freezeRotation例子:当前手机状态为竖屏,锁定当前手机为竖屏,不让手机跟随着手机物理旋转而旋转。

UiDevice.getInstance().freezeRotation();3.getCurrentPackageName例子:当前在QQ界面,我想要知道QQ的包名4.getDisplayHetght与getDisplayWidth例子:获得当前手机的屏幕宽度与高度,即获得当前手机的屏幕分辨率5.getDisplayRotation返回整数0代表当前物理旋转0度1代表当前物理旋转90度2代表当前物理寻转180度3代表当前物理旋转270度例子:获取当前界面的旋转状态:switch(UiDevice.getInstance().getDisplayRotation()){case 0:System.out.println("当前旋转状态0度");break;case 1:System.out.println("当前旋转状态90度");break;case 2:System.out.println("当前旋转状态180度");break;case 3:System.out.println("当前旋转状态270度");break;default:break;}6.getDisplaySizeDpDP知识:在android系统中单位DP也就是DIP:device independent pixels(设备独立像素).dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

dp也就是dip。

这个和sp基本类似。

如果设置表示长度、高度等属性时可以使用dp 或sp。

但如果设置字体,需要使用sp。

dp是与密度无关,sp除了与密度无关外,还与scale 无关。

如果屏幕密度为160,这时dp和sp和px是一样的。

1dp=1sp=1px,但如果使用px 作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。

那么原来TextView 的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。

但如果设置成160dp或160sp的话。

系统会自动将width属性值设置成320px 的。

也就是160 * 320 / 160。

其中320 / 160可称为密度比例因子。

也就是说,如果使用dp 和sp,系统会根据屏幕密度的变化自动进行转换.例子:Point aPoint=getUiDevice().getDisplaySizeDp();System.out.println("width:"+aPoint.x);System.out.println("height:"+aPoint.y);7.getProductName例子:获取当前产品名8.监听器监听器用于处理中断,当脚本其他未知情况打断执行的时候,如果有监听器则会跳转到监听器中执行,我们可以使用监听器做一些特殊的测试如,来电,来闹钟日常等测试。

还可以处理异常中断,如我最先设计的测试步骤,中途突然10086来了封短信,弹窗短信,直接打断我的脚本步骤,如果我没有做预先的处理则,这条用例最终就执行失败。

另外监听器需要写在脚本的开头。

例子:在循环打开百度关闭百度应用过程中来电话,使用监听器挂断电话,让脚本继续执行。

//注册监听器,处理来电UiDevice.getInstance().registerWatcher("hangUpThePhone", new UiWatcher() {@Overridepublic boolean checkForCondition() {// TODO Auto-generated method stubUiObject text=new UiObject(newUiSelector().text("来电"));UiObject call=new UiObject(newUiSelector().className(""));if(text.exists()){try {call.swipeRight(10);} catch (UiObjectNotFoundException e) {// TODO Auto-generated catch blocke.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);}9.按键事件按键主要为模拟设备的物理按键,如home键,menu键,back键,音量键等例子:按home键:UiDevice.getInstance().pressHome();按menu键:UiDevice.getInstance().pressMenu();按back键:UiDevice.getInstance().pressBack();对于pressKeyCode(int keyCode) 模拟短按键盘代码。

键盘代码为何物呢,其实我们键盘上的每个按键都对应一个整数的代码,比如说delete键为67。

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

/reference/android/view/KeyEvent.html例子:如按字母A,打开上面网页Ctrl+f 打开搜索 KEYCODE_A 查到代码为29int KEYCODE_A=29;UiDevice.getInstance().pressKeyCode(KEYCODE_A); 10.旋转例子:需要测试横屏界面,固定在向左转的横屏状态UiDevice.getInstance().setOrientationLeft();判断当前是否在竖屏位置,如不是返回原始的竖屏状态if(!UiDevice.getInstance().isNaturalOrientation()){ UiDevice.getInstance().setOrientationNatural();}11.锁屏与唤醒例子检查屏幕是否唤醒,如果不是则唤醒if(UiDevice.getInstance().isScreenOn()){UiDevice.getInstance().wakeUp();}12.等待对象等待当前应用处于空闲状态,如打开应用程序,打开载入的动作一直在进行,当前完全载入程序,处于应用主界面,而没有去操作他,此时的状态就是空闲状态。

窗口更新事件,如点击一个按钮这个按钮会跳转到其他的activity中,则点击这个按钮就发生了窗口更新事件。

例子:通过坐标点击界面上的,一个应用,点开应用后点击界面上的“搜索”按钮UiDevice.getInstance().click(580, 654);//等待500000,如果界面还没有打开则,超时异常UiDevice.getInstance().waitForIdle(500000);UiObject searchObject=new UiObject(newUiSelector().text("搜索"));searchObject.click();超时等待等待时间为0到500000,如果在这个时间内,界面载入完成则算成功。

13.截图storePath:存储路径,必须为png格式Scale:缩放比例,1.0为原图Quality:图片压缩质量,范围为0-100返回:True:截图成功False:截图失败参数为File类,注意参数的使用形式,请参照以下例子例子:截图保存到sd卡更目录中,图片文件名为test1UiDevice.getInstance().takeScreenshot(new File("/sdcard/test1.png"));14.拖拽与滑动参数:segments:Poing[]点阵列,可以多个点segmentSteps:滑动步长StartX-StartY:具体坐标值返回:True:滑动成功False:滑动例子:从左往右扫动屏幕int height=UiDevice.getInstance().getDisplayHeight();int width=UiDevice.getInstance().getDisplayWidth(); UiDevice.getInstance().swipe(50, height/2, width-50, height/2, 10);15.通知栏·快速设置16.窗口布局结构。

相关主题