Uiautomator 2.0之UiObject2类学习小记
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类学习小记的更多相关文章
- Uiautomator 2.0之BySelector类学习小记
1. BySelector与By静态类 1.1 BySelector类为指定搜索条件进行匹配UI元素, 通过UiDevice.findObject(BySelector)方式进行使用. 1.2 By类 ...
- Uiautomator 2.0之Until类学习小记
1. 状态条件-Uiobject2Condtion 1.1 一个UiObject2Condition代表UiObject2满足某个条件的特定状态,主要用于获取到组件释放处于某种状态. 1.2 简单示例 ...
- Uiautomator 2.0之UiWatcher类学习小记
1. 主要功能 使用此方法可以处理中断问题,从而保证测试用例的正常运行. 2. 相关API API 说明 registerWatcher (String name, UiWatcher watcher ...
- Uiautomator 2.0之Configrator类学习小记
1. Configration类介绍 1.1. Configrator用于设置脚本动作的默认延时 1.2 Configrator功能: 1.2.1 可调节两个模拟动作之间的默认间隔 1.2.2 可调 ...
- CSS学习小记
搜狗主页页面CSS学习小记 1.边框的处理 要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...
- mongodb入门学习小记
Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...
- 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)
原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- Uiautomator - 6.0 以上权限受限问题
问题:在android studio中使用UiAutomator 2.0 编写测试用例时,要实现截图(非命令方式),写入文件时出现权限被拒绝的提示.例如: java.io.FileNotFoundEx ...
随机推荐
- Jekyll 安装权限问题 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/jekyll
OS X El Capitan 新特性(System Integrity Protection or SIP)中加强了权限,但是可以对这里进行操作 /usr/local/bin 可以尝试使用以下指令进 ...
- 基于Unity有限状态机框架
这个框架是Unity wiki上的框架.网址:http://wiki.unity3d.com/index.php/Finite_State_Machine 这就相当于是“模板”吧,自己写的代码,写啥都 ...
- Linux Shell中单引号、双引号、反引号的区别【转载】
linux shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符` 1. 单引号 ( '' )# grep Susan phonebook Sus ...
- bzoj 3821: 玄学
题目大意 有一个长度为 n 数列,有若干个事件,事件分为操作和询问两种, 一次操作是把数列[l...r] 区间中的每个元素x变成 ax + b mod p. 一次询问是询问 执行了 第l 次到第r次操 ...
- String对象方法扩展
/** *字符串-格式化 */ String.prototype.format = function(){ var args = arguments;//获取函数传递参数数组,以便在replace回调 ...
- 验证mongodb主从复制过程~记录操作
接 mongodb的安装:http://www.cnblogs.com/myrunning/p/4319367.html 1.1创建数据目录 在这里我们将不使用mongodb的配置文件启动mongod ...
- chrome浏览器js 导出excel
<table id="table"> <tr> <th>ID</th> <th>姓名</th> <th ...
- String.Format 格式说明
C#格式化数值结果表 字符 说明 示例 输出 C 货币 string.Format("{0:C3}", 2) $2.000 D 十进制 string.Format("{0 ...
- 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...
- actor concurrency
The hardware we rely on is changing rapidly as ever-faster chips are replaced by ever-increasing num ...