Ui"三重天"之重温Uiaumator(1)
移动端自动化技术和接口自动化技术是接下来需要深究和拓展的两方面,基于之前的薄弱基础,重温一波,本篇内容便是android UI自动化框架Uiautomantor1.
介于对移动端自动化并没有实际应用的尴尬处境,还是以<精通APP自动化测试>一书中的Uiaumator章节进行操作,也是将前面一篇落地。
环境搭建:
1、JDK
2、Android SDK
具体的环境变量配置便不再多记。
开发编译工具为eclipse。(可自定义)
众所周知,UI自动化技术核心点还是定位元素,此处当然也不例外,定位元素的方式有很多,有工具、代码等等;此处用的是Android SDK自带的UiautomatorViewer。
(Android SDK安装成功)位置在${android_home}\tools下:

启动成功:

这个是该出识别页面元素的控件,当然也有很多控件可以识别,此处便以Uiautomator Viewer为例。切记该控件是不能满足所有的页面元素识别条件的。
操作步骤:
1、环境搭建成功(JDK 和android SDK),下载android版本。
2、手机连接电脑,adb devices确认是否连接成功。(手机打开开发者模式,USB调试)

3、打开Uiautomator Viewer,点击该按钮,让控件同步手机页面信息。


可以看到,同步到了手机页面元素(微信登录页面)
4、使用eclipse创建类,切记类继承UiAutomatorTestCase类
插入一段简单的代码:(点击、等待)
package com.kaola; import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase; import android.os.RemoteException; public class login extends UiAutomatorTestCase {
public void testlogin() throws UiObjectNotFoundException,RemoteException{
UiDevice device = getUiDevice();
device.pressHome();
device.wakeUp(); UiObject kaola = new UiObject(new UiSelector().className("android.widget.TextView").index(8));
assertTrue("There has not be found",kaola.exists());
kaola.click(); sleep(2000); UiObject login = new UiObject(new UiSelector().className("android.widget.RelativeLayout").index(1));
assertTrue("There has not be Find", login.exists());
login.click(); sleep(3000); UiObject login1 = new UiObject(new UiSelector().className(" android.widget.ImageView").resourceId("com.beihui.market:id/iv_tab_fg_news_web_user"));
assertTrue("There has not be Find", login1.exists());
login1.click();
}
}
一一来进行分解:
UiDevice device = getUiDevice();
device.pressHome();
device.wakeUp();
这段代码其作用在于获取到设备、点击home键和唤醒屏幕。
UiObject kaola = new UiObject(new UiSelector().className("android.widget.TextView").index(8));
assertTrue("There has not be found",kaola.exists());
kaola.click();
实例化kaola 对象,className为对象类名,index为索引。

此处有好多中定位方法,但是切记要唯一!
下方的assertTrue为断言
实例化对象click,点击!
脚本的灵活度还是需要自己去慢慢积累。
5、脚本编写完成后,为项目创建build.xml等文件。
命令:android create uitest-project -n <name> -t <android-sdk-ID> -p <path>
此处的<android-sdk-ID> 可使用android list target来进行获取。

6、创建成功时候,刷新项目,修改build.xml文件的help为build,使用ant进行构建。

修改完成,右键build.xml文件Ant build进行构建。

将文件构建成jar包。

7、将jar包发送至手机,运行。
发送命令:adb push D:\eclipse\work_space\Uiautomator\bin\Uiautomator.jar data/local/tmp
运行命令:adb shell uiautomator runtest Uiautomator.jar -c com.kaola.login
----------------------------------------------------------------------------------------------------------------------------------
OK、日后有关Uiaumator、或者移动端自动化有心得便记下来。
Ui"三重天"之重温Uiaumator(1)的更多相关文章
- UI“三重天”之Selenium(一)
关注一下UI自动化,记一记笔记. UI自动化的优缺点: 关于UI自动化的优缺点想来大家都有了解,优点:解放人力(并不是完全解放),用机器(涵盖工具.脚本等)代替人工完成测试工作,将测试用例转化为脚本实 ...
- UI“三重天”之实践Uiautomator1
说起来Uiautomator也有一年没碰过了.借此来回顾.总结一下. 也是阅读<精通APP自动化测试>一书.实践出真知的一个框架.编写了部分移动端UI自动化脚本.后续再深入学习. 虽然现在 ...
- UI“三重天”之appium(一)
官方介绍: Appium is an open-source tool for automating native, mobile web, and hybrid applications on iO ...
- UI“三重天”之selenium--常用API和问题处理(三)
Selenium常用API: 前面两篇示例代码中用到了一些selenium的API方法,例如定位元素的八种方法.访问url.等待.操作浏览器.获取title.点击.清理等等. 有关于selenium的 ...
- UI“三重天”之selenium--封装(二)
基础示例代码: /** * @author Richered **/ package com.sample; import org.openqa.selenium.By; import org.ope ...
- 那些年我们写过的三重循环----CodeForces 295B Greg and Graph 重温Floyd算法
Greg and Graph time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...
- 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...
- 转帖:用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托 ...
- Android 高级UI设计笔记07:RecyclerView 的详解
1. 使用RecyclerView 在 Android 应用程序中列表是一个非常重要的控件,适用场合非常多,如新闻列表.应用列表.消息列表等等,但是从Android 一出生到现在并没有非常 ...
随机推荐
- Android学习笔记①——安卓工具的基本安装
安卓已经出来很长时间了,网上的教程也有很多,怕以后忘记,就把网上大牛们的分享的知识自己在学习一下,也记录一下,如果能帮到别人,那是更好不过的! 鉴于现在的IDE工具来说,IDEA已经占据了java的半 ...
- Flask框架中特有的变量/函数及上下文
模板中特有的变量和函数 你可以在自己的模板中访问一些 Flask 默认内置的函数和对象 config 你可以从模板中直接访问Flask当前的config对象: {{config.SQLALCHEMY_ ...
- losetup命令
Linux losetup命令用于设置循环设备. 循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用. 语法 losetup [ ...
- 缺少所需的CD/DVD驱动器设备驱动程序
公司买了个服务器想把自带系统win10 改成windows server 2008 于是,我就用我的u盘做了个系统盘(用UltraISO或者别的,网上很多在此不在赘述) 然后改了启动项,进入到系统安装 ...
- MySQL在本机无法基于localhost访问的问题解决
引言: 在本地访问数据库之时,一般使用localhost, 127.0.0.1来进行数据库访问,但是笔者这几天就碰到了只能通过127.0.0.1来访问,但是无法基于localhost来访问,非常之诡异 ...
- webpack 分析
编译后 自动打开浏览器 可视 //npm install --save-dev webpack-bundle-analyzer //webpack.base.conf.js const BundleA ...
- Maven部署Jetty服务器pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- C++中atof函数的实现和atoi的实现
在C++中有两个系统函数可以实现字符串转浮点型和字符串转整形,下面实现一下这两个函数. #include <iostream> #include <string> using ...
- 每天一个linux命令:【转载】more命令
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- BZOJ1066 SCOI2007 蜥蜴 【网络流-最大流】
BZOJ1066 SCOI2007 蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离 ...