本课视频教程:https://weidian.com/knowledge.html?itemID=6285759382
2、常用的控件选择器
UiSelector.text(str)
str
{string} 控件文本- 返回 {UiSelector} 返回选择器自身以便链式调用
为当前选择器附加控件”text等于字符串str”的筛选条件。
控件的text(文本)属性是文本控件上的显示的文字,例如微信左上角的”微信”文本。
UiSelector.textContains(str)
str
{string} 要包含的字符串
为当前选择器附加控件”text需要包含字符串str”的筛选条件。
这是一个比较有用的条件,例如QQ动态页和微博发现页上方的”大家都在搜….”的控件可以用textContains("大家都在搜").findOne()
来获取。
UiSelector.textStartsWith(prefix)
prefix
{string} 前缀
为当前选择器附加控件”text需要以prefix开头”的筛选条件。
这也是一个比较有用的条件,例如要找出Auto.js脚本列表中名称以”QQ”开头的脚本的代码为textStartsWith("QQ").find()
。
UiSelector.textEndsWith(suffix)
- suffix {string} 后缀
为当前选择器附加控件”text需要以suffix结束”的筛选条件。
UiSelector.textMatches(reg)
reg
{string} | {Regex} 要满足的正则表达式。
为当前选择器附加控件”text需要满足正则表达式reg”的条件。
需要注意的是,如果正则表达式是字符串,则需要使用\\
来表达\
(也即Java正则表达式的形式)
// 匹配多位数字
textMatches("\\d+");
但如果使用JavaScript语法的正则表达式则不需要
textMatches(/\d+/);
但如果使用字符串的正则表达式则该字符串不能以”/”开始以”/”结束,
也即不能写诸如textMatches("/\\d+/")
的表达式,否则会被开头的”/”和结尾的”/”会被忽略。
UiSelector.desc(str)
str
{string} 控件文本- 返回 {UiSelector} 返回选择器自身以便链式调用
为当前选择器附加控件”desc等于字符串str”的筛选条件。
控件的desc(描述,全称为Content-Description)属性是对一个控件的描述,例如网易云音乐右上角的放大镜图标的描述为搜索。要查看一个控件的描述,同样地可以借助悬浮窗查看。
desc属性同样是定位控件的利器。
UiSelector.descContains(str)
str
{string} 要包含的字符串
为当前选择器附加控件”desc需要包含字符串str”的筛选条件。
UiSelector.descStartsWith(prefix)
prefix
{string} 前缀
为当前选择器附加控件”desc需要以prefix开头”的筛选条件。
UiSelector.descEndsWith(suffix)
suffix
{string} 后缀
为当前选择器附加控件”desc需要以suffix结束”的筛选条件。
UiSelector.descMatches(reg)
reg
{string} | {Regex} 要满足的正则表达式。
为当前选择器附加控件”desc需要满足正则表达式reg”的条件。
有关正则表达式,可以查看[正则表达式 – 菜鸟教程]
需要注意的是,如果正则表达式是字符串,则需要使用\\
来表达\
(也即Java正则表达式的形式),例如textMatches("\\d+")
匹配多位数字;但如果使用JavaScript语法的正则表达式则不需要,例如textMatches(/\d+/)
。但如果使用字符串的正则表达式则该字符串不能以”/”同时以”/”结束,也即不能写诸如textMatches("/\\d+/")
的表达式,否则会被开头的”/”和结尾的”/”会被忽略。
UiSelector.id(resId)
resId
{string} 控件的id,以”包名:id/”开头,例如”com.tencent.mm:id/send_btn”。也可以不指定包名,这时会以当前正在运行的应用的包名来补全id。例如id(“send_btn”),在QQ界面想当于id(“com.tencent.mobileqq:id/send_btn”)。
为当前选择器附加”id等于resId”的筛选条件。
控件的id属性通常是可以用来确定控件的唯一标识,如果一个控件有id,那么使用id来找到他是最好的方法。要查看屏幕上的控件的id,可以开启悬浮窗并使用界面工具,点击相应控件即可查看。若查看到的控件id为null, 表示该控件没有id。另外,在列表中会出现多个控件的id相同的情况。例如微信的联系人列表,每个头像的id都是一样的。此时不能用id来唯一确定控件。
在QQ界面经常会出现多个id为”name”的控件,在微信上则每个版本的id都会变化。对于这些软件而言比较难用id定位控件。
UiSelector.idContains(str)
str
{string} id要包含的字符串
为当前选择器附加控件”id包含字符串str”的筛选条件。比较少用。
UiSelector.idStartsWith(prefix)
prefix
{string} id前缀
为当前选择器附加”id需要以prefix开头”的筛选条件。比较少用。
UiSelector.idEndsWith(suffix)
suffix
{string} id后缀
为当前选择器附加”id需要以suffix结束”的筛选条件。比较少用。
UiSelector.idMatches(reg)
- reg {Regex} | {string} id要满足的正则表达式
附加id需要满足正则表达式。
需要注意的是,如果正则表达式是字符串,则需要使用\\
来表达\
(也即Java正则表达式的形式),例如textMatches("\\d+")
匹配多位数字;但如果使用JavaScript语法的正则表达式则不需要,例如textMatches(/\d+/)
。但如果使用字符串的正则表达式则该字符串不能以”/”同时以”/”结束,也即不能写诸如textMatches("/\\d+/")
的表达式,否则会被开头的”/”和结尾的”/”会被忽略。
idMatches("[a-zA-Z]+")
UiSelector.className(str)
str
{string} 控件文本- 返回 {UiSelector} 返回选择器自身以便链式调用
为当前选择器附加控件”className等于字符串str”的筛选条件。
控件的className(类名)表示一个控件的类别,例如文本控件的类名为android.widget.TextView。
如果一个控件的类名以”android.widget.”开头,则可以省略这部分,例如文本控件可以直接用className("TextView")
的选择器。
常见控件的类名如下:
android.widget.TextView
文本控件android.widget.ImageView
图片控件android.widget.Button
按钮控件android.widget.EditText
输入框控件android.widget.AbsListView
列表控件android.widget.LinearLayout
线性布局android.widget.FrameLayout
帧布局android.widget.RelativeLayout
相对布局android.widget.RelativeLayout
相对布局android.support.v7.widget.RecyclerView
通常也是列表控件
UiSelector.classNameContains(str)
str
{string} 要包含的字符串
为当前选择器附加控件”className需要包含字符串str”的筛选条件。
UiSelector.classNameStartsWith(prefix)
prefix
{string} 前缀
为当前选择器附加控件”className需要以prefix开头”的筛选条件。
UiSelector.classNameEndsWith(suffix)
suffix
{string} 后缀
为当前选择器附加控件”className需要以suffix结束”的筛选条件。
UiSelector.classNameMatches(reg)
reg
{string} | {Regex} 要满足的正则表达式。
为当前选择器附加控件”className需要满足正则表达式reg”的条件。
有关正则表达式,可以查看[正则表达式 – 菜鸟教程]。
需要注意的是,如果正则表达式是字符串,则需要使用\\
来表达\
(也即Java正则表达式的形式),例如textMatches("\\d+")
匹配多位数字;但如果使用JavaScript语法的正则表达式则不需要,例如textMatches(/\d+/)
。但如果使用字符串的正则表达式则该字符串不能以”/”同时以”/”结束,也即不能写诸如textMatches("/\\d+/")
的表达式,否则会被开头的”/”和结尾的”/”会被忽略。