1. 基础动作

1.1. 相关API介绍

API 说明
clear() 清楚编辑框内的内容
click() 点击一个对象
clickAndWait(EventCondition<R> condition, long timeout) 点击一个对象然后等待在超时的时间内条件满足则通过,否则抛出异常
drag(Point dest, int speed) 自定义速度拖拽这个对象到指定位置
drag(Point dest) 拖拽这个对象到指定位置
longClick() 长按某个对象
scroll(Direction direction, float percent) 对该对象执行一个滚动操作
scroll(Direction direction, float percent, int speed) 自定义速度,对该对象执行一个滚动操作
setText(String text) 设置文本内容
legacySetText(String text) 通过发送keycode,设置文本内容

1.2 简单示例

  @Test
public void testCase05() throws InterruptedException {
/**
* 发现UiObject2中的setText()方法还是无法直接输入中文,需要借助外部方法库.
*/
UiObject2 editText = mDevice.findObject(By.clazz(EditText.class));
editText.setText(Utf7ImeHelper.e("测试")); UiObject2 appIcon = mDevice.findObject(By.text("联系人"));
Point desPoint = new Point();
desPoint.x = 654;
desPoint.y = 1066;
appIcon.drag(desPoint, 2000); UiObject2 appBtn = mDevice.findObject(By.text("联系人"));
appBtn.longClick(); UiObject2 listView = mDevice.findObject(By.res("android:id/list"));
listView.scroll(Direction.DOWN, 0.8f, 3000); UiObject2 smsBtn = mDevice.findObject(By.text("短信"));
smsBtn.clickAndWait(Until.newWindow(), 2000);
}

2. 手势动作模拟

2.1 相关API

API 说明
pinchClose(float percent, int speed) 自定义速度执行收缩手势
pinchClose(float percent) 执行收缩手势
pinchOpen(float percent, int speed) 自定义速度执行展开手势
pinchOpen(float percent) 执行展开手势
fling(Direction direction) 执行一个扫动手势,Direction代表为起点方向
fling(Direction direction, int speed) 自定义速度,执行一个扫动手势
swipe(Direction direction, float percent, int speed) 执行一个滑动操作,可自定义滑动距离和速度
swipe(Direction direction, float percent) 执行一个滑动操作
setGestureMargin(int margin) 以像素为单位,设置手势边缘
setGestureMargins(int left, int top, int right, int bottom) 以像素为单位,设置手势边缘

2.2 简单示例

 @Test
public void testCase06() throws InterruptedException {
UiObject2 pic = mDevice.findObject(By.res("com.miui.gallery:id/single_view_other"));
pic.pinchOpen(0.8f, 2000);
Thread.sleep(1000);
pic.pinchClose(0.8f, 2000); UiObject2 contactList = mDevice.findObject(By.res("android:id/list"));
contactList.fling(Direction.DOWN);
Thread.sleep(1000);
contactList.fling(Direction.UP,3000); UiObject2 listView = mDevice.findObject(By.res("android:id/list"));
listView.swipe(Direction.UP,0.5f, 3000);
Thread.sleep(1500);
listView.setGestureMargin(100);
listView.swipe(Direction.DOWN,0.5f, 3000);
}

3. 获取层级与条件判断

3.1相关API

API 说明
findObject(BySelector selector) 搜索在这个对象之下的所有元素,并返回第一个与搜索条件匹配的
findObjects(BySelector selector) 搜索在这个对象之下的所有元素,并返回所有与搜索条件匹配的
getChildCount() 返回这个对象直属子元素的数量
getChildren() 返回这个对象下的直接子元素的集合
getParent() 返回该对象的父类
equals(Object object) 比较两个对象是否相等
hashCode() 获取对象的哈希码
hasObject(BySelector selector) 返回该对象是否存在
recycle() 回收该对象
wait(UiObject2Condition<R> condition, long timeout) 等待条件被满足
wait(SearchCondition<R> condition, long timeout) 等待条件被满足

3.2 简单示例

 @Test
public void testCase07(){
UiObject2 list = mDevice.findObject(By.res("android:id/list"));
UiObject2 child = list.findObject(By.clazz(TextView.class));
Log.i("testCase07", child.getText()); List<UiObject2> lisCollect = mDevice.findObjects(By.clazz(TextView.class));
int count = lisCollect.size();
Log.i("testCase07", String.valueOf(count));
for (UiObject2 obj:lisCollect) {
Log.i("testCase07", obj.getText());
} List<UiObject2> childList = list.getChildren();
int childCount = childList.size();
Log.i("testCase07", String.valueOf(childCount));
for (UiObject2 obj:childList) {
Log.i("testCase07", obj.getText());
} UiObject2 childElement = mDevice.findObject(By.text("联系人"));
childElement.getParent().click();
}

原创:http://blog.csdn.net/swordgirl2011/article/details/50993157

Uiautomator 2.0之UiObject2类学习小记的更多相关文章

  1. Uiautomator 2.0之BySelector类学习小记

    1. BySelector与By静态类 1.1 BySelector类为指定搜索条件进行匹配UI元素, 通过UiDevice.findObject(BySelector)方式进行使用. 1.2 By类 ...

  2. Uiautomator 2.0之Until类学习小记

    1. 状态条件-Uiobject2Condtion 1.1 一个UiObject2Condition代表UiObject2满足某个条件的特定状态,主要用于获取到组件释放处于某种状态. 1.2 简单示例 ...

  3. Uiautomator 2.0之UiWatcher类学习小记

    1. 主要功能 使用此方法可以处理中断问题,从而保证测试用例的正常运行. 2. 相关API API 说明 registerWatcher (String name, UiWatcher watcher ...

  4. Uiautomator 2.0之Configrator类学习小记

    1. Configration类介绍 1.1. Configrator用于设置脚本动作的默认延时 1.2  Configrator功能: 1.2.1 可调节两个模拟动作之间的默认间隔 1.2.2 可调 ...

  5. CSS学习小记

    搜狗主页页面CSS学习小记 1.边框的处理   要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...

  6. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  7. 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...

  8. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  9. Uiautomator - 6.0 以上权限受限问题

    问题:在android studio中使用UiAutomator 2.0 编写测试用例时,要实现截图(非命令方式),写入文件时出现权限被拒绝的提示.例如: java.io.FileNotFoundEx ...

随机推荐

  1. C#获取当前程序运行路径的方法集合

    //获取当前进程的完整路径,包含文件名(进程名).string str = this.GetType().Assembly.Location;result: X:\xxx\xxx\xxx.exe (. ...

  2. ajax请求action返回json数据

    1,服务端: HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(&q ...

  3. 在CentOS下利用Python+selenium获取腾讯首页的今日话题。

    1.安装依赖包 yum install wget firefox gcc zlib zlib-devel Xvfb 2.安装setuptools 官网地址:https://pypi.python.or ...

  4. 微信小程序火车票查询 直取12306数据

    最终效果图: 样式丑哭了,我毕竟不是前端,宗旨就是练练手,体验微信小程序的开发,以最直接的方式获取12306数据查询火车票. 目录结构: search1是出发站列表,search2是目的站列表,命名没 ...

  5. WebRTC通信流程

    WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频对聊功能.而且WebRTC项目是开源的,我们可以借助WebRTC源码快速构 ...

  6. C++:为什么说 goto 没有用

    要了解一个功能有没有用,首先应该分析它能实现的所有功能. goto 可以实现的功能只有两种:一,向前面跳:二,向后面跳.这两种情况对应三种功能:一,重复执行也就是循环:二,跳过一段代码也就是条件判断: ...

  7. ruby开发环境配置

    环境:win7 64位 软件:Ruby2.2.5,devkit对应版本,rubygems,rails 一:安装Ruby 1.在这个网站:http://rubyinstaller.org/downloa ...

  8. HDU 2227 Find the nondecreasing subsequences (DP+树状数组+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 Find the nondecreasing subsequences             ...

  9. 公司培训 oracle( 第一天)

    以前在学校学习Oracle的时候就对rowid 和rownum 这两个伪列有很大的疑惑,今天公司对16届新员工进行公司内部技术培训,课堂上的讲解,又让我想起来了曾经的疑惑点, 我想不能在让这个疑惑继续 ...

  10. angularjs服务-service

    Service 的特性 ①service都是单例的 ②service由$injector 负责实例化 ③service在整个应用的声明周期中存在,可以用来共享数据 ④在需要使用的地方利用依赖注入ser ...