【Android测试】【第十一节】Uiautomator——简介

时间:2021-07-29 15:39:28

版权声明:本文出自胖喵~的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/4872244.html

前言


  在App的测试中,除了单元测试来保证Andr​​oid应用程序的各个组件(例如activities、services和content providers),测试用户在应用程序界面的行为也是非常重要的一部分。UI测试(UI Testing)可确保用户在一系列操作过程中(例如键盘输入、点击菜单、弹出对话框、图像显示以及其他UI控件的改变),你的应用程序做出正确的UI响应

  谷歌UI测试(UI Testing)文档:http://android.toolib.net/tools/testing/testing_ui.html  

  UI测试(功能测试、黑盒测试)不需要测试者了解应用程序的内部实现细节,只需要知道当执行了某些特定的动作后是否会得到其预期的输出。这种测试方法,在团队合作中可以更好地分离的开发和测试角色。

  常见的UI测试的方法是手动去执行,然后去验证程序是否达到的预期的效果,很显然这种方法耗时、繁琐并且很容易出错。因此我们需要一种可靠的方法来进行UI测试,通过测试框架,我们可以完成针对具体使用场景的测试用例,然后可以循环的、自动的来运行我们的测试case

概述


  Android的SDk提供了以下的工具来支持我们进行UI自动化测试:

    uiautomatorviewer:一个用来扫描和分析Android应用程序的UI控件的GUI工具。

    uiautomator:一个包含创建测试、执行自动化测试API的java库。(照例送上谷歌Uiautomator文档:http://android.toolib.net/tools/help/uiautomator/index.html 

  要使用这些工具,你必须安装Android开发工具以下版本:

  Android SDK Tools:API 21 版本或者21以上版本;

  Android SDK Platform:API 16 版本或者16以上版本.

Uiautomator测试框架的工作流程

  下面是自动UI测试所需的步骤的简短概述:

  1、安装待测应用到手机,通过uiautomatorviewer分析应用程序界面的控件,并确保应用程序的控件可以被自动化框架访问。

  2、创建自动化测试用例来模拟你和应用程序之间交​​互的步骤。

  3、将测试用例编译成一个JAR文件,并发动到应用程序安装的那台测试设备​上。

  4、运行测试,查看测试结果。

  5、修改测试过程中发现的bug。

分析控件


  在你开始写测试用例之前,使用uiautomatorviewer可以帮助你熟悉你的UI组件(包括视图和控件)。你可以使用它对当前连接到你电脑上的手机屏幕进行一个快照,然后可以看到手机当前页面的层级关系每个控件的属性。利用这些信息,你可以写出针对特定UI控件的测试用例。

  在 ..\sdk\tools\ 目录下打开 uiautomatorviewer.bat (打开前请手机连接电脑)

【Android测试】【第十一节】Uiautomator——简介

  

  想必大家看了上面的动态图,基本上已经了解了一些用法了吧,我再进一步说明一下:

  1、获取快照

    当你要分析一个页面时,首先将手机的页面停留在你要分析的页面,然后用数据线连接电脑。然后点击uiautomatorviewer左上角的第二个图标按钮 【Android测试】【第十一节】Uiautomator——简介Device Screenshot,点击之后会将当前手机界面的快照更新到这里来。

  2、页面层级

    右上方的整个区域,就是当前页面布局的层级关系。如果对Android五大布局比较熟悉的话,理解这一层应该不是问题。

  3、不可用区域

    右上方的整个区域中的第二个按钮【Android测试】【第十一节】Uiautomator——简介Toggle NAF Nodes,按下后出现的黄色区域代表,这些控件是不被Uiautomator工具识别,无法获取到这些控件的实例。以QQ首页为例。

【Android测试】【第十一节】Uiautomator——简介

    我们可以看到,当按下该按钮的时候,下方的三个tab出现黄色区域,这就代表这三个区域的控件,如果你想通过Uiautomator提供的API来获得他们的属性,或者对其进行点击操作,是做不到的,因为你没办法拿到这些控件的实例。

  4、属性详情

    右下方的整个区域,是当前选中的页面或者是控件的属性信息。这部分比较重要,我们以后写代码的时候就是需要通过查看属性中的控件的id或者是text等来获取控件的实例,然后点击操作它。

    以QQ左上角的头像控件为例:

【Android测试】【第十一节】Uiautomator——简介

    点击左上角的头像控件之后,右下方区域就会显示这个控件的详细信息。比如这里我们可以得知它的resource-id就是com.tencent.mobileqq:id/conversation_head。

    然后利用Uiautomator的API方法就可以得到该控件的实例。

// 通过id来创建出UiSelector 对象
UiSelector = new UiSelector().resourceId("com.tencent.mobileqq:id/conversation_head");
// 通过UiSelector 对象 创建出 UiObject 对象
UiObject switcher = new UiObject(uiSelector );
// 判断该控件是否存在
if (switcher.exists())
{
//点击该控件
switcher.click();
}

    上面的方法就是知道了该控件的id之后,模拟点击该控件的过程,当然Uiautomator还提供了根据text来获取控件。

    这种点击的方法比起Monkeyrunner来说它的好处就是:Monkeyrunner是坐标点击,当一个脚本写好后,换一个分辨率的手机去执行,点击的位置可能就会出错,而Uiautomator点击是先找到该控件,然后再点击该控件,因此可移植性比Monkeyrunner要好;另外代码的易读性也更好一些

环境搭建


  网上关于环境搭建的内容很多,也非常的详细,这里我就简单的说下大体流程和注意事项吧。   随手找了一个别人写的环境搭建的文章。直接参考即可: http://www.testwo.com/blog/7057

  1、在Eclipse中建立一个Java的工程。

  2、右键选中你建立的工程,在Properties > Java Build Path中:

    a、点击 Add Library > JUnit 添加JUnit3/4

    b、点击Add External JARs... 导入 uiautomator.jar and android.jar 这两个jar包。

    这里需要注意,导入这两个jar包的时候,注意Android的版本号,后面生成build.xml的时候需要知道你导入的这两个jar是哪个sdk版本的。

  3、导入成功之后,就可以写代码了。代码的格式参考下面:

package com.uia.example.my;

// Import the uiautomator libraries
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class yourclass extends UiAutomatorTestCase { public void testDemo() throws UiObjectNotFoundException { // 测试代码 }
}

  4、使用 android create uitest-project -n %工程名% -t 5 -p %工程目录% 来生存build.xml文件。

    需要注意的就是 这里的 -t 后面的 5 就是Android list后对应的你当初引入两个jar包的sdk版本对应的id。我的是 id: 5 or "android-19",所以我这里是5

    【Android测试】【第十一节】Uiautomator——简介

  5、生成的build.xml 用ant工具进行编译。编译后会生成“工程名.jar”包(注意这里需要使用 ant build命令来打包,这样有错误可以看到);

  6、将该jar包push到手机的 /data/local/tmp 目录下

  7、在adb shell 中执行: uiautomator runtest 工程名.jar -c 包名.类名

  

  执行之后就可以,看到自动执行的效果了。下节将重点讲解如何写Uiautomator的代码。

【Android测试】【第十一节】Uiautomator——简介的更多相关文章

  1. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  2. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

  3. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  4. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  5. 【Android测试】【第十二节】Uiautomator——API详解

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4921701.html 简单的例子 以一个 ...

  6. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

  7. Android测试工具 UIAutomator介绍

    UI Automator 测试工具定义以及用途 UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试.通过 UI Automator API,您可以执 ...

  8. 【Android测试】【第六节】Monkey——认识和使用

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4688880.html 自动化工具 接触安 ...

  9. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

随机推荐

  1. 安卓DJ113舞曲网应用客户端 项目源码(服务器+客户端)

    Android DJ113舞曲网app客户端 播放器源码  项目源码(服务器+客户端),这个项目整体有点类似天天动听的效果,非常漂亮的,支持第三方登录等功能,非常完整的一个音乐项目. 源码下载:htt ...

  2. cocos2d-x之首选项数据初试

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...

  3. vm上安装ubuntu

    图解演示环境版本: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS  (请点击这里)先下载好iso镜像文 ...

  4. io scheduler

    http://doctorlzr1988.blog.163.com/blog/static/50456520201051905236683/

  5. ES6的介绍和常用语法

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 ECMAScript 是 JS 的语言标准.而 ES6 是新的 J ...

  6. 使用Java API连接和操作HBase数据库

    创建的数据库存储如下数据 表结构 java代码 public class HbaseTest { /** * 配置ss */ static Configuration config = null; p ...

  7. springboot整合mybatics PLUS

    首先添加maven依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactI ...

  8. python 模块之-json

    python 模块json import json x="[null,true,false,1]" print(json.loads(x))   #---------------- ...

  9. 安装 pygame,找不到Python version 2&period;7

    今天在安装pygame时出错,提示“Python version 2.7 required, which was not found in the registry”,经过网上查找资料后发现只需要新建 ...

  10. 前端之javascript的数据类型1和BOM对象

    一 js对象 BOM对象:browser object model浏览器模型对象 window对象:定时器 DOM对象:文档对象模型 js对象:字符串对象,数组对象,日期对象,math对象 new关键 ...