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(); }