Android App开发的自动化测试框架UI Automator使用教程

UI Automator为Android程序的UI开发提供了测试环境,这里我们就来看一下Android App开发的自动化测试框架UI Automator使用教程,需要的朋友可以参考下

Android的自动化测试有很多框架,其中ui automator是google官方提供的黑盒UI相关的自动化测试工具,(GitHub主页:case使用java写,今天实践了一下官方文档中样例程序,其中还是有一些小问题需要总结一下的。
环境准备:
1.JDK(是的,你没看错,基础的android开发环境必备),以及对应的环境变量配置,不会的可以自己百度下下
2.Android Studio(IDE尊崇个人意愿)
3.android SDK以及配置
4.ANT(主要用于build我们的脚本,生成jar包)
ant的搭建主要分几步:
1.下载ant安装文件并且解压安装;
2.新建系统环境变量ANT_HOME,参数值是你的ant安装目录;
3.在Path环境变量中添加ant安装目录的bin文件夹,比如我的就是C:\cod\apache-ant-1.9.6\bin
4.配置完以后,测试一下,在命令行下输入ant -version,如果显示你所安装的ant版本信息,证明环境变量配置成功

使用流程
1、使用ADT创建一个java的项目
在创建项目的时候要加上JUnit与你使用的Android platforms中对应的android.jar与uiautomator.jar

2016711171444606.png (638×286)

2、新建一个包(我这里就只叫com)
3、再这个包下创建一个class,输入以下java代码,代码全是官方文档上的代码,除了最上面的package

package com;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 Runer extends UiAutomatorTestCase {  public void testDemo() throws UiObjectNotFoundException {  // Simulate a short press on the HOME button.getUiDevice().pressHome();// We're now in the home screen. Next, we want to simulate // a user bringing up the All Apps screen.// If you use the uiautomatorviewer tool to capture a snapshot // of the Home screen, notice that the All Apps button's // content-description property has the value “Apps”. We can // use this property to create a UiSelector to find the button. UiObject allAppsButton = new UiObject(new UiSelector().description("Apps"));// Simulate a click to bring up the All Apps screen.allAppsButton.clickAndWaitForNewWindow();// In the All Apps screen, the Settings app is located in // the Apps tab. To simulate the user bringing up the Apps tab,// we create a UiSelector to find a tab with the text // label “Apps”.UiObject appsTab = new UiObject(new UiSelector().text("Apps"));// Simulate a click to enter the Apps tab.appsTab.click();// Next, in the apps tabs, we can simulate a user swiping until// they come to the Settings app icon. Since the container view // is scrollable, we can use a UiScrollable object.UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));// Set the swiping mode to horizontal (the default is vertical)appViews.setAsHorizontalList();// Create a UiSelector to find the Settings app and simulate   // a user click to launch the app. UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Settings");settingsApp.clickAndWaitForNewWindow();// Validate that the package name is the expected oneUiObject settingsValidation = new UiObject(new UiSelector().packageName("com.android.settings"));assertTrue("Unable to detect Settings", settingsValidation.exists()); UiObject reportBug = new UiObject(new UiSelector().text("Sound"));reportBug.clickAndWaitForNewWindow();UiObject soundValidation = new UiObject(new UiSelector().text("Volumes"));assertTrue("Unable to detect Sound", soundValidation.exists()); getUiDevice().pressHome();}  
}

4、使用ant工具生成build.xml
我这里在使用ADT自已的ant插件时提示

build.xml:26: Class not found: javac1.8

网上查了查,是插件与我java环境不符,下载最新的ant插件就可以了http://ant.apache.org/bindownload.cgi 

2016711171556435.png (540×271)

下载这个tar.gz包,解压,然后将apache-ant-1.9.4\bin目录添加到环境变量PATH中
然后cmd到android sdk的tools目录,使用andrlid list命令,记住你将要在模拟器中运行的(也是你刚刚导入android.jar与uiautomator.jar包时所在的platforms)
在cmd下使用

android create uitest-project -n <name> -t <android-sdk-ID> -p <path>

-n 为生成的jar包名称,自已任意定义,
-t 为上面查看到的值,我这里是1
-p 为输出路径,这里就是刚才创建的java项目所在的路径

android create uitest-project -n AutoRunner -t 1 -p D:\myAndroidStudy\androidTest

然后再cmd进入D:\myAndroidStudy\androidTest,使用ant build命令生成AutoRunner.jar文件
5、将这个AutoRunner.jar文件push到模拟器中

adb push AutoRunner.jar /data/local/tmp

6、使用

adb shell uiautomator runtest AutoRunner.jar –c com.Runer 

使Runer类运行

2016711171651759.png (654×321)

我的代码里又在官方基础上多了一个点击”sound”的操作与点击Home键操作

 UiObject reportBug = new UiObject(new UiSelector().text("Sound"));reportBug.clickAndWaitForNewWindow();UiObject soundValidation = new UiObject(new UiSelector().text("Volumes"));assertTrue("Unable to detect Sound", soundValidation.exists()); getUiDevice().pressHome();image

2016711171931815.png (517×470)

这个其实也只是一个简单的玩具代码,没有什么意义,但是官方作为一个引导,其中也使用了一些最常见的接口。以后再深入的学习uiautomator

总结
优点:
1.可以对所有操作进行自动化,操作简单;
2.不需要对被测程序进行重签名,且,可以测试所有设备上的程序,比如~某APP,比如~拨号,比如~发信息等等
3.对于控件定位,要比robotium简单一点点
缺点:
1.uiautomator需要android level 16以上才可以使用,因为在level 16及以上的API里面才带有uiautomator工具
2.如果想要使用resource-id定位控件,则需要level 18及以上才可以
3.对中文支持不好(不代表不支持,第三方jar可以实现)
4.个人感觉,控件定位不如robotium那样层级分明,仅仅个人感觉,用户行为注入还是和插桩有点点区别的

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【进程和线程】操作系统中的并发执行机制

目录 一、什么是进程(Process)&#xff1f; 进程的管理 进程调度(重点) 二、什么是线程(Thread)&#xff1f; 三、进程和线程的区别与联系 进程(Process) 线程(Thread) 总结比较 一、什么是进程(Process)&#xff1f; 进程和线程是操作系统中一个非常核心的话题&#…

【LeetCode】回溯

labuladong回溯 回溯算法秒杀所有排列-组合-子集问题 回溯 一个回溯问题&#xff0c;实际上就是遍历一棵决策树的过程&#xff0c;树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍&#xff0c;把叶子节点上的答案都收集起来&#xff0c;就能得到所有的合法答案。 站…

CCF-CSP认证考试 202305-3 解压缩 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202305-3 解压缩 时间限制&#xff1a; 5.0s 内存限制&#xff1a; 512.0MB 题目背景 西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业。在公司内&#xff0c;…

上海晋名室外暂存柜助力新技术皮革制品生产行业安全

本周上海晋名又有一台室外危化品暂存柜项目通过验收&#xff0c;此次项目主要用于新技术皮革制品生产行业油桶、化学品等物资的室外暂存安全。 用户单位创立于2004年&#xff0c;是一家从事新技术皮革制品加工、生产的外资企业。 上海晋名作为一家专注工业安全防护领域&#…

python中医学习服务管理系统flask-django-php-nodejs

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的中医学习服务管理系统。当前的信息管理存在工作…

面向对象的三大特性-----封装、继承、多态(Java篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…

ngrok实现内网穿透

在使用jenkins进行自动化部署时&#xff0c;需要设置github的webhook钩子来触发构建&#xff0c;由于jenkins运行在自己的电脑上&#xff0c;因此需要通过内网穿透来接受http请求。 Install ngrok via Homebrew with the following command: brew install ngrok/ngrok/ngrokP…

Linux基础命令[20]-useradd

文章目录 1. useradd 命令说明2. useradd 命令语法3. useradd 命令示例3.1 不加参数3.2 -d&#xff08;指定家目录&#xff09;3.3 -g&#xff08;指定用户组&#xff09;3.4 -G&#xff08;指定附属组&#xff09;3.5 -p&#xff08;加密密码&#xff09;3.6 -e&#xff08;指…

【WEEK4】 【DAY3】整合SSM框架之功能实现—修改、删除数据【中文版】

2024.3.20 Wednesday 接上文【WEEK4】 【DAY2】整合SSM框架之功能实现—总览、添加数据【中文版】 目录 7.6.修改功能7.6.1.修改BookController.java7.6.2.修改allBook.jsp7.6.3.新建updateBook.jsp7.6.4.修改MyBatis-config.xml7.6.5.运行 7.7.删除功能7.7.1.修改BookContro…

【数据库系统】数据库完整性和安全性

第六章 数据库完整性和安全性 基本内容 安全性&#xff1b;完整性&#xff1b;数据库恢复技术&#xff1b;SQL Server的数据恢复机制&#xff1b; 完整性 实体完整性、参照完整性、用户自定义完整性 安全性 身份验证权限控制事务日志&#xff0c;审计数据加密 数据库恢复 冗余…

JavaWeb:AOP、配置优先级、Bean管理、SpringBoot原理、Maven高级

1 AOP 1.1 基本语法 面向切面编程、面向方面编程&#xff0c;面向特定方法编程 在管理bean对象的过程中&#xff0c;主要通过底层的动态代理机制&#xff0c;对特定的方法进行编程 应用&#xff1a;统计每一个业务方法的执行耗时 xml引入依赖 <!-- AOP-->&l…

音视频开发_FFmpeg基石精讲

FFmpeg 框架 核心组件 libavcodec&#xff1a;一个编解码库&#xff0c;包含了众多的编码器和解码器用于编码和解码音视频流。libavformat&#xff1a;一个封装格式库&#xff0c;用于处理各种音视频封装格式。libavutil&#xff1a;一个工具库&#xff0c;提供了常见功能的简…

牛客周赛 Round 37 E.魔法之森的蘑菇

广搜板子&#xff0c;加个方向就好了 注意多测清空问题 #include<bits/stdc.h> using namespace std; using ll long long; #define int long long const int N 1e510; const int inf 0x3f3f3f3f; const int mod 1e97;int n,m; char g[1010][1010]; bool vis[1010][1…

CI/CD实战-jenkins部署 3

安装 软件下载地址&#xff1a;Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 启动服务 安装推荐插件 不新建用户&#xff0c;使用admin账号登录 修改一下初始密码 新建项目测试 安装git命令 生成密钥 在gitlab中上传公钥 修改ssh 创建中…

蓝桥杯(3.22 刷真题)

P8682 [蓝桥杯 2019 省 B] 等差数列 RE是因为除以0的情况 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n1];for(int i1;i&l…

城管智慧执法系统源码有演示,自主研发,功能完善,正版授权,可商用上项目。

城管智慧执法系统源码有演示&#xff0c;自主研发&#xff0c;功能完善&#xff0c;正版授权&#xff0c;可商用上项目。 一套数字化的城管综合执法办案系统源码&#xff0c;提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺视频智能分析等功能&#xff0c;全面赋能…

软考 网络工程师 每日学习打卡 2024/3/22

学习内容 第9章 网络操作系统与应用服务器 本章主要讲解&#xff1a;了Windows和Linux操作系统的基础知识&#xff0c;并详细讲述了常用的各种服务器的 配置方法。这一章的内容主要是在具体操作方面&#xff0c;网络工程师要能够熟练地配置各种网络服务 器&#xff0c;排除网络…

(2024,Mamba,DiT,之字扫描与空间连续性)ZigMa:之字形 Mamba 扩散模型

ZigMa: Zigzag Mamba Diffusion Model 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 背景&#xff1a;状态空间模型 3.2 扩散主干&…

6.shell case控制语句

case控制语句 1.什么是case case条件语句相当于多分支的if/elif/else条件语句&#xff0c;主要还是用来做条件判断的,常被应用于实现系统服务启动脚本。 case语句中&#xff0c;会将case获取的变量值与表达式部分的值1、值2、值3等逐个进行比较&#xff0c;如果变量值和某个表…

【算法刷题】Day33

文章目录 1. 最长湍流子数组题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码&#xff1a; 2. 最长递增子序列题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺…