UiAutomator(3)--UiObject API

一、UiObject介绍

      UiObejct代表一个组件对象,对象有许多模拟实际操作手机的方法和属性:

       


二、API使用

       1.点击与长按相关API

          (1)click():点击对象

          (2)clickAndWaitForNewWindow(long timeout):点击对象,等待新窗口出现,参数为等待超时时长

          (3)clickAndWaitForNewWindow():点击对象,等待新窗口出现

          (4)clickBottomRight():点击对象的右下角

          (5)clickTopLeft():点击对象的左上角

          (6)longClick():长按对象,对对象执行长按操作

          (7)longClickBottomRight():长按对象的右下角

          (8)longClickTopLeft():长按对象的左上角


       2.拖拽与滑动对象相关API

          (1)dragTo(UiObject destObj,int steps):拖拽对象到另一个对象位置上,步长可设置拖动的速度

                 UiObject destObj为另外一个对象。

          (2)dragTo(int destX,int destY,int steps):拖拽对象到屏幕某个坐标位置上,步长可设置拖动速度

          (3)swipeDown(int steps):拖动对象往下滑动

          (4)swipeLeft(int steps):拖动对象往左滑动

          (5)swipeRight(int steps):拖动对象往右滑动

          (6)swipeUP(int steps):拖动对象往上滑动

     

        3.输入文本与清除文本相关API

          (1)setText(String text):在对象中输入文本

          (2)clearTextField():清除编辑框中的文本,不是很好用。


        4.获取对象的属性及判断API

           (1)getBounds():返回值为Rect,获取对象矩形坐标,矩形左上角坐标与右下角坐标

                   对应UiAutomatorViewer的bounds属性

            

            (2)getChildCount():获取下一级子类数量

            (3)getClassName():获取对象类名属性的类名文本

            (4)getContentDescription():获取对象的描述属性的描述文本

            (5)getPackageName():获取对象包名属性的包名文本

            (6)getText():获取对象的文本属性中的文本

            (7)getVisibleBounds():返回可见视图的范围,如果视图的部分是可见的,只有可见部分报告的范围

             获取父类与子类节点:

            (8)getChild(UiSelector selector):获取对象的子类对象,可以递归获取子孙当中某个对象

            (9)getFromParent(UiSelector selector):从父类获取子类,按照UiSeletor获取兄弟类(递归)

             属性的判断:

            (10)isCheckable():检查对象的checkable属性是否为true

            (11)isChecked():检查对象的checked属性是否为true 

            (12)isClickable():检查对象的clickable属性是否为true

            (13)isEnabled():检查对象的Enabled属性是否为true

            (14)isFocusable():检查对象的focusable属性是否为true

            (15)isFocused():检查对象的focused属性是否为true

            (16)isLongClickable():检查对象的longclickable属性是否为true

            (17)isScrollable():检查对象的scrollable是否为true

            (18)isSelected():检查对象的selected属性是否为true

         

         5.手势的操作相关API

             (1)performMultiPointerGesture(PointerCoords[]... touches):执行单手指触控手势,可定义任意手势与形状

             (2)performTwoPointerGesture(Point startPoint1,Point startPoint2,Point endPoint1,Point endPoint2,int steps):执行任意两个手指触控手势,模拟两个手指手势

             (3)pinchIn(int percent,int steps):手势操作,两点向内收缩

             (4)pichOut(int percent,int steps):手势操作,亮点向外张开


         6.判断对象是否存在相关API

              (1)waitForExists(long timeout):等待对象出现

              (2)waitUntilGone(long timeout):等待对象消失

              (3)exists():检查对象是否存在


三、实例

package cn.microinvestment.weitou;


import java.io.IOException;


import android.view.KeyEvent;


import com.android.uiautomator.core.UiDevice;

import com.android.uiautomator.core.UiObject;

import com.android.uiautomator.core.UiObjectNotFoundException;

import com.android.uiautomator.core.UiSelector;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;


public class testUiObjectDemo extends UiAutomatorTestCase{



public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

Runtime.getRuntime().exec("adb shell am start -n "

+ "cn.microinvestment.weitou/cn.microinvestment.weitou.activity.WTLoginControllerActivity");

new UiAutomatorHelper("uiobject", "cn.microinvestment.weitou.testUiObjectDemo", "test", "4");

}

    public void test() throws UiObjectNotFoundException, InterruptedException{

    //点击发布按钮,发布资讯-输入文本-清除文本-输入文本和图片-获取“完成”按钮的矩形坐标,并点击左上角

//    -点击资讯列表的照片并收缩和张开

    UiObject publishbtn=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/menu_publish"));

    UiObject guandian=new UiObject(new UiSelector().text("观点"));

    UiObject publish=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/wt_publish_edit_text"));

    UiObject publishbtn1=new UiObject(new UiSelector().text("发布"));

        //点击发布资讯的按钮进行发布

    publishbtn.click();

        //点击观点按钮

    guandian.clickAndWaitForNewWindow(10000);

    //往输入框里输入文字

        publish.setText("abcdefg");

        //删除刚才输入的文字,自带的clearTextFiled总是出错

    UiObject del=new UiObject(new UiSelector().text("来,发布点新鲜资讯"));

    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_MOVE_END);

    while(!del.exists()){

    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_DEL);

    }

    //再次输入文字

    publish.setText("abcdefg");

        //从相册里面去找到图片,然后选择图片

    UiObject image=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/iv_img"));

    UiObject photobtn=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/iv_chat"));

    UiObject photo=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/name"));

    UiObject photo2=new UiObject(new UiSelector().className("android.widget.ImageView").clickable(true));

    UiObject photo3=new UiObject(new UiSelector().text("确定"));

        //点击+

    image.click();

        //点击从相册选取按钮

    photobtn.click();

        //选择相册的文件夹

    photo.click();

        //选择图片的勾

    photo2.click();

        //选择确定

    photo3.click();

        //输出发布按钮的bound

    System.out.println(publishbtn1.getBounds());

        //点击发布按钮的左上角

    publishbtn1.clickTopLeft();

    sleep(5000);

        

    UiObject clickphoto=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/wt_feed_item_xxx_content")

    .className("android.widget.ImageView"));

    //点击刚发布的图片

        clickphoto.click();

        //图片变成全屏后,放大和缩小一定的倍数

    UiObject photo4=new UiObject(new UiSelector().className("android.widget.ImageView"));

    photo4.pinchOut(50, 100);

    sleep(5000);

    photo4.pinchIn(50, 100);

    }

}