UiAutomator笔记之UiSelector API(三)

一、UiSelector相关知识

1、UiSelector功能
UiSelector可通过控件的各种属性与节点关系定位组件。

2、Android常用组件

TextView 文本框

EditView 编辑框

Button 按钮

RadioButton 单选按钮

CheckBox 复选框

ToggleButton 状态开关按钮

Switch 开关

SeekBar 拖动条

AnalogClock DigitalClock 时钟

Chronometer 计时器

ListView 列表视图

GridView 网格视图

ProgressBar 进度条

RatingBra 星际评分条

Toast 提示信息框
ScrollView 滚动视图

3、Android组件的属性

属性值值类型说明
indexint索引:同级组件的下标;从0开始计
instanceint界面中同一类View的所有实例的下标;从0开始计
classString组件的类名,如 android.widget.TextView
packageString包名
Content-descString描述
checkableboolean是否可选,一般只对 单选或 复选框有用。
checkedboolean单选或 复选框 是否被选中
clickableboolean是否可点击
enabledboolean是否可操作,如 按钮置灰不可操作状态
focusableboolean是否可获取焦点
focusedboolean是否获取到焦点
Scrollableboolean是否可滚动,一般是list
Long-clickableboolean是否可长按
passwordboolean是否密码
selectedboolean是否具有背景选择属性,如按钮点击后背景色变化
boundsRect坐标,如 [366,999][708,1197]表示控件的矩形区域左上和右下坐标点

4、查找组件的匹配方式(4种)
(1)默认:完全匹配
(2)Contains:包含匹配
(3)StartsWith:起始匹配
(4)Matches:正则匹配(完全匹配、包含匹配、起始匹配)

5、XML文档节点关系
(1)父 Patent:父控件
(2)子 Children:子控件
(3)同胞 Sibling:同级控件
(4)先辈 Ancestor:父控件的上一级、上上级...
(5)后代 Descendant:子控件的下一级、下下级...

二、依据属性查找组件

1、 属性-文本

(1)相关API

返回值API说明
UiSelectortext(String text)文本
UiSelectortextContains(String text)文本包含
UiSelectortextMatches(String regex)文本正则
UiSelectortextStartsWith(String text)文本起始匹配

(2)示例
UiSelector uiSelector = new UiSelector().text("微信红包");//查找文本为“微信红包”的所有组件

2、 属性-描述

(1)相关API

返回值API说明
UiSelectordescription(String desc)描述
UiSelectordescriptionContains(String desc)描述包含
UiSelectordescriptionMatches(String regex)描述正则
UiSelectordescriptionStartsWith(String desc)描述开始字符匹配

3、属性-类名

(1)相关API

返回值API说明
UiSelectorclassName(String className)类名
UiSelectorclassNameMatches(String regex)正则类名

(2)输入参数className的快速书写方式

<1>class.getName方式
<2>完整类名方式:android.widget.LinearLayout
<3>正则方式
<4>常量方式

4、 属性-包名

(1)相关API

返回值API说明
UiSelectorpackageName(String name)包名
UiSelectorpackageNameMatches(String regex)包名正则

5、属性-索引与实例

(1)相关API

返回值API说明
UiSelectorindex(int index)索引
UiSelectorinstance(int instance)实例

(2)示例

UiSelector uiSelector = new UiSelector().className("android.widget.ImagView").index(1);//查找ImageView在同级中下标为1的组件

UiSelector uiSelector = new UiSelector().text("微信红包").instance(2);//查找界面中文本为“微信红包”的第3个组件

6、特殊属性

(1)相关API

返回值API说明
UiSelectorchecked(boolean val)选择属性
UiSelectorclickable(boolean val)可点击属性
UiSelectorenabled(boolean val)可操作属性
UiSelectorfocusable(boolean val)焦点属性
UiSelectorfocused(boolean val)当前焦点属性
UiSelectorlongClickable(boolean val)长按属性
UiSelectorscrollable(boolean val)滚动属性
UiSelectorselected(boolean val)背景选择属性

7、节点

(1)相关API

返回值API说明
UiSelectorchildSelector(UiSelector selector)从当前组件往下查找其子子孙孙中符合条件的所有组件
UiSelectorfromParent(UiSelector selector)从当前组件往上查找其长辈中符合条件的所有组件

8、 属性-资源ID

(1)相关API

返回值API说明
UiSelectorresourceId(String id)资源ID
UiSelectorresourceIdMatches(String regex)资源ID正则

(2)说明

android4.3及以上系统才可通过资源ID的方式定位控件。

 

通过伪xpath定位:

 UISelector类提供了一些方法根据控件在界面的XML布局中的层级关系来进行定位,但是UIAutomator又没有真正的提供类似Appium的findElementWithXpath相关的方法,所以这个位置我们叫它伪xpath,其实就是通过层级一层一层去定位控件,通常用于Listview中定位id相同的控件

 

UiSelector.fromParent或UiObject.getFromParent方法

例:UiObject uio=new UiObject(new UiSelector().text("Cache junk").fromParent(new UiSelector().className("android.widget.CheckBox")));

 

上面这段代码是一个场景

 

这是一个android里面常见的listview,它里面有很多的layout,可是如果我只想获取到cache junk这一条目中的checkbox,又没有id,index又不固定的情况下,怎么办呢,就使用上面那段代码,以下是UI和层级关系

 

那段代码的思路是,使用text定位cache junk这个UI中的唯一性控件,然后.fromParent定位到cache junk控件的父控件,就是index为1的那个RelativeLayout控件,再在RelativeLayout控件中通过classname定位这个layout中的唯一一个checkbox控件,大家可以想一下这个思路,你小儿子踢足球把我家玻璃打碎了,逃逸了,我认识你大儿子,我通过你大儿子找到你爸爸,再通过你爸爸找到小儿子,揍一顿~

 

通过UiSelector.childSelector或UiObject.getChild方法

刚才是一个通过孩子找父亲再找兄弟的思路,那么这个方法就是我知道你爸爸是谁,我直接通过你爸爸找到儿子

例:UiObject parentView = new UiObject(new UiSelector().className("android.view.View"));

      save = parentView.getChild(new UiSelector().text("Save"));

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值