2.UiSelector API 详细介绍

一、UiSelector类介绍

//通过各种属性与节点关系定位组件

简单实例:

public void testDemo2() throws UiObjectNotFoundException{

    UiSelector l= new UiSelector().text("相机");//搜索条件

    UiObject object=new UiObject(l);//一句搜索条件找到对象

    object.click();//操作对象

二、Androiud的布局与组件及组件属性介绍

1.Android常用布局

TablesAre
线性布局 linearLayout
表格布局 TableLayout
相对布局 RelativelLayout
帧布局 FrameLayout
网格布局 GridLayout
绝对布局 AbsoluteLayout

2.Android常用组件

//文本框、编辑框、按钮、单选按钮、复选框、状态开关按钮、拖动条等等

3.Android组件属性介绍

属性值值类型例子
index int 0
instance int 5
class String android.widget.TextView
package String com.jian.test
Content desc String string
checkable boolean false
clecked boolean false
clickable boolean true
enabled boolean false
focusable boolean false
focused boolean false
Scrollable boolean false
Long-clickable boolean false
password boolean false
selected boolean false
bounds Rect [366,999][708,1197]

三、四种匹配关系的介绍

1.四种匹配关系介绍

完全匹配(默认)

包含匹配(Contains)

正则匹配(Matches)–可以包含完全匹配、包含匹配、起始匹配

起始匹配(StartWith)

2.例子

匹配字符串:0123456789
完全匹配:0123456789
包含匹配:45678
正则匹配:d{10}
起始匹配:01234

四、节点关系介绍

这里写图片描述

五、对象搜索-文本与描述

1.文本属性定位对象

返回值API说明
UiSelector text(String text) 文本
UiSelector textContains(String text) 文本包含
UiSelector textMatches(String regex) 文本正则
UiSelector textStartsWith(String text) 文本起始匹配
  • 实例:
public void testDemo1() throws UiObjectNotFoundException{


    //完全匹配:浏览器
    UiSelector l1= new UiSelector().text("浏览器");
    UiObject object1=new UiObject(l1);
    object1.click();


    //包含匹配:览器
    UiSelector l2= new UiSelector().textContains("览器");
    UiObject object2=new UiObject(l2);
    object2.click();


    //正则匹配:.*览.*
    UiSelector l3= new UiSelector().textMatches(".*览.*");
    UiObject object3=new UiObject(l3);
    object3.click();


    //起始匹配:浏览
    UiSelector l4= new UiSelector().textStartsWith("浏览");
    UiObject object4=new UiObject(l4);
    object4.click();    
}

2.描述属性定位对象

返回值API说明
UiSelector description(String desc) 描述
UiSelector descriptionContains(String desc) 描述包含
UiSelector descriptionMatches(String regex) 描述正则
UiSelector descriptionStartsWith(String desc) 描述开始字符匹配
  • 实例:
public void testDesc() throws UiObjectNotFoundException{


    //完全匹配:应用
    UiSelector selector=new UiSelector().description("应用");
    UiObject object=new UiObject(selector);
    object.click();


    //包含匹配:
    UiSelector selector1=new UiSelector().descriptionContains("用");
    UiObject object1=new UiObject(selector1);
    object1.click();


    //正则匹配:
    UiSelector selector2=new UiSelector().descriptionMatches("应.*");
    UiObject object2=new UiObject(selector2);
    object2.click();


    //起始匹配:
    UiSelector selector3=new UiSelector().descriptionStartsWith("应");
    UiObject object3=new UiObject(selector3);
    object3.click();

}

六、对象搜索-类名与包名

1.类名属性定位:

返回值API说明
UiSelector className(String className) 类名
UiSelector classNameMatches(String regex) 正则类名
  • 快速书写方式:

(1)class.getName(推荐书写方式)
(2)完整类名方式:android.widger.LinearLayout
(3)正则方式
(4)常量方式

  • 例如:
public void testDemo2() throws UiObjectNotFoundException{

    //完全匹配
    UiSelector selector =new UiSelector().className("android.view.View")
    .instance(3);//instance(3)表示界面上从上到下第4-1个view
    UiObject object=new UiObject(selector);
    object.click();


    //正则匹配
    UiSelector selector =new UiSelector().classNameMatches(".*View")
    .instance(4);//instance(3)表示界面上从上到下第5-1个view
    UiObject object=new UiObject(selector);
    object.click();     


    //class.getName输入方式
    UiSelector selector =new UiSelector().className(View.class.getName())
    .instance(3);//instance(3)表示界面上从上到下第5-1个view
    UiObject object=new UiObject(selector);
    object.click();
    }

2.包名属性定位

返回值API说明
UiSelector packageName(String name) 包名
UiSelector packageNameMatches(String regex) 包名正则
  • 例如:
public void testDemo3() throws UiObjectNotFoundException{

    UiSelector selector =new UiSelector().packageName("com.android.deskclock");
    UiObject object=new UiObject(selector);
    object.click();

}

七、对象搜索-索引与实例

1.索引与实例说明

1)索引index:指在同级中的编号,在兄弟类中的主键的编号
2)实例instance:整个布局文件中的编号,同一个类(比如6.2中的view类)的同级编号

2.索引与实例属性定位对象

返回值API说明
UiSelector index(int index) 索引
UiSelector instance(int instance) 实例
  • 例如:
public void testIndex() throws UiObjectNotFoundException{


    //index
    UiSelector selector =new UiSelector().className("android.widget.ImageButton").index(1);
    UiObject object=new UiObject(selector);
    object.click();

    UiDevice.getInstance().pressBack();

    //instance
    UiSelector selector1 =new UiSelector().className("android.widget.ImageButton").instance(2);
    UiObject object1=new UiObject(selector1);
    object1.click();

    }

八、对象搜索-特殊属性与节点

1.特殊属性定位对象

返回值API说明
UiSelector checked(booleean val) 选择属性
UiSelector clickable(boolean val) 可点击属性
UiSelector enabled(boolean val) enabled属性
UiSelector focusable(boolean val) 焦点属性
UiSelector focused(boolean val) 当前焦点属性
UiSelector longClickable(boolean val) 长按属性
UiSelector scrollable(boolean val) 滚动属性
UiSelector selected(boolean val) 背景选择属性
  • 例如:
public void testDemo4() throws UiObjectNotFoundException{


    //checkable[开启wifi(界面默认在设置界面的情况下),由于有wifi和蓝牙两个可点击属性,instance定位]
    UiObject swtitichObj=new UiObject(new UiSelector().checkable(true).instance(0));
    swtitichObj.click();


    //checked[关闭了wifi(界面默认在设置界面的情况下)]
    UiObject swtitichObj=new UiObject(new UiSelector().checked(true).instance(0));
    swtitichObj.click();


    //enable[界面默认在无编辑的信息框,buttom为发送按钮]
    UiObject send=new UiObject(new UiSelector().enabled(false));                
    System.out.println(send.getClassName());//获取并输出这个属性的类名


    //focused[在发送消息界面,光标默认停放位置在联系人或信息框]
    UiObject focusedObj=new UiObject(new UiSelector().focused(true));
    focusedObj.setText("Jian");//输入字符"Jian"


    //longClickable[界面默认位置为桌面首页,多条件定位]
    UiObject longclick=new UiObject(new UiSelector().longClickable(true).index(4));
    longclick.click();


    //scrollable[界面默认位置为文件管理器界面]
    UiScrollable scrollable=new UiScrollable(new UiSelector().scrollable(true));
    scrollable.scrollForward();//向下滚动一下
    scrollable.scrollBackward();//向上滚动一下        

}

2.节点属性定位对象

返回值API说明
UiSelector childSelector(UiSelector selector) 从当前类中往下递归找符合条件的子类组件
UiSelector formPrent(UiSelector selector) 从父类往下递归找符合条件的组件
  • 例如:
public void testDemo5() throws UiObjectNotFoundException{

    //childSelector[界面停留在文件管理界面]例一:
    UiScrollable scrollable=new UiScrollable(new UiSelector().scrollable(true)
    .childSelector(new UiSelector().text("Android")));
    scrollable.click();     
    //childSelector[界面停留在文件管理界面]例二:
    UiObject focusedObj=new UiObject(new UiSelector().childSelector(new UiSelector().text("Android")));
    focusedObj.click();


    //formPrent[界面停留在文件管理界面]先定位父类再定位主类
    UiObject PrentObj=new UiObject(new UiSelector()
    .resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
    .fromParent(new UiSelector().className("android.widget.LinearLayout").index(1)));//先定位父类再定位主类
    PrentObj.click();

}

九、对象搜索-资源ID(推荐使用)

1.资源ID说明

1)资源ID属性:
每一个组件都会的编号,也就是资源ID
2)对应Android属性:
XML文件下的Android:ID属性

2.资源ID定位对象

返回值API说明
UiSelector resourceId(String id) 资源ID
UiSelector resourceIdMatches(String regex) 资源ID正则
  • 例如:
public void testDemo6() throws UiObjectNotFoundException{

    //resourceId(String id)
        //定位不同ID的组件
    UiObject resoursId=new UiObject(new UiSelector().resourceId("com.cyanogenmod.filemanager:id/ab_filesystem_info"));  
    resoursId.click();
    //定位相同ID的组件
    UiObject resoursId1=new UiObject(new UiSelector()
    .resourceId("com.cyanogenmod.filemanager:id/navigation_view_details_item")
    .index(3));//通过增加多个条件来定位(这里使用index)     
    resoursId1.click();


    //resourceIdMatches(String regex)
    UiObject resoursId2=new UiObject(new UiSelector().resourceIdMatches(".*/navigation_view_details_item").index(3));       
    resoursId2.click();
}
原文地址:https://www.cnblogs.com/JianXu/p/5158396.html