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. gem安装cocoapods

    1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPods时我们要访问cocoap ...

  2. asp.net,cookie,写cookie,取cookie

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

  3. js get browser vertion (js获取浏览器信息版本)

    1问题:js get browser vertion (js获取浏览器信息版本) 2解决方案 Copy this script into your JavaScript files. It works ...

  4. 强制 history 不记住特定的命令

    使用 HISTCONTROL 强制 history 不记住特定的命令将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格: # export HISTCON ...

  5. sublime 安装 插件

    从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去并 enter 执行,不出意外即完成安装.以下提供 ST3 和 ...

  6. web前端笔试选择题

    1. 要动态改变层中内容可以使用的方法有(AB ) a)innerHTML b)innerText c)通过设置层的隐藏和显示来实现 d)通过设置层的样式属性的display属性 2. 当按键盘A时, ...

  7. 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!

    项目要求: 网站能够使用PC.ipad.mobile phone正常访问 页面PSD版式宽度分别为1024px和750px 参考资料 使用CSS3 Media Queries,其作用就是允许添加表达式 ...

  8. vs2012 打开解决方案崩溃或者点击项目崩溃

    报错: 问题签名:  问题事件名称: CLR20r3 解决方案: 步骤1:开始-->所有程序-->Microsoft Visual Studio 2012-->Visual Stud ...

  9. WebService的工作原理

    Web Service全称XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP ...

  10. 最小生成树 prime zoj1586

    题意:在n个星球,每2个星球之间的联通需要依靠一个网络适配器,每个星球喜欢的网络适配器的价钱不同,先给你一个n,然后n个数,代表第i个星球喜爱的网络适配器的价钱,然后给出一个矩阵M[i][j]代表第i ...