第五章 APP元素定位

------手机自动化测试之Robotium

自动化测试定位是第一步的,如果要测试的元素都定位不到,其他的操作将无从谈起。对于页面自动化测试,Selenium IDE可以很好地帮大家完成测试步骤的录制,查看元素的属性,同时可以方便地转换成各种测试脚本语言。那么APP有没有类似的工具呢?有,可是没有Selenium IDE这么强大,那就是SDK自带的UIAutomatorViewer

5.1 UIAutomatorViewer讲解

UIAutomatorViewerSDK自带的一个APP元素查看工具,通过这个工具我们可以查看一下App view上面的元素的属性,然后再利用Robotium solo的各种API来对元素进行定位操作。下面我们介绍一下UIAutomatorViewer如何使用。

(1)将测试机连接到电脑上,并且将被测试的App签名后安装的测试机上。

(2)打开我们安装的SDK文件夹,在\sdk\tools下找到批处理文件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的地几行进行定位。

ASolo.clickInList(int line):指定行数进行定位。

BSolo.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”);

BSolo.getView(Class viewClass, int index),利用Class定位。如:

view = solo.getView(TextView.class,1);

solo.clickOnView(view);

点击从0开始的第1TextView类型的控件

(5)   无需定位的操作

我们常用到的两个系统控件是不需要定位的,一个是系统的Menu键,一个是系统的goBack

(6)   其他一些儿定位操作

有些儿特殊的操作,比如说拖动操作,滑动操作,可能需要在屏上从一个位置向另一个位置滑动。此时我们需要定位屏幕坐标,然后模拟点击。这时需要打开手机的一些儿特殊功能,或是下载辅助软件来检测屏蔽上的坐标。

5.3 App元素定位技巧

由于元素的定位方法不止一种,所以当我们找到欲定位的元素时,需要有目的地选择定位方法,这样才能达到高效,准确的定位。以我的个人经验来讲,有如下几个技巧可以参考:

(1)文本定位必须确保文本唯一。

Robotium用文本定位是非常方便的,我们可以用来执行操作,或是判断测试用例执行的结果。可是在操作之前我们必须确保在要操作文本在View中唯一,不管是什么样式的文本,都不能相同,否则就会定位错误。

(2)建议多使用属性,少使用顺序操作。

因为元素的属性一般都是唯一的,而且不会经常变动,这是自动化测试定位选择的标准。如果用顺序来定位的话,要定位的元素前面同类的元素有变化时就会影响到定位。属性定位相当于相对路径,顺序定位相当于绝对路径,其中的优劣一目了然。

(3)勇于尝试不同的方法。

   元素的定位没有通用的方法,不可能某一种方法适合所有的元素定位。所以要尝试各种定位方法,这种不行,换下一种,无非也就是反复运行调试程序嘛,要学习到真本事,就不要怕麻烦嘛!

(4)勤于总结,做好笔记。

  程序员都不爱写文档,认为写程序嘛,解决问题了程序运行速度快没有Bug就行了。殊不知好的文档也是程序的一部分嘛,平时遇到的问题不总结,下次再遇到了又得麻烦着去查找半天,影响效率。就算你的程序写的再牛,除了你没有人能看懂,不利于团队开发,发展空间也是很小的。所以要养成勤于总结,做好相应的文档。

5.4 本章小结

     本章我们讲解了App元素的定位工具UIAutomatorViewer的使用,以及Robotium框架的定位方法,最后还介绍了元素定位的一些儿技巧。通过本章的学习,我们可以更好的编写我们的测试用例,可是好的自动化测试是要有组织的去回归被测对象。下面的章节我们讲述如何组织测试用例,如何有针对的回归被测对象。

 

posted @ 2015-04-21 14:22  潜龙9527  阅读(156)  评论(0编辑  收藏  举报