一、点击与长按

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. Ubuntu—安装python的第三方包gevent

    今晚花很多时间, 使用 sudo pip3 install gevent 但是始终没有成功. 柳暗花明又一村 sudo apt-get install python3-gevent 搞定!!! 人生如 ...

  2. 53. [LeetCode] Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  3. jQuery 判断浏览器

    jQuery 浏览器判断,jQuery提供了一个 jQuery.browser 方法 来判断浏览器 可用值: safari   opera   msie   mozilla 例如:if($.brows ...

  4. Action Required: Listings Deactivated for Potential Pricing Error

    Dear Seller, We are contacting you because we have detected potential pricing errors in your Amazon. ...

  5. 感谢——Thunder团队

    团队软件的开发,已经进入第二个阶段——Beta版本了.回头看看,我们走过了很长的一段路,也经历了很多,有意见不一的争吵.有取得暂时成功时的欢欣鼓舞,我们就像一家人,就像那首歌中唱到的,“我们是一家人, ...

  6. static块的本质

    在网上看到了下面的一段代码: public class Test { static { _i = 20; } public static int _i = 10; public static void ...

  7. prototype.js中Function.prototype.bind方法浅解

    prototype.js中的Function.prototype.bind方法: Function.prototype.bind = function() { var __method = this; ...

  8. Nodejs学习笔记(二)--- 操作MongoDB数据库

    最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的: 顺便官网地址是这个哦:http ...

  9. 【bzoj3697】采药人的路径 树的点分治

    题目描述 给出一棵 $n$ 个点的树,每条边的边权为1或0.求有多少点对 $(i,j)$ ,使得:$i$ 到 $j$ 的简单路径上存在点 $k$ (异于 $i$ 和 $j$ ),使得 $i$ 到 $k ...

  10. Django 2.0 学习(15):Web框架

    Web框架的本质 对于学习Python的同学,相信对Flask.Django.Web.py等不会陌生,这些都是Python语言的web框架.那么问题来了,web服务器是什么?它和web框架有什么关系? ...