一、点击与长按

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. mac安装php分词工具xunsearch出现找不到bio.h的解决办法

    下载xunsearch后安装出现如下错误,在xunsearch官方论坛未找到答案,此方案不仅用于参考解决安装xunsearch,其它编辑安装出现的问题同样可以参考 -n Checking scws . ...

  2. 18软工实践-第八次作业(课堂实战)-项目UML设计(团队)

    目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...

  3. 博弈--ZOJ 3084 S-Nim(SG)

    题意: 首先输入K 表示一个集合的大小  之后输入集合 表示对于这对石子只能去这个集合中的元素的个数 之后输入 一个m 表示接下来对于这个集合要进行m次询问  之后m行 每行输入一个n 表示有n个堆  ...

  4. Python数据挖掘学习路程--起步

    一.首先第一步我去了解了Python开发环境:Python(程序运行基础的解释器)+第三方类库(功能扩展)+编辑器(提高代码编辑效率) 编辑器有:Pycharm.Spyder.jupyter note ...

  5. FTP渗透测试

    在这篇文章中,我们将学习如何在CentOS机器配置ProFTPD的服务.之后,我们将进行渗透测试,以评估FTP服务的安全性,那么我们也将学习漏洞的对策. 在CentOS Linux机器的安装和配置FT ...

  6. Jquery mobile div常用属性

    组件 页面 jQuery Mobile 应用了 HTML5 标准的特性,在结构化的页面中完整的页面结构分为 header. content.footer 这三个主要区域. 在 body 中插入内容块: ...

  7. PAT 甲级 1054 The Dominant Color

    https://pintia.cn/problem-sets/994805342720868352/problems/994805422639136768 Behind the scenes in t ...

  8. PHP之implode()方法

    implode — 将一个一维数组的值转化为字符串 string implode ( string $glue , array $pieces ) string implode ( array $pi ...

  9. Delphi实现ERP单据列表栏目设置

    什么都不用说了,ERP你懂的.一张报表,不同的客户都可以调死你.直接上图 通过这个设置界面,直接生成参数调整报表所用的DBGridEh.对,是DBGridEh,不是DBGrid,也不是CXGrid. ...

  10. 【前端学习笔记】函数定义、函数调用、this

    函数定义的三种方式与特点: 1.函数声明:(特点:会被前置:重复定义函数时,最后一次定义有效.) 2.函数表达式: 3.函数实例化:(特点:只能访问本地作用域与全局作用域!!!) /* 对象实例化定义 ...