




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、范翰卿整理联系邮箱:Android自动化测试之Uiautomator-UiDevice-API详解目录UiDevice-API11.click22.freezeRotation23.getCurrentPackageName34.getDisplayHetght与getDisplayWidth35.getDisplayRotation36.getDisplaySizeDp47.getProductName58监听器59.按键事件810.旋转911. 锁屏与唤醒1012.等待对象1013.截图1114.拖拽与滑动1215.通知栏快速设置1316.窗口布局结构13U
2、iDevice-APIuidevice提供关于设备的状态信息。你也可以使用这个类来模拟装置上的用户的行为,如按方向键或按菜单按钮。1.clickbooleanclick(int x, int y)在任意坐标指定的坐标执行一个点击.例子:点击坐标点(300,300)UiDevice.getInstance().click(300, 300);或 getUiDevice().click(300, 300);推荐使用上面的UiDevice.getInstance()进行书写,如果使用下面的书写,在同一个类中没问题,如果要在其他类中的方法使用了getUiDevice,调用到本类中不会有语法错误,但是执
3、行的时候会出错。以下也是如此,不再写getUiDevice。2.freezeRotationvoidfreezeRotation()禁用传感器和设备的旋转且在当前的旋转状态冻结。例子:当前手机状态为竖屏,锁定当前手机为竖屏,不让手机跟随着手机物理旋转而旋转。UiDevice.getInstance().freezeRotation();3.getCurrentPackageNameStringgetCurrentPackageName()返回当前界面的包名的字符串例子:当前在QQ界面,我想要知道QQ的包名String qQpackagenameString=UiDevice.getInstan
4、ce().getProductName();4.getDisplayHetght与getDisplayWidthintgetDisplayHeight()获取显示器的高度,以像素为单位。intgetDisplayWidth()获取显示器的宽度,以像素为单位。例子:获得当前手机的屏幕宽度与高度,即获得当前手机的屏幕分辨率int width=UiDevice.getInstance().getDisplayWidth();int height=UiDevice.getInstance().getDisplayHeight();5.getDisplayRotationintgetDisplayRot
5、ation()返回当前的显示旋转,0,90,180,270返回整数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.printl
6、n(当前旋转状态270度);break;default:break;6.getDisplaySizeDpPointgetDisplaySizeDp()返回显示DP大小(设备独立的像素)返回的显示大小根据每个屏幕旋转。DP知识:在android系统中单位DP也就是DIP:device independent pixels(设备独立像素).dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。px: pixels(像素). 不同设备显示效果相同,一般我们H
7、VGA代表320x480像素,这个用的比较多。pt: point,是一个标准的长度单位,1pt1/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的
8、宽度设成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.getProduc
9、tNameStringgetProductName()返回当前设备的产品名例子:获取当前产品名String product=UiDevice.getInstance().getProductName();8监听器voidregisterWatcher(String name,UiWatcherwatcher)注册一个监听器,当前运行指定步骤被打断的时候,处理中断异常voidremoveWatcher(String name)移除之前注册的监听器voidresetWatcherTriggers()重置一个监听器voidrunWatchers()强制运行所有的监听器booleanhasAnyWat
10、cherTriggered()检查是否有监听器触发过booleanhasWatcherTriggered(String watcherName)检查某个特定的监听器是否触发过监听器用于处理中断,当脚本其他未知情况打断执行的时候,如果有监听器则会跳转到监听器中执行,我们可以使用监听器做一些特殊的测试如,来电,来闹钟日常等测试。还可以处理异常中断,如我最先设计的测试步骤,中途突然10086来了封短信,弹窗短信,直接打断我的脚本步骤,如果我没有做预先的处理则,这条用例最终就执行失败。另外监听器需要写在脚本的开头。例子:在循环打开百度关闭百度应用过程中来电话,使用监听器挂断电话,让脚本继续执行。 /注
11、册监听器,处理来电UiDevice.getInstance().registerWatcher(hangUpThePhone, new UiWatcher() Overridepublic boolean checkForCondition() / TODO Auto-generated method stubUiObject text=new UiObject(new UiSelector().text(来电);UiObject call=new UiObject(new UiSelector().className();if(text.exists()try call.swipeRight
12、(10); catch (UiObjectNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();return true;elsereturn false;);/测试脚本UiObject baiduObject=new UiObject(new UiSelector().text(百度);for(int i=0;i100;i+)baiduObject.clickAndWaitForNewWindow();sleep(2000);UiDevice.getInstance().pressHome();sle
13、ep(1000);9.按键事件booleanpressBack()模拟短按返回键.booleanpressDPadCenter()轨迹球booleanpressDPadDown()轨迹球booleanpressDPadLeft()轨迹球booleanpressDPadRight()轨迹球booleanpressDPadUp()轨迹球booleanpressDelete()模拟短按删除键.booleanpressEnter()模拟短按回车键.booleanpressHome()模拟短按HOME键.booleanpressKeyCode(int keyCode, int metaState)模拟短
14、按键盘代码.booleanpressKeyCode(int keyCode)模拟短按键盘代码.booleanpressMenu()模拟短按MENU键booleanpressRecentApps()模拟短按最近应用程序按键booleanpressSearch()模拟短按搜索键按键主要为模拟设备的物理按键,如home键,menu键,back键,音量键等例子:按home键:UiDevice.getInstance().pressHome();按menu键:UiDevice.getInstance().pressMenu();按back键:UiDevice.getInstance().pressBac
15、k();对于 pressKeyCode(int keyCode) 模拟短按键盘代码。键盘代码为何物呢,其实我们键盘上的每个按键都对应一个整数的代码,比如说delete键为67。具体键盘代码请到谷歌官网查询,附上网址,需要查什么按键只需搜索相应的英文就可以了。/reference/android/view/KeyEvent.html例子:如按字母A,打开上面网页Ctrl+f 打开搜索 KEYCODE_A 查到代码为29int KEYCODE_A=29;UiDevice.getInstance().pressKeyCode(KEYCODE_A)
16、;10.旋转voidfreezeRotation()禁用传感器和冻结装置物理旋转在其当前旋转状态voidunfreezeRotation()重新启用传感器和允许物理旋转booleanisNaturalOrientation()检查设置是否是在其自然旋转竖屏的位置上voidsetOrientationLeft()通过禁用传感器,然后模拟设备向左转,并且固定位置voidsetOrientationNatural()通过禁用传感器,然后模拟设备转到其自然默认的方向,并且固定位置voidsetOrientationRight()通过禁用传感器,然后模拟设置向右转,并且固定冻结在那例子:需要测试横屏界面
17、,固定在向左转的横屏状态UiDevice.getInstance().setOrientationLeft();判断当前是否在竖屏位置,如不是返回原始的竖屏状态if(!UiDevice.getInstance().isNaturalOrientation()UiDevice.getInstance().setOrientationNatural();11. 锁屏与唤醒voidsleep()锁屏模拟按电源键,如果屏幕已经是关闭的则没有任何作用voidwakeUp()唤醒模拟按电源键,如果屏幕是唤醒的没有任何作用booleanisScreenOn()检查屏幕是否唤醒例子检查屏幕是否唤醒,如果不是则
18、唤醒if(UiDevice.getInstance().isScreenOn()UiDevice.getInstance().wakeUp();12.等待对象voidwaitForIdle(long timeout)等待当前应用程序处于空闲状态voidwaitForIdle()等待当前的应用程序处于空闲状态booleanwaitForWindowUpdate(String packageName, long timeout)等待窗口内容更新事件的发生等待当前应用处于空闲状态,如打开应用程序,打开载入的动作一直在进行,当前完全载入程序,处于应用主界面,而没有去操作他,此时的状态就是空闲状态。窗口
19、更新事件,如点击一个按钮这个按钮会跳转到其他的activity中,则点击这个按钮就发生了窗口更新事件。例子:通过坐标点击界面上的,一个应用,点开应用后点击界面上的“搜索”按钮UiDevice.getInstance().click(580, 654);/等待,如果界面还没有打开则,超时异常UiDevice.getInstance().waitForIdle();UiObject searchObject=new UiObject(new UiSelector().text(搜索);searchObject.click();超时等待等待时间为0到,如果在这个时间内,界面载入完成则算成功。13.截
20、图booleantakeScreenshot(File storePath)把当前窗口截图并将其存储为png默认1.0f的规模(原尺寸)和90%质量,参数为file类的文件路径booleantakeScreenshot(File storePath, float scale, int quality)把当前窗口截图为png格式图片,可以自定义缩放比例与图片质量参数:storePath:存储路径,必须为png格式Scale:缩放比例,1.0为原图Quality:图片压缩质量,范围为0-100返回:True:截图成功False:截图失败参数为File类,注意参数的使用形式,请参照以下例子例子:截图保存到sd卡更目录中,图片文件名为test1UiDevice.getInstance().takeScreenshot(new File(/sdcard/test1.png);14.拖拽与滑动booleanswipe(Point segments, int segmentSteps)在点阵列中滑动,5ms一步booleanswipe(int st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届三门峡市重点中学数学九年级第一学期期末检测模拟试题含解析
- 网络安全现状、策略与通信安全课件
- 中介合作协议书
- 麻醉常用血管活性药物
- 2026届福建厦门数学九上期末考试试题含解析
- 地方文化特色品牌塑造指南
- 《2025挖掘机租赁合同》
- 2025大学计算中心软件转让版合同书
- 中国银行沈阳市法库县2025秋招笔试言语理解题专练及答案
- 中国银行佛山市南海区2025秋招英文群面案例角色分析
- 艺术教育自考题库及答案
- 预防医学专业简介
- 下肢深静脉血栓形成介入治疗护理实践指南(2025版)解读课件
- 《系统柜介绍与使用》课件
- 2023《广东省建设工程消防设计审查疑难问题解析》
- 七年级数学上册《数轴、相反数、绝对值》专题练习(含答案)
- 公安消防队员招录政审表
- 人教版数学六年级上册分数除法《分数除法之和倍、差倍问题》课件
- 安徽省合肥市庐阳区2024-2025学年九年级上学期第一次段考物理试卷(无答案)
- GB/T 44273-2024水力发电工程运行管理规范
- 职业技术学校《传感器技术与应用》课程标准
评论
0/150
提交评论