前言
UI选择器中,有findOne()、findOne(timeout)、findOnce()、findOnce(i)、find()、untilFind()几个函数接口。在开发的过程中,这几个接口有什么区别呢?
下面飞云结合Autojs Pro的官方文档,来分享一下。
UiSelector.findOne()
返回值类型 | 备注 |
---|---|
UiSelector | 返回选择器自身以便链式调用 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止,并返回该控件。如果找不到控件,当屏幕内容发生变化时会重新寻找,直至找到。
需要注意的是,如果屏幕上一直没有出现所描述的控件,则该函数会阻塞,直至所描述的控件出现为止。因此此函数不会返回null。
该函数本来应该命名为untilFindOne(),但由于历史遗留原因已经无法修改。如果想要只在屏幕上搜索一次而不是一直搜索,请使用findOnce()。
另外,如果屏幕上有多个满足条件的控件,findOne()采用深度优先搜索(DFS),会返回该搜索算法找到的第一个控件。注意控件找到的顺序有时会起到作用。
一句话总结
findOne()函数会一直在屏幕上不停的寻找组件,直到找到。无返回值。
UiSelector.findOne(timeout)
参数 | 类型 | 描述 |
---|---|---|
timeout | number | 搜索的超时时间,单位毫秒 |
返回值类型 | 备注 |
---|---|
UiSelector | 返回选择器自身以便链式调用 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止,并返回该控件;如果在timeout毫秒的时间内没有找到符合条件的控件,则终止搜索并返回null。
该函数类似于不加参数的findOne(),只不过加上了时间限制。
官方示例:
//启动Auto.js
launchApp("Auto.js");
//在6秒内找出日志图标的控件
var w = id("action_log").findOne(6000);
//如果找到控件则点击
if(w != null){
w.click();
}else{
//否则提示没有找到
toast("没有找到日志图标");
}
一句话总结
findOne(timeout)函数在设定时间内寻找组件,返回null或返回找到的控件。
UiSelector.findOnce()
返回值类型 | 备注 |
---|---|
UiSelector | 返回选择器自身以便链式调用 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,如果找到符合条件的控件则返回该控件;否则返回null。
function 微信朋友圈点赞() {
// 检查是否在朋友圈页面
object = text("朋友圈").findOnce();
if (object != null) {
object = desc("返回").findOnce();
if (object != null) {
//中间代码省略...
};
};
};
一句话总结
findOnce()函数在屏幕上寻找组件,返回null或返回找到的控件。
UiSelector.findOnce(i)
参数 | 类型 | 描述 |
---|---|---|
i | {number} | 索引 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,并返回第 i + 1 个符合条件的控件;如果没有找到符合条件的控件,或者符合条件的控件个数 < i, 则返回null。
注意这里的控件次序,是搜索算法深度优先搜索(DSF)决定的。
一句话总结
findOnce(i)函数在屏幕上寻找索引为 i + 1 的组件,返回null或返回找到的控件。
UiSelector.find()
返回值类型 | 备注 |
---|---|
UiCollection | 控件集合 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,找到所有满足条件的控件集合并返回。这个搜索只进行一次,并不保证一定会找到,因而会出现返回的控件集合为空的情况。
不同于findOne()或者findOnce()只找到一个控件并返回一个控件,find()函数会找出所有满足条件的控件并返回一个控件集合。之后可以对控件集合进行操作。
可以通过empty()函数判断找到的是否为空。例如:
var object = id("v_sex_age").find();
if (!object.empty()) {
toast("找到啦");
object.forEach(function(currentValue, index) {
log(index)
})
} else {
toast("没找到╭(╯^╰)╮");
}
一句话总结
find()函数遍历屏幕上的组件,返回组件的集合。没招到则返回空集。
UiSelector.untilFind()
返回值类型 | 备注 |
---|---|
UiCollection | 控件集合 |
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到找到至少一个满足条件的控件为止,并返回所有满足条件的控件集合。
该函数与find()函数的区别在于,该函数永远不会返回空集合;但是,如果屏幕上一直没有出现满足条件的控件,则该函数会保持阻塞。
一句话总结
untilFind()函数会一直在屏幕上不停的寻找组件,直到找到。找到后返回组件的集合。
UiObject文档
相关教程
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » Autojs Pro中,常用的几个选择器搜索接口的区别