您的位置:首页 > 产品设计 > UI/UE

六、UiObejct API 详细介绍

2016-02-26 14:12 417 查看

一、点击与长按

1.组件区域位置关系:

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

2.点击与长按相关API:

返回值API说明
booleanclick()点击对象
booleanclickAndWaitForNewWindow(longtimeout)点击对象,等待新窗口出现,参数为等待超时时常
booleanclickAndWaitForNewWindow()点击对象,等待新窗口出现(默认超时5.5s)
booleanclickBottomRight()点击对象的右下角
booleanclickTopLeft()点击对象的左上角
booleanlongClick()对对象执行长按操作
booleanlongClickBottomRight()长按对象的右下角
booleanlongClickTopLeft()长按对象的左上角
例如:


publicvoidtestDemo1()throwsUiObjectNotFoundException{

UiObjectclock=newUiObject(newUiSelector()
.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(UiObjectdestObj,intsteps)拖拽对象到另一对象位置上
booleandragTo(intdestX,intdestY,intsteps)拖拽对象到屏幕某个坐标位置上
booleanswipeDown(intsteps)拖拽对象向下滑动
booleanswipeLeft(intsteps)拖拽对象向左滑动
booleanswipeRight(intsteps)拖拽对象向右滑动
booleanswipeUp(intsteps)拖拽对象向上滑动
例如:


publicvoidtestDemo2()throwsUiObjectNotFoundException,RemoteException{

UiObjectobject1=newUiObject(newUiSelector().text("相机"));
//将对象拖拽到指定坐标
object1.dragTo((128-64)/2+64,417-100,20);
//将对象拖拽到指定对象位置上
UiObjectobject2=newUiObject(newUiSelector().text("短信"));
object1.dragTo(object2,5);//补偿越短越容易出现两个对象互换位置的情况

//swipe(杀进程操作演示)
UiDevice.getInstance().pressRecentApps();//点开最近使用程序员
UiObjectobject3=newUiObject(newUiSelector()
.resourceId("com.android.systemui:id/app_thumbnail_image"));
object3.swipeLeft(10);//向左滑动关闭进程

}


三、输入文本与清除文本

返回值API说明
booleansetText(Stringtext)在对象中输入文本(只能输入英文)
voidclearTextFiled()清除编辑框中的文本
示例一:


publicvoidtestDemo3()throwsUiObjectNotFoundException{

UiObjectsetText=newUiObject(newUiSelector()
.resourceId("com.android.mms:id/embedded_text_editor"));

setText.setText("123abc");//输入文本
sleep(2000);
setText.clearTextField();//清除文本



注意事项:


1.他的输入步骤是先长按来选中要输入的文本框,然后输入文本,但是若在文本框已有文本的情况下输入文本会丢失原文本,也就是说他会先长按要输入的文本框,这样就执行了全选操作,然后再进行输入文本的操作,这样原先的文本就没有了

2.他的清除步骤是先长按来全选文本—然后点Del键

3.可能不同的输入框会出现不同的情况,解决方法参考示例二

示例二:


publicvoidtestDemo3()throwsUiObjectNotFoundException{

//获取接收者
UiObjecti=newUiObject(newUiSelector()
.resourceId("com.android.mms:id/recipients_editor"));

UiObjecti1=newUiObject(newUiSelector().text("接收者"));

i.setText("iiiiiiiiii");//输入文本"iiiiiiii"

//将光标移动至行尾,然后循环删除,直至文本框变为默认的"接受者"为止

while(!i1.exists()){
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_DEL);
}
}


四、获取对象属性与属性判断

1.获取对象的属性

返回值API说明
RectgetBounds()获得对象矩形坐标,矩形左上角坐标与右下角坐标
intgetChildCount()获得下一级子类数量
StringgetClassName()获得对象类名属性的类名文本
StringgetContentDescription()获得对象的描述属性的描述文本
StringgetPackageName()获得对象包名属性的包名文本
StringgetText()获得对象的文本属性中的文本
RectgetVisibleBounds()返回可见视图的范围,如果视图部分是可见的,只有可见部分报告的范围
例如:


publicvoidtestDemo4()throwsUiObjectNotFoundException{

//获取信息栏的好友框
UiObjecti=newUiObject(newUiSelector().resourceId("com.android.mms:id/recipients_editor"));

Stringrec=i.getText();//获取文本
System.out.println("Textis:"+rec);//输出文本
assertEquals("接收者",rec);//对比文本(预期值,实际值)

System.out.println("Classnameis:"+i.getClassName());//输出并输出类名
System.out.println("Childcoundis:"+i.getChildCount());//输出下一级子类数量
System.out.println("Boundleftis:"+i.getBounds().left);//输出对象矩形左坐标
System.out.println("Contentdescriptionis:"+i.getContentDescription());//输出对象的描述属性的描述文本
System.out.println("Packagenameis:"+i.getPackageName());//输出对象包名
System.out.println("Visibleboundsrightis:"+i.getVisibleBounds().right);//输出可见范围的右边视图

}


2.获取父类与子类节点

返回值API说明
UiObjectgetChild(UiSelectorselector)获得对象的子类对象,可以递归获取子孙当中某个对象
UiObjectgetFromPrent(UiSelectorselector)从父类获取子类,按照UiSelector获取兄弟类(递归)
例如:


publicvoidtestDemo5()throwsUiObjectNotFoundException{
//getChild()
//定位父类
UiObjectdown=newUiObject(newUiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
.index(3));
//定位子类
UiObjectdownload=down.getChild(newUiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_item_name"));
//点击
download.click();
sleep(2000);
UiDevice.getInstance().pressBack();

//getFromParent()
定位兄弟父类
UiObjectdown=newUiObject(newUiSelector()
.resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
.index(3));
//定位要点击的父类的兄弟类
UiObjectmusic=down.getFromParent(newUiSelector()
.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
例如:


publicvoidtestDemo6()throwsUiObjectNotFoundException{

//找到对象
UiObjectwlan=newUiObject(newUiSelector()
.resourceId("com.android.settings:id/switchWidget")
.instance(0));
//如果wlan.isCheckable()为false则开启
if(!wlan.isCheckable()){
wlan.click();
}
}


五、手势的操作

1.手势操作相关API

返回值API说明
booleanperformMultiPointerGesture(pointerCoords[]…touches)执行单手指触控手势,可定义任意手势与形状
booleanperformTwoPointerGesture(PointstartPoint1,PointstartPoint2,PointendPoint1,PointendPoint2,intsteps)执行任意两个手指指控手势,模拟两个手指手势
booleanpinchIn(intpercent,intsteps)手势操作,两点向内收缩(百分比,步数)
booleanpinchOut(intpercent,intsteps)手势操作,两点向外张开(百分比,步数)
例如:


publicvoidtestDemo7()throwsUiObjectNotFoundException{

//选中被操作目标
UiObjectweb=newUiObject(newUiSelector().className("android.widget.FrameLayout"));
web.pinchOut(80,20);//以20步的速度两点向外扩张80%(也就是放大)
sleep(2000);
web.pinchIn(80,20);//以20步的速度两点向内扩张80%(也就是缩小)
//声明变量
PointstartPoint1,startPoint2,endPoint1,endPoint2;
startPoint1=newPoint();
startPoint2=newPoint();
endPoint1=newPoint();
endPoint2=newPoint();
//自定义起点区域
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(longtimeout)等待对象出现
booleanwaitUntilGone(longtimeout)等待对象消失
booleanexists()检查对象是否存在
例如:


publicvoidtestDemo8()throwsUiObjectNotFoundException{

//点击联系人--判断是否有联系人,没有则创建联系人

//获取联系人对象
UiObjectLianXiRen=newUiObject(newUiSelector().text("联系人"));
//判断联系对象是否存在,如果存在则点击
if(LianXiRen.exists()){
LianXiRen.click();
}
UiObjectcreate=newUiObject(newUiSelector().text("创建新联系人"));
//等待5秒判断是否有[创建新联系人]按钮,如果有则说明界面内没有联系人
if(create.waitForExists(5000)){
System.out.println("没有联系人,需要创建");
create.click();
}
//开始创建步骤...

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: