Autojs控件操作:控件选择器的使用(2)

本课视频教程: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+/")的表达式,否则会被开头的”/”和结尾的”/”会被忽略。

搜索