zoukankan      html  css  js  c++  java
  • 第五章 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 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的地几行进行定位。

    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框架的定位方法,最后还介绍了元素定位的一些儿技巧。通过本章的学习,我们可以更好的编写我们的测试用例,可是好的自动化测试是要有组织的去回归被测对象。下面的章节我们讲述如何组织测试用例,如何有针对的回归被测对象。

  • 相关阅读:
    AngularJS 1.x系列:AngularJS过滤器(4)
    AngularJS 1.x系列:AngularJS控制器(3)
    AngularJS 1.x系列:AngularJS简介及第一个应用(2)
    AngularJS 1.x系列:Node.js安装及npm常用命令(1)
    MySQL系列:索引基本操作(4)
    基于 Mathematica 的机器人仿真环境(机械臂篇)[转]
    使用耳切法将多边形三角化【转】
    asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。【转】
    ASP.NET与非托管DLL的那些事儿【转+增】
    cesium常用设置【转】
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520834.html
Copyright © 2011-2022 走看看