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);
}
}