一、点击与长按

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 详细介绍的更多相关文章

  1. 腾讯微博java(android)sdk新增微博api详细介绍

    本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...

  2. 7.Configurator API 详细介绍

    一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...

  3. 6.UiWatcher API 详细介绍

    Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...

  4. 5.UiScrollable API 详细介绍

    Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...

  5. 4.UiCollection API 详细介绍

    一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...

  6. 2.UiSelector API 详细介绍

    一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...

  7. 1.UiDevice API 详细介绍

    1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...

  8. 百度地图API详细介绍

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  9. HTML5全屏(Fullscreen)API详细介绍

    // 整个页面 onclick=   launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...

随机推荐

  1. 论文笔记:Fully-Convolutional Siamese Networks for Object Tracking

    Fully-Convolutional Siamese Networks for Object Tracking 本文作者提出一个全卷积Siamese跟踪网络,该网络有两个分支,一个是上一帧的目标,一 ...

  2. Spark SQL、DataFrame和Dataset——转载

    转载自:  Spark SQL.DataFrame和Datase

  3. 手机上Uncaught ReferenceError: __WEBPACK_AMD_DEFINE_ARRAY__ is not defined的错误

    问题: vue2.0和webpack2.X的写的项目在电脑的浏览器上打开正常,在手机浏览器中访问页面的时候不能正常显示,空白. 通过chrome的真机调试chrome://inspect/#devic ...

  4. "助成"招聘网站视频简介

    我们小组为我们的作品录制了一个一分多钟的电梯介绍视频,这是视频连接,我上传到了优酷上:http://v.youku.com/v_show/id_XMzIzMTc1ODc2NA==.html?spm=a ...

  5. 第三次c++作业

    https://github.com/egoistor/3Elevators-scheduling 老实说,因为这周时间紧张,(高数的期中考和一些奇奇怪怪的时期), 所以代码大体是有,但是很多细节处理 ...

  6. StringBuilder、StringBuffer和String三者的联系和区别

    String 类    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间.    String a = "a ...

  7. 初识 es6之 const

    const声明一个只读的常量.一旦声明,常量的值就不能改变. 例子: const a=12; a=2;//报错,const 声明的是常量,不能改 const声明的变量不得改变值,这意味着,const一 ...

  8. 找"数学口袋精灵"bug

    团队成员的博客园地址: 刘森松:http://home.cnblogs.com/u/lssh/ 郭志豪:http://home.cnblogs.com/u/gzh13692021053/ 谭宇森:ht ...

  9. 3.结对编程成果报告(小学生四则运算的出题程序,Java实现)

    程序名称:小学生四则运算的出题程序 先附上代码: package com.makequestion; import java.text.DecimalFormat;import java.util.R ...

  10. webpack打包多html开发案例

    简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...