选择器进阶

## selector() * 返回 {UiSelector} 创建一个新的选择器。但一般情况不需要使用该函数,因为可以直接用相应条件的语句创建选择器。 由于历史遗留原因,本不应该这样设计(不应该让`id()`, `text()`等作为全局函数,而是应该用`By.id()`, `By.text()`),但为了后向兼容性只能保留这个设计。 这样的API设计会污染全局变量,后续可能会支持"去掉这些全局函数而使用By.***"的选项。 ## UiSelector.algorithm(algorithm) **[v4.1.0新增]** * `algorithm` {string} 搜索算法,可选的值有: * `DFS` 深度优先算法,选择器的默认算法 * `BFS` 广度优先算法 指定选择器的搜索算法。例如: ``` log(selector().text("文本").algorithm("BFS").find()); ``` 广度优先在控件所在层次较低时,或者布局的层次不多时,通常能更快找到控件。 ## 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"的条件。 有关正则表达式,可以查看[正则表达式 - 菜鸟教程](http://www.runoob.com/Stringp/Stringp-example.html)。 需要注意的是,如果正则表达式是字符串,则需要使用`\\`来表达`\`(也即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"的条件。 有关正则表达式,可以查看[正则表达式 - 菜鸟教程](http://www.runoob.com/Stringp/Stringp-example.html)。 需要注意的是,如果正则表达式是字符串,则需要使用`\\`来表达`\`(也即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"的筛选条件。