3.UiObejct API 详细介绍
一、点击与长按
1.组件区域位置关系:
Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标)
2.点击与长按相关API:
| 返回值 | API | 说明 |
|---|---|---|
| boolean | click() | 点击对象 |
| boolean | clickAndWaitForNewWindow(long time out) | 点击对象,等待新窗口出现,参数为等待超时时常 |
| boolean | clickAndWaitForNewWindow() | 点击对象,等待新窗口出现(默认超时5.5s) |
| boolean | clickBottomRight() | 点击对象的右下角 |
| boolean | clickTopLeft() | 点击对象的左上角 |
| boolean | longClick() | 对对象执行长按操作 |
| boolean | longClickBottomRight() | 长按对象的右下角 |
| boolean | longClickTopLeft() | 长按对象的左上角 |
例如:
public void testDemo1() throws UiObjectNotFoundException{
UiObject clock=new UiObject(new UiSelector()
.resourceId("com.android.deskclock:id/analog_appwidget"));
clock.click();//点击对象中点
UiDevice.getInstance().pressBack();
clock.clickAndWaitForNewWindow(10000);//点击对象,等待新窗口出现,时间为10s
UiDevice.getInstance().pressBack();
clock.clickAndWaitForNewWindow();//点击对象,等待新窗口出现,时间为默认时间5.5s
UiDevice.getInstance().pressBack();
clock.clickBottomRight();//点击右下角
UiDevice.getInstance().pressBack();
clock.clickTopLeft();//点击左上角
UiDevice.getInstance().pressBack();
clock.longClick();//长按(如果想要增加长按时间可以使用swipe)
}
二、拖拽与滑动
//可以拖拽到一个点或一个组件上;可以上下左右滑动一段距离
1.拖拽与滑动相关API
| 返回值 | API | 说明 |
|---|---|---|
| boolean | dragTo(UiObject destObj,int steps) | 拖拽对象到另一对象位置上 |
| boolean | dragTo(int destX,int destY,int steps) | 拖拽对象到屏幕某个坐标位置上 |
| boolean | swipeDown(int steps) | 拖拽对象向下滑动 |
| boolean | swipeLeft(int steps) | 拖拽对象向左滑动 |
| boolean | swipeRight(int steps) | 拖拽对象向右滑动 |
| boolean | swipeUp(int steps) | 拖拽对象向上滑动 |
例如:
public void testDemo2() throws UiObjectNotFoundException, RemoteException{
UiObject object1=new UiObject(new UiSelector().text("相机"));
//将对象拖拽到指定坐标
object1.dragTo((128-64)/2+64,417-100, 20);
//将对象拖拽到指定对象位置上
UiObject object2=new UiObject(new UiSelector().text("短信"));
object1.dragTo(object2, 5);//补偿越短越容易出现两个对象互换位置的情况
//swipe(杀进程操作演示)
UiDevice.getInstance().pressRecentApps();//点开最近使用程序员
UiObject object3=new UiObject(new UiSelector()
.resourceId("com.android.systemui:id/app_thumbnail_image"));
object3.swipeLeft(10);//向左滑动关闭进程
}
三、输入文本与清除文本
| 返回值 | API | 说明 |
|---|---|---|
| boolean | setText(String text) | 在对象中输入文本(只能输入英文) |
| void | clearTextFiled() | 清除编辑框中的文本 |
示例一:
public void testDemo3() throws UiObjectNotFoundException{
UiObject setText=new UiObject(new UiSelector()
.resourceId("com.android.mms:id/embedded_text_editor"));
setText.setText("123abc");//输入文本
sleep(2000);
setText.clearTextField();//清除文本
}
注意事项:
1.他的输入步骤是先长按来选中要输入的文本框,然后输入文本,但是若在文本框已有文本的情况下输入文本会丢失原文本,也就是说他会先长按要输入的文本框,这样就执行了全选操作,然后再进行输入文本的操作,这样原先的文本就没有了
2.他的清除步骤是先长按来全选文本—然后点Del键
3.可能不同的输入框会出现不同的情况,解决方法参考示例二
示例二:
public void testDemo3() throws UiObjectNotFoundException{
//获取接收者
UiObject i=new UiObject(new UiSelector()
.resourceId("com.android.mms:id/recipients_editor"));
UiObject i1=new UiObject(new UiSelector().text("接收者"));
i.setText("iiiiiiiiii");//输入文本"iiiiiiii"
//将光标移动至行尾,然后循环删除,直至文本框变为默认的"接受者"为止
while (!i1.exists()){
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_DEL);
}
}
四、获取对象属性与属性判断
1.获取对象的属性
| 返回值 | API | 说明 |
|---|---|---|
| Rect | getBounds() | 获得对象矩形坐标,矩形左上角坐标与右下角坐标 |
| int | getChildCount() | 获得下一级子类数量 |
| String | getClassName() | 获得对象类名属性的类名文本 |
| String | getContentDescription() | 获得对象的描述属性的描述文本 |
| String | getPackageName() | 获得对象包名属性的包名文本 |
| String | getText() | 获得对象的文本属性中的文本 |
| Rect | getVisibleBounds() | 返回可见视图的范围,如果视图部分是可见的,只有可见部分报告的范围 |
例如:
public void testDemo4() throws UiObjectNotFoundException{
// 获取信息栏的好友框
UiObject i=new UiObject(new UiSelector().resourceId("com.android.mms:id/recipients_editor"));
String rec=i.getText();//获取文本
System.out.println("Text is : "+rec);//输出文本
assertEquals("接收者", rec);//对比文本(预期值,实际值)
System.out.println("Class name is : "+i.getClassName());//输出并输出类名
System.out.println("Child cound is : "+i.getChildCount());//输出下一级子类数量
System.out.println("Bound left is : "+i.getBounds().left);//输出对象矩形左坐标
System.out.println("Content description is : "+i.getContentDescription());//输出对象的描述属性的描述文本
System.out.println("Package name is : "+i.getPackageName());//输出对象包名
System.out.println("Visible bounds right is : "+i.getVisibleBounds().right);//输出可见范围的右边视图
}
2.获取父类与子类节点
| 返回值 | API | 说明 |
|---|---|---|
| UiObject | getChild(UiSelector selector) | 获得对象的子类对象,可以递归获取子孙当中某个对象 |
| UiObject | getFromPrent(UiSelector selector) | 从父类获取子类,按照UiSelector获取兄弟类(递归) |
例如:
public void testDemo5() throws UiObjectNotFoundException{
//getChild()
//定位父类
UiObject down =new UiObject(new UiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
.index(3));
//定位子类
UiObject download=down.getChild(new UiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_item_name"));
//点击
download.click();
sleep(2000);
UiDevice.getInstance().pressBack();
//getFromParent()
定位兄弟父类
UiObject down =new UiObject(new UiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
.index(3));
//定位要点击的父类的兄弟类
UiObject music=down.getFromParent(new UiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
.index(5));
//点击
music.click();
}
3.属性的判断
| 返回值 | API | 说明 |
|---|---|---|
| boolean | isCheckable() | 检查对象的checkable属性是否为true |
| boolean | isChecked() | 检查对象的checked属性是否为true |
| boolean | isClickable() | 检查对象的clickable属性是否为true |
| boolean | isEnabled() | 检查对象的enabled属性是否为true |
| boolean | isFocusable() | 检查对象的focusable属性是否为true |
| boolean | isFocused() | 检查对象的focused属性是否为true |
| boolean | isLongClickable() | 检查对象的longclickable属性是否为true |
| boolean | isScrollable() | 检查对象的scrollable属性是否为true |
| boolean | isSelected() | 检查兑现给的selected属性是否为true |
例如:
public void testDemo6() throws UiObjectNotFoundException{
//找到对象
UiObject wlan=new UiObject(new UiSelector()
.resourceId("com.android.settings:id/switchWidget")
.instance(0));
//如果wlan.isCheckable()为false则开启
if(!wlan.isCheckable()){
wlan.click();
}
}
五、手势的操作
1.手势操作相关API
| 返回值 | API | 说明 |
|---|---|---|
| boolean | performMultiPointerGesture(pointerCoords[]…touches) | 执行单手指触控手势,可定义任意手势与形状 |
| boolean | performTwoPointerGesture(Point startPoint1,Point startPoint2,Point endPoint1,Point endPoint2,int steps) | 执行任意两个手指指控手势,模拟两个手指手势 |
| boolean | pinchIn(int percent,int steps) | 手势操作,两点向内收缩(百分比,步数) |
| boolean | pinchOut(int percent,int steps) | 手势操作,两点向外张开(百分比,步数) |
例如:
public void testDemo7() throws UiObjectNotFoundException{
//选中被操作目标
UiObject web=new UiObject(new UiSelector().className("android.widget.FrameLayout"));
web.pinchOut(80, 20);//以20步的速度两点向外扩张80%(也就是放大)
sleep(2000);
web.pinchIn(80, 20);//以20步的速度两点向内扩张80%(也就是缩小)
//声明变量
Point startPoint1,startPoint2,endPoint1,endPoint2;
startPoint1 = new Point();
startPoint2=new Point();
endPoint1=new Point();
endPoint2=new Point();
//自定义起点区域
startPoint1.x=15;startPoint1.y=156;
startPoint2.x=30;startPoint2.y=173;
//自定义终点区域
endPoint1.x=215;endPoint1.y=156;
endPoint1.x=230;endPoint1.y=173;
//模拟两个手指从左向右滑动
web.performTwoPointerGesture(startPoint1,startPoint2,endPoint1,endPoint2,20);
}
六、判断对象是否存在
1.判断对象是否存在相关API
| 返回值 | API | 说明 |
|---|---|---|
| boolean | waitForExists(long timeout) | 等待对象出现 |
| boolean | waitUntilGone(long timeout) | 等待对象消失 |
| boolean | exists() | 检查对象是否存在 |
例如:
public void testDemo8() throws UiObjectNotFoundException{
//点击联系人--判断是否有联系人,没有则创建联系人
//获取联系人对象
UiObject LianXiRen=new UiObject(new UiSelector().text("联系人"));
//判断联系对象是否存在,如果存在则点击
if(LianXiRen.exists()){
LianXiRen.click();
}
UiObject create=new UiObject(new UiSelector().text("创建新联系人"));
//等待5秒判断是否有[创建新联系人]按钮,如果有则说明界面内没有联系人
if(create.waitForExists(5000)){
System.out.println("没有联系人,需要创建");
create.click();
}
//开始创建步骤...
}
3.UiObejct API 详细介绍的更多相关文章
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- 7.Configurator API 详细介绍
一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...
- 6.UiWatcher API 详细介绍
Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...
- 5.UiScrollable API 详细介绍
Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...
- 4.UiCollection API 详细介绍
一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...
- 2.UiSelector API 详细介绍
一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...
- 1.UiDevice API 详细介绍
1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...
- 百度地图API详细介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- HTML5全屏(Fullscreen)API详细介绍
// 整个页面 onclick= launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...
随机推荐
- Amazon - removed your selling privileges and placed a temporary hold on any funds - 1
Hello, We are writing to let you know that we have removed your selling privileges and placed a temp ...
- python基础知识-04-字符串列表元组
python其他知识目录 内存,cpu,硬盘,解释器 实时翻译 编译器 :一次性翻译python2,3 除法,2不能得小数,3能得小数 1.字符串操作 1.1字符串操作startswith start ...
- strace 命令
介绍 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...
- “Hello World!”团队第五周第三次会议
今天是我们团队“Hello World!”团队第五周召开的第三次会议. 双十一大家过的怎么样?由于组内其他成员被“剁手”,今日会议记录由我来写. 博客内容: 一.会议时间 二.会议地点 三.会议成员 ...
- RIGHT-BICEP测试第二次
1.Right-结果是否正确? 正确 2.B-是否所有的边界条件都是正确的? 正确 3.P-是否满足性能要求? 部分满足 4.是否满足有无括号? 无 5.数字个数是否不超过十? 只是双目运算 6.能否 ...
- lintcode-205-区间最小数
205-区间最小数 给定一个整数数组(下标由 0 到 n-1,其中 n 表示数组的规模),以及一个查询列表.每一个查询列表有两个整数 [start, end]. 对于每个查询,计算出数组中从下标 st ...
- 03_Java基础语法_第3天(Scanner、Random、流程控制语句)_讲义
今日内容介绍 1.引用类型变量的创建及使用 2.流程控制语句之选择语句 3.流程控制语句之循环语句 4.循环高级 01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scan ...
- Java 异常注意事项
异常的注意事项: 1,子类在覆盖父类方法时,父类的方法如果抛出了异常, 那么子类的方法只能抛出父类的异常或者该异常的子类. 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集. ...
- TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR
一.概述 FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进. 从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢 ...
- JQuery EasyUI 引用加载分析
easyui是什么,就不介绍了,接触到前端的就算没用过,肯定也应该听说过.其次,本文不是介绍它提供如calendar.tree等这些功能如何使用的,这些官网上介绍都很详细,中文的网上也不少.本文是从e ...