Uiautomator简要简介与使用_第1页
Uiautomator简要简介与使用_第2页
Uiautomator简要简介与使用_第3页
Uiautomator简要简介与使用_第4页
Uiautomator简要简介与使用_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android自动化工具UiAutomator简介一、Android自动化工具简介Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey等。主要特点:1、 Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;2、 Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;3、 UiAutomator:优点:可以对所有操作进行自动化,操作简单;

2、缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;4、 Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;本文档主要介绍UiAutomator的使用方法。二、UiAutomator介绍Google在Android 4.3发布时提供了一套新的UiAutomation框架来支持用户界面自动化测试,该框架通过运用已有的Accessibilit

3、y APIs来模拟用户跟设备用户界面的交互,比如获取窗口界面控件和注入事件等。UiAutomator,用于UI自动化测试,主要是仿真单击、滑动、输入文本等操作,而不用人为地进行操作,如果把一组反复进行的操作用UiAutomator实现,那么将大大提高效率。但是UiAutomator使用范围非常有限,学习之后会知道,在UiAutomator中,每一个UI控件都是UiObject的对象,并没有提供获得控件对应控件类(android.widget.*)的接口。所以在UiAutomator中,一个Button和ImageView都是一样的-都是UiObject的对象。要熟练使用UiAutomator,

4、需要熟悉下图中的类。三、UiAutomator的使用1. 环境搭建1.1 必备条件(1). JDK(2). SDK(API高于16)(3). Eclipse(安装ADT插件)-(可使用adt-bundle-windows-XXXXXX,其内含ADT插件)(4). ANT(用于编译生成jar)1.2 简要步骤(1). 安装JDK并添加环境变量(创建JAVA_HOME环境变量,添加PATH;(2). 添加SDK环境变量创建ANDROID_HOME,添加PATH;(3). 安装Eclipse,并安装ADT插件(4). 安装ANT工具,并添加环境变量创建ANT_HOME,添加PATH;2. UiAut

5、omator工作流程(1). 在设备上面安装需要测试的应用程序,(利用工具)分析应用程序的UI组件,确保测试框架能访问到应用程序(2). 创建可自动化的测试去模拟特定的用户交互(3). 编译测试用例成为jar文件并和你的测试的应用程序一起安装到设备上(4). 执行测试并查看结果(5). 修复bug或在测试中发现的缺陷3. UiAutomator使用步骤3.1 创建java project,导入包将Junit 的lib加入到工程后还需要添加Android.jar和uiautomator.jar两个文件添加完成后,点击Finish完成创建。3.2 创建测试类在工程下创建包com.uia.examp

6、le.my,并创建测试类LanuchSettings,该类需继承UiAutomatorTestCase,此处使用官网帮助中的示例。该测试用例主要用来模拟用户在一个安卓设备上启动设置应用。该测试用例模拟用户完成这样的场景的所有步骤,包括打开主屏幕,启动全部应用屏幕,滑动到设置应用图标上,点击该图标进入设置应用。具体代码如下:3.3 创建一个编译配置文件在SDK 目录下运行:<android-sdk>/tools/android create uitest-project -n <name> -t <id> -p <path>各个参数的作用:-n &

7、#224; name: Project name-t à target: Target ID of the new project。这个id是本机上android targets的id,可以通过命令android list来查询,得到如下图的结果,选择android-17以上版本前面所对应的id-p à path:本地项目路径执行命令:命令运行完成后,可以看到workspace目录下该工程目录内新增三个文件:build.xml、perties、perties(在eclipse中,右键项目名,选择Refresh,可在Referenced

8、 Libraries目录下查看到新增的三个文件)。Build.xml:编译可生成项目的jar文件;perties:保存了sdk路径;perties:保存了目标平台版本;3.4 修改配置文件,生成jar包Eclipse中,在build.xml上点击右键,选择“Run As” -> "Ant Build",可以看到下面的输出,这个输出实际上是一个帮助,是对build.xml的作用进行说明的。在build.xml中配置上相应的选项可以完成相应的操作。在build.xml的配置上,将default后面的选项改为“build”后,保存重新

9、运行,就可以build jar包了。此时工程的bin目录下就会生成了MyTest.jar。3.5 将jar部署到手机并执行使用adb命令将jar包push到手机中,然后执行。adb push <jar文件路径> data/local/tmpadb shell uiautomator runtest <jar文件名> -c <类名>比如:adb push MyTest.jar /data/local/tmp/adb shell uiautomator runtest MyTest.jar -c com.uia.example.my.LaunchSettings

10、PS:l jar和类都可指定多个,用空格分开;l 类名必须是全程,即包括包名;l 类名后面追加#MethodName则只运行某一方法,否则执行所有方法。执行后就能看到手机会按照LaunchSettings中的步骤自动执行。3.6 执行结果分析current:当前运行的测试数序编号,和方法名有关;class:当前运行方法所在类的类名;numtests:测试总数,一个public testxxx方法就是一个测试;test:当前测试的方法名;INSTRUMENTATION_STATUS_CODE:测试状态码,一般1是正在测试,0是通过,-1是错误4. TestCase代码4.1 UiDeviceUi

11、Device代表设备状态。在测试时,我们能通过UiDevice实例调用方法去检测许多属性的状态,如当前的屏幕旋转方向货展示大小。测试代码还能使用UiDevice实例去执行设备级的操作,如强制设备横竖屏,按压d-pad硬件按钮,或按压主屏幕键和菜单键。获取UiDevice实例,模拟按压主屏幕键的代码如下:getUiDevice().pressHome(); getUiDevice()方法可以得到一个UiDevice的对象,通过这个对象可以完成一些针对设备的操作:click(int x, int y) - 在(x, y)表示的像素地方点击pressBack()pressDelete()pressE

12、nter()pressHome()pressMenu()pressSearch() -点击响应的按键wakeUp() -当手机处于灭屏状态时,唤醒屏幕,并解锁swipe(startX, startY, endX, endY, steps) -在手机上滑动,从(startX, startY)到(endX, endY)。step表示滑动的这个距离分为几步完成,数目越少,滑动幅度越大。setOrientationLeft()setOrientationRight() -将手机向相应方向旋转setOrientationNatural() - 将手机旋转状态回归正常4.2 UiSelectorUiSel

13、ector表示一个搜索条件去查询和获得在当前显示界面特定元素控制,可以在当前展示界面上查询和获取特定元素的句柄。若找到多于一个的匹配元素,则返回布局层次结构上的第一个匹配元素作为目标UiObject。当构造一个UiSelector对象时,可以使用链式调用多个属性来缩小查询范围。如无匹配元素,则返回异常UiAutomatorObjectNotFoundException。你还可以使用childSelector()方法来嵌套多个Uiselector实例。例如。下面的代码演示如何制定查询来定位在当前界面的第一个ListView,然后在返回的ListView内定位一个带有Apps文本属性的界面元素。U

14、iObject appItem = new UiObject(new UiSelector().className(“android.widget.ListView”).instance(1).childSelector(new UiSelector().text (“Apps”); UiSelector对象可以理解为一种条件对象,描述的是一种条件,经常配合UiObject使用,可以得到某些符合条件的控件对象。checked(boolean val) -描述一种check状态的val的关系className(className) -描述一种类名为className的对象关系clickable(

15、boolean val) -与checked类似,描述clickable状态为val的关系description(desc) -描述descriptionContains(desc) -描述包含focusable(boolean val) -与checked类似index(index) -用当前对象在父对象集中的索引作为描述packageName(String name) -用包名作为条件描述selected(val) -描述一种选择关系text(text) -最为常用的一种关系,用控件上的文本即可找到当前控件,需要注意,所有使用text属性找到的控件,必须是英文的。也就是说,不支持通过中文查

16、找控件。textContains(text) -与text类似textStartsWith(text) -与text类似4.3 UiObjectUiObject代表一个UI元素。为创建一个UiObject实例,使用用来描述如何搜索、选定UI元素的UiSelector实例:UiObject cancelButton = new UiObject(new UiSelector().text(“Cancel”);UiObject okButton = new UiObject(new UiSelector().text(“OK”);必要时,可以重用测试项目中已经创建的UiObject实例。注意,测试

17、用例每次使用UiObject实例来点击UI元素或查询属性时,uiautomator测试框架会搜索当前的界面来寻找匹配。在下面的代码中,uiautomator测试框架搜索带有OK文本属性的UI元素。若发现匹配,并且该元素启用,框架会模拟用户的在该元素上的点击操作。if(okButton.exists() && okButton.isEnabled()okButton.click(); 还可以限制搜索在几个特定的类中寻找元素,例如,为发现Button类的匹配:UiObject cancelButton = new UiObject(new UiSelector().text(“Ca

18、ncel”).className(“android.widget.Button”);UiObject okButton = new UiObject(new UiSelector().text(“OK”).className(“android.widget.Button”);android.widget.Button翻译为:Android小工具按钮。UiObject对象可以理解为控件的对象。一般一个UiObject对象可以通过以下形式得到:UiObject mItem = new UiObject(new UiSelector().text(“English”);也就是配合一个UiSelect

19、or就可以得到一个控件。click() -点击控件clickAndWaitForNewWindow() -点击某个控件,并等待窗口刷新longClick() -长按clearTextField() -清除文本,主要针对编辑框getPackageName() -得到控件的包名getSelector() -得到当前控件的选择条件getText() -得到控件上的TextisCheckable()isChecked()isClickable()isLongClickable()isScrollable()isSelected() -判断是否具备某个属性UiObject的构造函数里传入了一个UiSel

20、ector对象。4.4 UiCollectionUiCollection代表元素条目的集合,例如音乐专辑中的歌曲或邮箱收件箱列表。类似UiObject,需要指定UiSelector来构造UiCollection。用于构造UiCollection的UiSelector一般搜索容器或包裹器类的界面元素,这样的容器或包裹器类的界面元素包含其他子UI元素,例如包含子元素的布局视图。下面举例说明,下面的代码片段演示如何构造一个UiCollection实例,该实例代表一个包含在FrameLayout布局中的视频专辑。UiCollection videos = new UiCollection(new Ui

21、Selector().className(“android.widget.FrameLayout”); 如果视频专辑包含在LinearLayout视图下,你能获取视频集合的数目:int count = videos.getChildCount(new UiSelector().className(“android.widget.LinearLayout”);若想从视频集合中寻找带有文本元素Cute Baby Laughing的标签的视频,然后模拟用户在该视频上进行点击,可使用如下代码:UiObject video = videos.getChildByText(new UiSelector()

22、.className(“android.widget.LinearLayout”),“Cute Baby Laughing”);video.click();类似的,还能模拟其他用户操作,如想模拟选定一个关联视频的多选框,可以使用如下代码:UiObject checkBox = video.getChild(new UiSelector().className(“android.widget.Checkbox”); if (! checkBox.isSelected ()checkbox.click();UiCollection对象可以理解为一个对象的集合。因为UiSelector描述后得到的有

23、可能是多个满足条件的控件集合,因此可以用来生成UiCollection:UiCollection mUiCollection = new UiCollection(new UiSelector().text(“Settings”);getChild(selector) -从集合中再次通过UiSelector选择一个UiObject对象getChildByDescription(childPattern, text) -从一个匹配模式中再次以text为条件选择UiObject4.5 UiScrollableUiSCrollable代码可滑动的UI元素集合。可以使用UiScrollable类来模拟

24、界面的横竖屏的滑动。该技术可以应用于界面元素隐藏在屏幕外,可以通过滑动来展示的情况下。例如,下面的代码演示如何模拟下滑设置按钮,然后点击About tablet选项。UiScrollable settingsItem = new UiScrollable(new UiSelector().className(“android.widget.ListView”); UiObject about = settingsItem.getChildByText(new UiSelector().className(”android.widget.LinearLayout”),“About tablet”

25、);about.click();四、可能出现的问题1. 步骤2.4中,右键build.xml文件,Run As选项中没有Ant Build?标准的Eclipse一般都是内置集成了Ant的。到<eclipse>plugins目录下查看,其实是有安装Ant插件的,但是没有在界面体现出来。要让Eclipse在界面显示Ant的相关配置,可在命令行下作如下操作:$ cd <your eclipse install folder>$ eclipse -application org.eclipse.equinox.p2.director -repository -installIU org.eclipse.ant.uiInstalling org.eclipse.ant.ui 3.5.400.v20130514-1341.运行完成后,启动eclipse,此是时发现Ant Build能正常在菜单中显示出来了。2. 步骤2.4中,执行Run As - > Ant Build,存在错误信息?此问题可能是Ant版本与java版本不匹配或电脑环境有关。建议安装Ant 1.9版本配合java 1.8版本。若已安装的Ant版本太低,可进行手动升级。(1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论