zoukankan      html  css  js  c++  java
  • 3.UiObejct API 详细介绍

    一、点击与长按

    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();
        }
        //开始创建步骤...
    
    }
  • 相关阅读:
    正则表达式的总结
    网络搭建的四种方式
    argparse的总结详情
    错误记录
    8x8点阵的原理及代码实现
    __pycache__的认识记录
    浏览器渲染原理及流程
    javascript 中 async/await 的用法
    浏览器的进程和线程
    JS 对象toString 和 valueof 方法
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158395.html
Copyright © 2011-2022 走看看