Android自动化测试之Uiautomator_UiDevice-API详解
- 格式:doc
- 大小:133.00 KB
- 文档页数:14
Android移动端自动化测试框架UIAutomator2入门随着智能手机的普及,移动应用也越来越受到欢迎。
移动端应用相对于传统的Web应用或桌面应用,有自身独特的测试需求。
在这种情况下,自动化测试框架成为了移动端测试的必备工具。
本文将介绍Android移动端自动化测试框架UIAutomator2的基础知识和使用方法。
一、UIAutomator2介绍UIAutomator2是Android平台上的一个自动化测试框架,它的作用是为测试人员提供一种自动化测试手段,以验证移动应用的正确性、稳定性和性能。
UIAutomator2可以模拟用户在移动应用上的各种操作,包括点击、滑动、输入等等,以实现对应用的全面自动化测试。
二、UIAutomator2的环境搭建要使用UIAutomator2,我们首先需要构建相应的测试环境。
具体步骤如下:1. 安装Android SDK,并配置环境变量。
2. 下载UIAutomator2的源代码。
3. 根据源代码中的README文档,进行所需的编译和安装。
三、UIAutomator2的使用1. 创建测试脚本使用UIAutomator2进行自动化测试需要编写相应的测试脚本。
测试脚本是由Java编写的,并可以使用Android Studio进行编辑和调试。
下面是一个简单的测试脚本:```import androidx.test.uiautomator.By;import androidx.test.uiautomator.UiDevice;public class MyTest {public static void main(String[] args) throws Exception {UiDevice device = UiDevice.getInstance();device.pressHome();device.findObject(By.text("Chrome")).click();device.findObject(By.res("com.android.chrome:id/search_box_text")).c lick();device.findObject(By.res("com.android.chrome:id/search_box_text")).s etText("UIAutomator2");device.pressEnter();}}```这个脚本的功能是启动Chrome浏览器,并在浏览器中搜索“UIAutomator2”。
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 推荐使用这个,不依赖像素。
Android测试中的自动化工具评测与选择随着移动应用开发的快速发展,Android平台成为了最受欢迎的移动操作系统之一。
然而,随之而来的是对移动应用质量的不断追求,这要求开发人员在应用发布之前进行全面而准确的测试。
为了提高效率和质量,Android测试中的自动化工具成为开发人员的首选。
本文将对几种常用的Android自动化测试工具进行评测,并提供选择的建议。
1. AppiumAppium是一种开源的移动应用自动化测试工具,支持多种操作系统(包括Android)。
它使用WebDriver协议进行测试,并支持各种编程语言(如Java、Python和Ruby)。
Appium的优点在于可以在真实设备和模拟器上运行测试,且支持多种操作系统版本。
然而,Appium需要开发人员具备较强的编程能力,并且在配置和安装方面较为复杂。
2. EspressoEspresso是由Google开发的Android自动化测试工具,专注于用户界面(UI)测试。
它提供了一套简洁明了的API,可以方便地编写和运行UI测试。
Espresso的优点在于速度快、稳定性高,且无需涉及设备配置或者系统安装。
然而,在处理复杂场景或者多个应用程序之间的交互时,Espresso的能力相对较弱。
3. UI AutomatorUI Automator也是由Google开发的自动化测试框架,用于执行跨应用程序的功能测试。
它可以与Android系统进行交互,并模拟用户在多个应用程序之间的操作。
UI Automator的优点在于支持多应用程序测试和跨应用程序交互,适用于复杂的测试场景。
然而,使用UI Automator需要对Android框架有一定的了解,并且测试脚本编写较为繁琐。
4. RobotiumRobotium是一种Android自动化测试工具,专注于功能和用户界面的测试。
它提供了易于使用的API,能够模拟用户在应用程序中的操作和事件。
Robotium的优点在于容易上手、功能强大,可用于测试各种应用程序场景。
Android自动化测试工具的选择与比较Android应用程序的自动化测试在软件开发过程中扮演着重要的角色。
为了保证应用程序的质量和稳定性,开发人员需要选择一个适合他们需求的自动化测试工具。
在本文中,我们将比较几种常见的Android自动化测试工具,并为您提供有关如何选择适合您的项目的建议。
一、UI AutomatorUI Automator是由Google开发的一个基于黑盒测试的自动化测试框架。
它允许开发人员跨应用程序的用户界面元素进行测试。
UI Automator支持Android 4.1及以上的设备,并提供了丰富的API来与设备进行交互。
它的优点是可以通过模拟用户的真实操作来测试应用程序的性能和用户体验。
然而,UI Automator的学习曲线较陡峭,对于新手来说可能需要一些时间来熟悉其使用方法。
二、EspressoEspresso是一个由Google开发的轻量级自动化测试框架,旨在简化Android应用程序的UI测试。
Espresso的主要特点是易于使用和快速执行测试。
它提供了简洁的API用于编写可读性强的测试代码,并且能够处理异步操作和UI事件。
Espresso还集成了多种延时和等待机制,以便于开发人员进行稳定的测试。
然而,Espresso的适用范围相对较窄,主要针对应用程序的单个Activity进行测试。
三、AppiumAppium是一个开源的跨平台自动化测试框架,支持Android和iOS平台。
它使用WebDriver协议来驱动真实的设备和模拟器,可以以多种编程语言编写测试脚本。
Appium的优点是支持网页应用测试和混合应用测试,可以覆盖更广泛的测试场景。
然而,Appium的配置和设置相对复杂,对于初学者来说可能需要一些技术知识和经验。
四、Robot FrameworkRobot Framework是一个通用的自动化测试框架,支持多种应用程序和系统的测试。
它具有可扩展性、易用性和灵活性的特点。
Android⾃动化框架uiautomator简介UI⾃动化测试框架,安卓移动端APP.要求:Android 4.3以上1.提供⼀系列API:执⾏UI测试在系统或者第三⽅APP上⾯;2.允许在被测设备上执⾏操作,⽐如打开系统设置菜单。
3.适合编写⿊盒⾃动化测试UIautomator框架主要特点:1.元素定位:UIautomator viewer。
扫描、分析待测应⽤的UI组件的图像⼯具;2.元素操作:Accessing devicestate.在⽬标设备和app上的各种操作3.元素识别:UI Automator APIs,在多个应⽤程序中捕获和操作UI组件。
1.uiautomatorvieweruiautomatorviewer位于sdk/tools⽬录下,可以扫描、分析待测试应⽤界⾯,分析结果可以导出为xml与截图。
通过该⼯具可以分析出UI控件的id,text,focusable等等各种属性,甚⾄布局上的层次关系。
windows下运⾏tools下的uiautomatorviewer.batliunx下运⾏./uiautomatorviewer 启动该⼯具。
上图uiautomatorviewer的运⾏截图,左上⾓两个⼿机模样的图标点击后就会开始截图并分析UI组件,分析后的结果如下⽅所⽰,左侧为⼿机当前画⾯截图,右侧上部为view控件的层次关系,下部为当前选中控件的各种信息。
2.uiautomator APIsuiautomator是⼀个包含⼀套UI测试API,和⽀持运⾏测试程序的JAR包。
该JAR包位于sdk/platforms/android-* /uiautomator.jar. 使⽤时需要注意⾃⼰的SDK版本需要⼤于16, SDK Tools版本需要⼤于21.Android版本需要⾼于4.3。
UIautomator有⽐较多的类。
这⾥只介绍我们在APP⾃动化测试中常⽤的三种。
其中UiSelector类是在appium定位元素时会⽤到的类。
Android自动化测试(UiAutomator)简要介绍一、一个BUG引发的问题如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”。
这个问题我们如何验证呢?我想,最好的方式应该是自动化测试。
那么,自动化测试可以完成哪些任务呢?简单的说,那些重复性的测试工作,都可以交给自动化完成:1、设置手机的语言2、添加、删除、收藏联系人3、拨号、挂断4、甚至发送短信、收藏短信如果需要上面的功能,那么就开始自动化之旅吧。
二、Android自动化测试简单介绍Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey(在我看来这个不算)等。
主要特点:1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;3、UiAutomator:优点:可以对所有操作进行自动化,操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;本文主要介绍UiAutomator的使用方法。
三、环境搭建3.1、必备条件:1、JDK2、SDK(API高于15)3、Eclipse(安装ADT插件)4、ANT(用于编译生成jar)3.2、简要步骤:1、安装JDK并添加环境变量。
安装后,一定要通过JAVA_HOME的方式添加环境变量,即先建立JAVA_HOME 变量,然后在path中添加%JAVA_HOME%\bin;2、添加SDK环境变量。
使⽤uiautomator做UI测试转载~~~~~~~~~~~~~~~~~~~~~~~~若有侵权,请及时联系本博主,博主将第⼀时间撤销在Android 4.1发布的时候包含了⼀种新的测试⼯具–,uiautomator是⽤来做UI测试的。
也就是普通的⼿⼯测试,点击每个控件元素看看输出的结果是否符合预期。
⽐如登陆界⾯分别输⼊正确和错误的⽤户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提⽰等。
功能性或者⿊盒UI测试不需要测试⼈员了解程序如何实现的,只需要验证各种操作的结果是否符合预期即可。
这样的测试可以分离团队的开发⼈员和测试⼈员。
⼤家各⼲各的没有太多的交集。
常⽤的UI测试⽅式就是⼈⼯验证啦,就是测试⼈员拿着各种⼿机分别安装要测试的程序然后看看是否能正确完成各种预定的功能。
但是这种验证⽅式是⾮常耗时间的,每次回归都要全部验证⼀边,并且还容易出现⼈为错误。
⽐较⾼效和可靠的UI测试⽅式就是⾃动化测试。
⾃动化UI测试创建测试代码来执⾏测试任务,各种测试任务分别覆盖不同的使⽤场景,然后使⽤测试框架来运⾏这些测试任务。
uiautomator 就是你的⾃动化UI测试⼯具。
概述Android SDK在4.1中提供了如下⼯具来⽀持UI⾃动化测试:uiautomatorviewer – ⼀个图形界⾯⼯具来扫描和分析应⽤的UI控件。
uiautomator – ⼀个测试的Java库,包含了创建UI测试的各种API和执⾏⾃动化测试的引擎。
要使⽤该⼯具,需要满⾜如下条件:Android SDK Tools, Revision 21 or higherAndroid SDK Platform, API 16 or higheruiautomator 测试⼯具的⼯作流程下⾯是uiautomator ⼯作流程概述:1. 安装要测试的应⽤到⼿机中,分析应⽤的UI界⾯元素并确保被测试应⽤的各个控件可以被测试⼯具获取到。
2. 创建知道测试案例来模拟应⽤中的⽤户操作步骤。
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.窗口布局结构。