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 一出生到现在并没有非常 ...
随机推荐
- Yii2学习笔记:汉化yii,设置表单的描述(属性标签attributeLabels)
一:汉化框架 框架汉化在这里设置,如果不生效,前台后台的配置文件都设置下应该就可以了 二:汉化表单 汉化表单,直接在模型层设置,例如: 原来的联系我们表单 汉化后: ] 这种汉化在哪里修改呢?其实是设 ...
- 随手写的一个检测php连接mysql的小脚本
最近偶然接触到一点点的php开发,要用到mysql数据库,由于mysql和php版本的关系,php5里面连接函数有mysql_connect(),mysqli_connect()两种,php7中又使用 ...
- html hidefocus="true"
最近学到html,看到别人写的代码带hidefocus="true",查了一下是使超链接不显示周围的虚线. hideFocus即隐藏聚焦,具有使对象聚焦失效的功能,其功能相当于: ...
- d3.js(v5.7)的attr()函数完善(添加obj支持)
因为习惯了jquery的attr(obj)批量添加属性,所以刚开始看到d3为dom添加属性要一个一个添加的时候真的是十分想吐槽,既然想实现attr(obj),根据传入对象的键值对批量添加dom属性,那 ...
- BMI计算器
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- JPA无法删除对象【实际项目解决办法】
并非通用, 根据自己实际情况来 不能删除前的dao方法 public void delete(CmsProjectNew bean); 可以删除后的dao方法 @Modifying @Query(&q ...
- java web构建学习(概念基础)
1.什么是Java Web Application 一个Java web应用程序生成交互式web页面包含各种类型的标记语言(HTML.XML等)和动态内容.它通常由web组件例如JavaServer ...
- Codeforces 382E Ksenia and Combinatorics 【组合计数】*
Codeforces 382E Ksenia and Combinatorics Ksenia has her winter exams. Today she is learning combinat ...
- 微信小程序(2)——新建页面
在当前版本中,我们可以快速的新建并且新建页面. 在app.json文件中输入 { "pages":[ "pages/index/index" ] } 输入&qu ...
- MATLAB自带工具箱实现PCA降维代码
PCA基本流程: 1.训练集矩阵算协方差矩阵A; 2.算协方差矩阵特征值与特征向量; 3.按特征值的大小排列特征矩阵,得B,对应的特征值(按从大到小排列)组成向量a; 4.A*B得到去关联的新矩阵C, ...