一、点击与长按

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. Laxcus大数据操作系统单机集群版

    Laxcus大数据管理系统是我们Laxcus大数据实验室历时5年,全体系全功能设计研发的大数据产品,目前的最新版本是2.1版本.从三年前的1.0版本开始,Laxcus大数据系统投入到多个大数据和云计算 ...

  2. 剑指 Offer——数字在排序数组中出现的次数

    1. 题目 2. 解答 时间复杂度为 \(O(n)\) 的算法,顺序遍历数组,当该数字第一次出现时开始记录次数. class Solution { public: int GetNumberOfK(v ...

  3. win10 tomcat不能访问问题

    问题描述:电脑是Win10系统的,安装了Tomcat后,本机通过80端口能顺利访问.但局域网内的其他机器却无法访问这台电脑的Tomcat服务. 故障分析: 将防火墙关闭后,可以访问,所以问题就出在防火 ...

  4. Github二次学习

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频内容:https://www ...

  5. HTML5 本地裁剪上传图片

    很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...

  6. Right-BICEP 测试四则运算程序

    测试方法:      Right-BICEP 测试计划: 1.边界测试是否正确 2.负数表示是否实现 3.是否有乘除法 4.是否可以选择题目数量 5.是否有输出方式 6.是否有括号 7.是否有重复查询 ...

  7. BETA版本前冲刺准备

    [团队概要] 团队项目名:小葵日记 团队名:日不落战队 队员及角色: 队员 角色 备注 安琪 前端工程师 队长 佳莹 前端工程师 智慧 后端工程师 章鹏 后端工程师 语恳 UI设计师 炜坤 前端工程师 ...

  8. erlang init:stop()不起效

    http://blog.equanimity.nl/blog/2015/03/15/erlang-one-weird-trick-goodiebag/ http://erlang.org/piperm ...

  9. java 基础 --Collection(Map)

    Map是不是集合?哈哈哈 java编程思想>的第11章,第216页,正数第13行,中原文:“……其中基本的类型是LIst.Set.Queue和Map.这些对象类型也称为集合类,但由于Java类库 ...

  10. 解决 Package test is missing dependencies for the following libraries: libcrypto.so.1.0.0

    根据项目要求需要用到openssl这个库,看了看编译环境幸好本身就集成了该库.但在编译openssl的功能时,碰到缺少类库的错误. Package test is missing dependenci ...