2.UiSelector API 详细介绍
一、UiSelector类介绍
//通过各种属性与节点关系定位组件
简单实例:
public void testDemo2() throws UiObjectNotFoundException{
UiSelector l= new UiSelector().text("相机");//搜索条件
UiObject object=new UiObject(l);//一句搜索条件找到对象
object.click();//操作对象
}
二、Androiud的布局与组件及组件属性介绍
1.Android常用布局
| Tables | Are |
|---|---|
| 线性布局 | 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();
}
2.UiSelector API 详细介绍的更多相关文章
- 7.Configurator API 详细介绍
一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...
- 6.UiWatcher API 详细介绍
Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...
- 5.UiScrollable API 详细介绍
Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...
- 4.UiCollection API 详细介绍
一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- 3.UiObejct API 详细介绍
一.点击与长按 1.组件区域位置关系: Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标) 2.点击与长按相关API: 返回值 API 说明 ...
- 1.UiDevice API 详细介绍
1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...
- 百度地图API详细介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- HTML5全屏(Fullscreen)API详细介绍
// 整个页面 onclick= launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...
随机推荐
- nhibernate中执行SQL语句
在有些时候,可能需要直接执行SQL语句.存储过程等,但nhibernate并没有提供一种让我们执行SQL语句的方法,不过可以通过一些间接的方法来实现. 下面给出一个在nhibernate中执行SQL语 ...
- C# 钱数 小写 转 大写
public class Rmb { /// <summary> /// 转换人民币大小金额 /// </summary> /// <param name="n ...
- SDN前瞻 传统网络的缺陷
引言 在网络发展速度如此之快的今天,传统网络的架构充满了危机,主要有这四个问题: 传统网络部署管理困难. 分布式架构瓶颈出现. 流量控制难真正实现. 设备不可编程. 现在的网络厂商 种类繁多的网络厂商 ...
- HTTP vs HTTPS
参考博文:HTTP与HTTPS的区别 HTTP与HTTPS的区别 一.HTTP和HTTPS的基本概念和区别 HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(T ...
- DB2的编目
D在DB2数据库中,编目(catalog)这个单词很难理解,我自己当初在学习DB2的时候也常常被这个编目搞的很不明白,直到现在我个人也感觉到DB2中编目(catalog)这个术语用的不是很好,具体来说 ...
- (五)Jmeter中的属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
- Java知识点整理(一)
ArrayList和LinkedList的区别 1.ArrayList和LinkedList可想从名字分析,它们一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个 ...
- 最小生成树-Borůvka算法
一般求最小生成树的时候,最流行的是Kruskal算法,一种基于拟阵证明的贪心,通过给边排序再扫描一次边集,利用并查集优化得到,复杂度为\(O(ElogE)\).另一种用得比较少的是Prim算法,利用优 ...
- CodeChef KnightMov
码死了...考试的时候基本上是写一会儿思考一会儿人生....考完了调了调...最后400行+....不应该这么长的....以后重写一下再补题解..... 也许这就是蒟蒻吧.jpg 安利cstdio博客 ...
- 数据结构开发(7):典型问题分析(Bugfix)
0.目录 1.创建异常对象时的空指针问题 2.LinkList 中的数据元素删除 3.LinkList 中遍历操作与删除操作的混合使用 4.StaticLinkList 中数据元素删除时的效率问题 5 ...