Android UI 自动化测试之UiObject

本文详细介绍了Android UI自动化测试中UiObject的使用,包括组件操作如点击、长按,拖拽滑动,输入与清除文本,属性获取与判断,以及手势操作等。通过Api的讲解和实例演示,帮助读者掌握UiObject在测试中的各种功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. UiObject 类介绍
    代表一个组件对象,对象有许多模拟实际操作手机的方法与属性
  2. 点击与长按对象
    (1)组件区域位置关系
    这里写图片描述
    (2)点击长按相关 api

这里写图片描述


    public void testClick() throws UiObjectNotFoundException{
        UiObject clock=new UiObject(new UiSelector()
        .resourceId("com.android.deskclock:id/analog_appwidget"));      
        //clock.click();
        //clock.clickAndWaitForNewWindow();
//      clock.clickBottomRight();
//      sleep(3000);
//      UiDevice.getInstance().pressBack();
//      sleep(1000);
//      clock.clickTopLeft();
//      sleep(3000);
//      UiDevice.getInstance().pressBack();
//      sleep(1000);

        //longclick

        //clock.longClick();
        UiDevice.getInstance().swipe(533, 612, 535, 615, 500);  
    }
  1. 拖拽与滑动文本
    (1)拖动组件示意图
    这里写图片描述
    (2)拖拽文本相关 api
    这里写图片描述
    public void testDrag() throws UiObjectNotFoundException{
//      UiObject object1=new UiObject(new UiSelector().text("联系人"));
//      UiObject object2=new UiObject(new UiSelector().text("图库"));
//      //object1.dragTo(350,1704-500, 10);
//      //object1.dragTo(object2, 30);
//      object1.swipeUp(5);

        UiObject recent=new UiObject(new UiSelector()
        .resourceId("com.android.systemui:id/app_thumbnail_image"));        

        recent.swipeLeft(10);


    }
  1. 输入文本与清除文本
    (1)输入文本相关 API
    这里写图片描述
public void testSetText() throws UiObjectNotFoundException{
//      UiObject edit=new UiObject(new UiSelector()
//      .resourceId("com.android.mms:id/embedded_text_editor"));
//      
//      edit.setText("qwertyuiop");
//      sleep(2000);
//      edit.clearTextField();

        //接收者
        UiObject r=new UiObject(new UiSelector()
        .resourceId("com.android.mms:id/recipients_editor"));
        UiObject w=new UiObject(new UiSelector().text("接收者"));
        r.setText("kkkkkkkkkkkkk");
        //将光标移动到行尾,使用backspace进行删除
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_MOVE_END);
        while(!w.exists()){
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_DEL);
        }
        //将光标移动到行首,使用delete键来删除

    }

(2)输入文本与清除文本实现步骤说明
输入文本:清除文本—输入文本
清除文本:长按一键删除
5. 获取对象的属性与属性的判断
(1)获取对象的属性
这里写图片描述

public void testGet() throws UiObjectNotFoundException{
        UiObject r=new UiObject(new UiSelector()
        .resourceId("com.android.mms:id/recipients_editor"));

        String rec=r.getText();

        System.out.println("HINT:"+rec);
        System.out.println("CLASS:"+r.getClassName());
        System.out.println("PACKAGE_Name:"+r.getPackageName());
        System.out.println("PACKAGE_Name:"+r.getPackageName());
        System.out.println("DESC:"+r.getContentDescription());
        System.out.println("RECT:"+r.getBounds().left);
        assertEquals("接收者", rec);

    }

(2)获取父类与子类节点
这里写图片描述

public void testNode() throws UiObjectNotFoundException{
        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();

        UiObject music=down.getFromParent(new UiSelector()
        .resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item").index(5));

        music.click();


    }

(3)属性的判断
这里写图片描述

public void testIs() throws UiObjectNotFoundException{
       UiObject wlan=new UiObject(new UiSelector()
       .resourceId("com.android.settings:id/switchWidget"));

       if(!wlan.isChecked()){
         wlan.click();  
       }


    }
  1. 手势的操作
    (1) 手势相关操作
    这里写图片描述
    (2)手势相关操作 API
    这里写图片描述
public void testGesture() throws UiObjectNotFoundException{
    UiObject object=new UiObject(new UiSelector()
    .resourceId("com.android.gallery3d:id/photopage_bottom_controls"));

    //object.pinchIn(80, 20);
    //object.pinchOut(80, 20);

    Point startPoint1, startPoint2, endPoint1, endPoint2;
    startPoint1=new Point();
    startPoint2=new Point();
    endPoint1=new Point();
    endPoint2=new Point();

    startPoint1.x=157;startPoint1.y=183;
    startPoint2.x=122;startPoint2.y=455;

    endPoint1.x=948;endPoint1.y=195;
    endPoint2.x=930;endPoint2.y=493;

    object.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, 50);


}
  1. 判断对象是否存在
    相关 API
    这里写图片描述
public void testExist() throws UiObjectNotFoundException{
      UiObject l=new UiObject(new UiSelector().text("联系人"));
      if(l.exists()){
          l.click();
      }
      UiObject create=new UiObject(new UiSelector().text("创建新联系人"));
      if(create.waitForExists(5000)){
          System.out.println("没有任何联系人,需要创建");
          create.click();
          //创建步骤。。。。
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值