------手机自动化测试之Robotium
自动化测试定位是第一步的,如果要测试的元素都定位不到,其他的操作将无从谈起。对于页面自动化测试,Selenium IDE可以很好地帮大家完成测试步骤的录制,查看元素的属性,同时可以方便地转换成各种测试脚本语言。那么APP有没有类似的工具呢?有,可是没有Selenium IDE这么强大,那就是SDK自带的UIAutomatorViewer。
5.1 UIAutomatorViewer讲解
UIAutomatorViewer是SDK自带的一个APP元素查看工具,通过这个工具我们可以查看一下App view上面的元素的属性,然后再利用Robotium solo的各种API来对元素进行定位操作。下面我们介绍一下UIAutomatorViewer如何使用。
(1)将测试机连接到电脑上,并且将被测试的App签名后安装的测试机上。
(2)打开我们安装的SDK文件夹,在sdk ools下找到批处理文件uiautomatorviewer.bat,运行这个文件,就会打开如图5.1.1所示的界面。
图5.1.1 uiautomatorviewer运行界面
(3)在手机运行要测试的App,如众筹网,单击uiautomatorviewer界面上的“Device ScreenShot”按钮,就可以提取手机当前界面。如图5.1.2所示:
图5.1.2 获取手机屏幕
(4)当获取完成后,我们就可以查看手机上App运行的当前View,要查看某个元素,在左侧单击这个元素,右侧会显示这个元素的属性。如图5.1.3所示:
图5.1.3 查看View元素
由于UIAutomatorViewer没有办法记录测试的操作步骤,所以我们只能根据测试用例来自己编写测试步骤。针对要测试的元素,我们先查找到这个元素的属性,再利用solo函数来对其进行定位。
5.2 常用的定位方法
App元素定位方式很多,我们可以根据需要来进行选择,最常用的有以下几种:
(1) 根据控件文本信息进行定位
A, 直接根据控件显示文本进行定位的,如solo.clickOnText("text1");和assertTrue(solo.searchText("text1"));
B, 根据文本显示信息加上附加条件进行定位。如:Solo.clickOnText(String text, int match)和Solo.clickOnText(String text, int match, boolean scroll),text要匹配的文本,match符合条件的第n个元素,scroll,是否向下。
(2) ListView子控件定位
如果要定位的控件是在一个List View里面的,那么除了可以使用以上的text方式进行定位之外,我们还可以通过指定控件在该ListView的地几行进行定位。
A,Solo.clickInList(int line):指定行数进行定位。
B,Solo.clickInList(int line, int index):同时指定第几个ListView的第几行进行定位.其中第一个参数是行数,第二个参数指的是第几个ListView,按照我的经验,就是基于1,界面从左到右从上到下的顺序这个ListView所处的位置。
(3) 通过控件的排列顺序来定位
在View中有多个相同的元素,我们就可以利用其排列顺序来进行对其定位,如:
Solo.clickOnCheckBox(int index);
Solo.clickOnEditText(int index)
Solo.clickOnImage(int index)
Solo.clickOnImageButton(int index)
Solo.clickOnRadioButton(int index)
还有我们上一章讲的实例中使用到的:
EditText editname=solo.getEditText(0);
solo.enterText(editname, "183****905");
EditText editpsd=solo.getEditText(1);
solo.enterText(editpsd, "a0****0");
(4) 通过控件的内部属性来定位
Robotium只支持通过两种控件内部属性来定位控件:ResrouceId:可以是字符串类型(通过UIAutomatorViewer获得)也可以是整型(通过R.java文件获得)。ClassName:控件的Class(可以通过UIAutomatorViewer获得),不过注意不是字符串,而是真实的class。
A,如我们上面定位示例中的众筹网的登录用户名输入框,其ResrouceId为:com.subject.zhongchou:id/loginnumber_phones,则定位方法可以如下:
TextView view;
view=(TextView)solo.getView(“com.subject.zhongchou:id/loginnumber_phones”);
B,Solo.getView(Class viewClass, int index),利用Class定位。如:
view = solo.getView(TextView.class,1);
solo.clickOnView(view);
点击从0开始的第1个TextView类型的控件
(5) 无需定位的操作
我们常用到的两个系统控件是不需要定位的,一个是系统的Menu键,一个是系统的goBack。
(6) 其他一些儿定位操作
有些儿特殊的操作,比如说拖动操作,滑动操作,可能需要在屏上从一个位置向另一个位置滑动。此时我们需要定位屏幕坐标,然后模拟点击。这时需要打开手机的一些儿特殊功能,或是下载辅助软件来检测屏蔽上的坐标。
5.3 App元素定位技巧
由于元素的定位方法不止一种,所以当我们找到欲定位的元素时,需要有目的地选择定位方法,这样才能达到高效,准确的定位。以我的个人经验来讲,有如下几个技巧可以参考:
(1)文本定位必须确保文本唯一。
Robotium用文本定位是非常方便的,我们可以用来执行操作,或是判断测试用例执行的结果。可是在操作之前我们必须确保在要操作文本在View中唯一,不管是什么样式的文本,都不能相同,否则就会定位错误。
(2)建议多使用属性,少使用顺序操作。
因为元素的属性一般都是唯一的,而且不会经常变动,这是自动化测试定位选择的标准。如果用顺序来定位的话,要定位的元素前面同类的元素有变化时就会影响到定位。属性定位相当于相对路径,顺序定位相当于绝对路径,其中的优劣一目了然。
(3)勇于尝试不同的方法。
元素的定位没有通用的方法,不可能某一种方法适合所有的元素定位。所以要尝试各种定位方法,这种不行,换下一种,无非也就是反复运行调试程序嘛,要学习到真本事,就不要怕麻烦嘛!
(4)勤于总结,做好笔记。
程序员都不爱写文档,认为写程序嘛,解决问题了程序运行速度快没有Bug就行了。殊不知好的文档也是程序的一部分嘛,平时遇到的问题不总结,下次再遇到了又得麻烦着去查找半天,影响效率。就算你的程序写的再牛,除了你没有人能看懂,不利于团队开发,发展空间也是很小的。所以要养成勤于总结,做好相应的文档。
5.4 本章小结
本章我们讲解了App元素的定位工具UIAutomatorViewer的使用,以及Robotium框架的定位方法,最后还介绍了元素定位的一些儿技巧。通过本章的学习,我们可以更好的编写我们的测试用例,可是好的自动化测试是要有组织的去回归被测对象。下面的章节我们讲述如何组织测试用例,如何有针对的回归被测对象。