博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.UiObejct API 详细介绍
阅读量:4941 次
发布时间:2019-06-11

本文共 7456 字,大约阅读时间需要 24 分钟。

一、点击与长按

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();    }    //开始创建步骤...}

 

转载于:https://www.cnblogs.com/JianXu/p/5158395.html

你可能感兴趣的文章
hdoj3714【三分】
查看>>
嵌入式开发入门(4)—驱动入门之时序图分析【20121211修改,未完】
查看>>
Python 使用字符串
查看>>
Quartz Core之CALayer
查看>>
java:一个项目的开发过程(转)
查看>>
express框架学习笔记
查看>>
操作系统下载路径
查看>>
网站开发 关于图片压缩 以及图片使用
查看>>
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>
Logistic Regression
查看>>
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
数据交互 axios 的使用
查看>>
bootloader,kernel,initrc
查看>>