版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、android 自动化测试(uiautomator)简要介绍一、一个 bug 引发的问题假如研发过程中有一个bug:“不断的切换手机语言消灭花屏现象”。这个问题我们如何 验证呢?我想,最好的方式应当是自动化测试。那么,自动化测试可以完成哪些任务呢?简洁的说,那些重复性的测试工作,都可以交给自动化完成:1、设置手机的语言2、添加、删除、保藏联系人3、拨号、挂断4、甚至发送短信、保藏短信假如需要上面的功能,那么就开头自动化之旅吧。二、android 自动化测试简洁介绍android 自动化测试主要分为monkeyrunner、rubotium、uiautomator、monkey(在我看来这个不算
2、)等。主要特点:1、monkeyrunner:优点:操作最为简洁,可以录制测试脚本,可视化操作;缺点:主 要生成坐标的自动化操作,移植性不强,功能最为局限;2、rubotium:主要针对某一个apk 进行自动化测试,apk 可以有源码,也可以没有源码,功能强大;缺点是针对apk 操作,而且需要对apk 重新签名(有工具),因此操作相对简单;3、uiautomator:优点:可以对全部操作进行自动化,操作简洁;缺点:android 版本需要高于 4.0,无法依据控件id 操作,相对来说功能较为局限,但也够用了;4、monkey:精确来说,这不算是自动化测试,由于其只能产生随机的大事,无法依据 既
3、定的步骤操作;由上面介绍可以有这样的结论:测试某个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 环境变
4、量。肯定要先建立android_home,然后把%android_home%tools 添加到path中;3、安装eclipse,并安装adt 插件。4、安装 ant 工具,并添加环境变量。同样肯定要先建立%ant_home%变量,然后在path 中添加%ant_home%bin四、具体操作4.1、建立工程用 eclipse 新建java project,留意,不是android project!4.2、添加 junit 库4.3 、添加 android 库找到路径android-sdkplatformsandroid-17下面的 android.jar 和 uiautomator.jar 添
5、加进来:全部库添加完应当是这个样子:4.4、在 src 中添加包,然后添加 class 文件文件内容为:java view plaincopy1. package com;2. import com.android.uiautomator.core.uiobject;3. import com.android.uiautomator.core.uiobjectnotfoundexception;4. import com.android.uiautomator.core.uiscrollable;5. import com.android.uiautomator.core.uiselector
6、;6. import com.android.uiautomator.testrunner.uiautomatortestcase; 7.8. public class runner extends uiautomatortestcase 9.10. public void testdemo() throws uiobjectnotfoundexception 11. getuidevice().presshome();12. / 进入设置菜单13. uiobject settingapp = new uiobject(new uiselector().text(“settings“);14.
7、 settingapp.click();15. /休眠 3 秒16. try 17. thread.sleep(3000);18. catch (interruptedexception e1) 19. / todo auto-generated catch block20. e1.printstacktrace();21.22. / 进入语言和输入法设置23. uiscrollable settingitems = new uiscrollable( new uiselector().scrol lable(true);24.25. uiobject languageandinputitem
8、 = settingitems.getchildbytext(26. new uiselector().text(“language & input“), “language & input “, true);27. languageandinputitem.clickandwaitfornewwindow(); 28.29.30. 上面工程路径在e:workspaceautorunner,类全名为 com.runner,至于具体的作用我们现在不去关怀。4.5、找到 sdk idcmd 进入android-sdktools名目下,运行命令:android list查看 api
9、大于 15 的 sdk 的 id 值,当前是 6;4.6 、创建 build 文件仍旧在android-sdktools名目下,运行命令:android create uitest-project -n <name> -t <android-sdk-id> -p <path>比如:android create uitest-project -n autorunner -t 6 -p e:workspaceautorunner上面的 name 就是将来生成的jar 包的名字,可以自己定义,android-sdk-id 就是上面看到的 6;path 是eclip
10、se 新建的工程的路径;运行命令后,将会在工程的根名目下生成build.xml 文件。假如没生成,检查上面的步骤。4.7 、编译生成 jarcmd 进入项目的工程名目,然后运行ant build,将使用ant 编译生成jar,成功将会提示:然后会在 bin 名目下生成jar 文件。4.8 、push 并运行 jaradb push <jar 文件路径> data/local/tmpadb shell uiautomator runtest <jar 文件名> -c <工程中的类名,包含包名>比如:adb push e:workspaceautorunnerb
11、inautorunner.jar data/local/tmp adb shell uiautomator runtest autorunner.jar -c com.runner然后就能看到手机会依据runner 中的步骤自动执行。具体效果就是,进入设置菜单,然后再进入“语言和输入法”菜单五、代码分析我们从几个最重要的对象来介绍。5.1 、uidevice 对象getuidevice()的方法可以得到一个uidevice 的对象,通过这个对象可以完成一些针对设备的动作:click(int x, int y)-在(x,y)表示的像素地方点击pressback() pressdelete() p
12、ressenter() presshome() pressmenu() presssearch()-点击相应的按键wakeup()-当手机处于灭屏状态时,唤醒屏幕,并解锁。swipe(startx, starty, endx, endy, steps)-在手机上滑动,从(startx,starty)到(endx,endy)。steps 表示滑动的这个距离分为几步完成,数目越少,滑动幅度越大。setorientationleft() setorientationright()-将手机向相应方向旋转。setorientationnatural()-将手机旋转状态回归正常。5.2 、uiselect
13、or 对象这个对象可以理解为一种条件对象,描述的是一种条件,经常协作uiobject 使用,可以得到某个(某些)符合条件的控件对象。checked(boolean val)-描述一种check 状态为val 的关系。classname(classname)-描述一种类名为classname 的对象关系clickable(boolean val)-与 checked 类似,描述clickable 状态为val 的关系description(desc)-不解释descriptioncontains(desc)-与 description 类似focusable(boolean val)-与 che
14、cked 类似index(index)-用当前对象在父对象集中的索引作为描述packagename(string name)-用包名作为条件描述selected(val)-描述一种选择关系text(text)-最为常用的一种关系,用控件上的文本即可找到当前控件,需要留意,全部使用text属性找到的控件,必需是英文的。也就是说,不支持通过中文查找控件!textcontains(text)-与 text 类似textstartswith(text)-与 text 类似5.3 、uiobject 对象这个对象可以理解为控件的对象。一般一个uiobject 对象可以通过一下形式得到: uiobject
15、 mitem = new uiobject(new uiselector().text(“english“);也就是协作一个uiselector 就可以得到一个控件。click()-点击控件clickandwaitfornewwindow()-点击某个控件,并等待窗口刷新longclick()-长按cleartextfield()-清除文本,主要针对编辑框getchildcount()-这个方法可以看出,其实uiobject 也可以是一个控件的集合getpackagename()-得到控件的包名getselector()-得到当前控件的选择条件gettext()-得到控件上的textische
16、ckable() ischecked() isclickable() islongclickable() isscrollable()isscrollable() isselected()-推断是否具备某个属性5.4 、uicollection 对象这个对象可以理解为一个对象的集合。由于uiselector 描述后得到的有可能是多个满足条件的控件集合,因此可以用来生成uicollection:uicollection muicollection = new uicollection(new uiselector().text(“settings“); getchild(selector)-从集
17、合中再次通过uiselector 选择一个uiobject 对象getchildbydescription(childpattern, text)-从一个匹配模式中再次以text 为条件选择uiobject getchildbytext(childpattern, text)-与上面类似。getchildcount()-得到当前集合中控件的个数5.5 、uiscrollable 对象uiscrollable 可以生成一个滚动动作的对象,其最大的作用就是可以实现滚动的查找某个元素。比如在“设置”菜单中,“语言和输入法”这个菜单比较靠下,需要滚动后才可以看到(找到),因此就用上了uiscrolla
18、ble:java view plaincopy1. uiscrollable settingitems = new uiscrollable( new uiselector().scrollable(tr ue);2. uiobject languageandinputitem = settingitems.getchildbytext(3. new uiselector().text(“language & input“), “language & input“,4. true);上面的形式就可以在滚动中查找显示有“language & input”的控件,也就是“语
19、言和输入法”的设置项。5.6、等待操作和添加 log 的方法假如是对于一个标准的uiobject 对象,可以通过clickandwaitfornewwindow 的方法在点击之后主动等待一段大事,但是假如需要额外的等待一段时间,特别对于getuidevice().presshome();这种操作,可能需要很长的大事去为下一步操作猎取更多的大事,此时我们可以使用线程的sleep 方法去实现:java view plaincopy1. /等待 3 秒2. try 3. thread.sleep(3000);4. catch (interruptedexception e1) 5. e1.print
20、stacktrace(); 6. 而添加 log 的方法也可以通过java 标准的println 来实现: system.out.println(“this used to print some log!“ + setlanitem.gettext(); 以上 log 将会在jar 被运行时通过cmd 窗口打印出来。六、一个相对完整的测试 case下面就用一个相对连贯的测试用例来串一下上面的学问点,这个case 用例要做的就是进入系统设置菜单,然后选择“语言和输入法”菜单,然后进入“语言设置”菜单,然后在第一项上点击,把当前语言设置为“简体中文”:java view plaincopy1.2.
21、3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.public void setchineselan() throws uiobjectnotfoundexception /进入操作前,先用 home 键进入待机界面getuidevice().presshome();/进入“系统设置”菜单。也可以通过点击 menu 按键来实现uiobject settingapp = new uiobject(new uiselector().text(“settings“); settingapp.click();/等待 3 秒try thread.sleep(3000); catch (interruptedexception e1) e1.printstacktrace();/用滚动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南现代职业技术学院单招职业倾向性测试题库含答案详解(综合题)
- 2026年云南国防工业职业技术学院单招职业技能考试题库带答案详解(轻巧夺冠)
- 2026年上海电力大学单招职业倾向性考试题库及答案详解(夺冠系列)
- 2026年上饶卫生健康职业学院单招职业倾向性测试题库及完整答案详解1套
- 2026年临汾职业技术学院单招职业适应性考试题库及答案详解(各地真题)
- 2026年云南理工职业学院单招职业倾向性测试题库附答案详解(模拟题)
- 2026年九江理工职业学院单招职业适应性考试题库带答案详解(考试直接用)
- 2026年三门峡社会管理职业学院单招职业倾向性考试题库及完整答案详解一套
- 2026年九江职业大学单招职业倾向性测试题库含答案详解(达标题)
- 2026年云南能源职业技术学院单招职业技能考试题库带答案详解
- 2025-2026学年外研版(三起)(新教材)小学英语三年级下册教学计划附进度表
- 2025年律师事务所党支部书记年终述职报告
- 围术期精准管理:个体化麻醉与镇痛
- 泉州市2026届选优生选拔引进70人考试题库及答案1套
- 2025年中国家装行业白皮书(一起装)
- 2026年湖南理工职业技术学院单招职业倾向性考试题库附答案详解
- 高热患者液体管理策略
- 生产计划转正述职报告
- 硫酸镁使用方法
- 《无人机组装与调试》课程标准 -
- 2025年安徽省委党校在职研究生招生考试(政治理论)历年参考题库含答案详解(5套)
评论
0/150
提交评论