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 一出生到现在并没有非常 ...
 
随机推荐
- 关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录
			
原文我参见了:http://hi.baidu.com/setcookie/item/ddc6b694b1f13435336eeb3c 为毛我要费事的写下了,就是为了让自己记录一下,下面的也是直接摘录过 ...
 - CDN加速的实现 --- varnish
			
一.什么是CDN cdn全称为内容分发网络(Content Delivery Network).基本思想是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,是内容传输地更快.更稳定.通过在 ...
 - Python中函数练习
			
练习1:编写一个函数,接收一个字符串参数,返回一个元组(第一个元素为大写字母的个数,第二个元素为小写字母的个数) 解析: 练习二:编写函数,计算字符串匹配的准确率(orginStr为原始内容,use ...
 - .net的session详解
			
http://blog.csdn.net/justin_wkf/article/details/5746914#comments
 - java正则匹配多个子字符串样例
			
文本内容: 上海市黄浦区瑞典江苏省无锡市广东省深圳市南山区 我希望分别将字符串中的省份,城市名,城区名匹配出来,如匹配不出来就默认放在省份中. public static HashMap<Str ...
 - C语言学习之指针
			
指针这块,看了好久才有点头绪,稍微有点理解了. 一.指针申明以及赋值 int *p; 这样就声明了一个int型的指针p,这个p就是指针变量,可能上述的书写方式会混淆我们队指针的理解(*号) 我们可以这 ...
 - MFC CListControl 点击列头排序的实现
			
SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这 ...
 - 《Tomcat内核设计剖析》勘误表
			
<Tomcat内核设计剖析>勘误表 书中第95页图request部分印成了reqiest. 书中第311页两个tomcat3,其中一个应为tomcat4. 书中第5页URL应为URI. 书 ...
 - SpreadJS 在 Angular2 中支持绑定哪些属性?
			
SpreadJS 纯前端表格控件是基于 HTML5 的 JavaScript 电子表格和网格功能控件,提供了完备的公式引擎.排序.过滤.输入控件.数据可视化.Excel 导入/导出等功能,适用于 .N ...
 - Django model.py表单设置默认值允许为空
			
blank=True 默认值为blank=Flase,表示默认不允许为空, blank=True admin级别可以为空 null=True 默认值为null=Flase,表示默认不允许为空 nu ...