六、UiObejct API 详细介绍

一、点击与长按

1.组件区域位置关系:

Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标)

2.点击与长按相关API:

返回值API说明
booleanclick()点击对象
booleanclickAndWaitForNewWindow(long time out)点击对象,等待新窗口出现,参数为等待超时时常
booleanclickAndWaitForNewWindow()点击对象,等待新窗口出现(默认超时5.5s)
booleanclickBottomRight()点击对象的右下角
booleanclickTopLeft()点击对象的左上角
booleanlongClick()对对象执行长按操作
booleanlongClickBottomRight()长按对象的右下角
booleanlongClickTopLeft()长按对象的左上角
  • 例如:
复制代码
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说明
booleandragTo(UiObject destObj,int steps)拖拽对象到另一对象位置上
booleandragTo(int destX,int destY,int steps)拖拽对象到屏幕某个坐标位置上
booleanswipeDown(int steps)拖拽对象向下滑动
booleanswipeLeft(int steps)拖拽对象向左滑动
booleanswipeRight(int steps)拖拽对象向右滑动
booleanswipeUp(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说明
booleansetText(String text)在对象中输入文本(只能输入英文)
voidclearTextFiled()清除编辑框中的文本
  • 示例一:
复制代码
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说明
RectgetBounds()获得对象矩形坐标,矩形左上角坐标与右下角坐标
intgetChildCount()获得下一级子类数量
StringgetClassName()获得对象类名属性的类名文本
StringgetContentDescription()获得对象的描述属性的描述文本
StringgetPackageName()获得对象包名属性的包名文本
StringgetText()获得对象的文本属性中的文本
RectgetVisibleBounds()返回可见视图的范围,如果视图部分是可见的,只有可见部分报告的范围
  • 例如:
复制代码
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说明
UiObjectgetChild(UiSelector selector)获得对象的子类对象,可以递归获取子孙当中某个对象
UiObjectgetFromPrent(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说明
booleanisCheckable()检查对象的checkable属性是否为true
booleanisChecked()检查对象的checked属性是否为true
booleanisClickable()检查对象的clickable属性是否为true
booleanisEnabled()检查对象的enabled属性是否为true
booleanisFocusable()检查对象的focusable属性是否为true
booleanisFocused()检查对象的focused属性是否为true
booleanisLongClickable()检查对象的longclickable属性是否为true
booleanisScrollable()检查对象的scrollable属性是否为true
booleanisSelected()检查兑现给的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说明
booleanperformMultiPointerGesture(pointerCoords[]…touches)执行单手指触控手势,可定义任意手势与形状
booleanperformTwoPointerGesture(Point startPoint1,Point startPoint2,Point endPoint1,Point endPoint2,int steps)执行任意两个手指指控手势,模拟两个手指手势
booleanpinchIn(int percent,int steps)手势操作,两点向内收缩(百分比,步数)
booleanpinchOut(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说明
booleanwaitForExists(long timeout)等待对象出现
booleanwaitUntilGone(long timeout)等待对象消失
booleanexists()检查对象是否存在
  • 例如:
复制代码
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();
    }
    //开始创建步骤...

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值