当我们编写代码时,重复的代码是一个很常见的问题。为了提高代码的可维护性和可重用性,我们可以将这些重复的代码提取出来,并封装成函数。
环境
- Autojs pro 9.3.11
下面是一些我封装的通用函数代码示例:
1.重新封装选择器调用,方便通过网络更新节点
/**
* 根据提供的选择器方法和参数选择元素。
* 构造并返回一个选择器对象,根据传入的选择器数据依次调用对应的选择器方法。
* @param {Object} query - 包含选择器方法名和参数的对象。
* @returns {Object} - 选择结果的对象。
*/
function select(query) {
// 将选择器方法名和方法参数解构出来,然后通过 reduce 方法逐个调用该对象的方法。
return Object.entries(query).reduce(
(s, [method, args]) => s[method](args),
selector()
);
}
// 使用方法:传入选择器节点对象
select({ textMatches: /微信号.*/ }).findOnce()
2.通过上面的封装,再来点击节点函数,这里我添加范围随机点击,能符合人的操作
[content_hide]
/**
* 点击符合给定条件的可见节点。
*
* @param {Object} query - 包含选择器方法和参数的对象。
* @param {Object} [options] - 可选参数对象。
* @param {boolean} [options.isRandom=false] - 是否随机点击节点。
* @param {string} [options.mark] - 操作标记,用于在日志中标识该操作。
* @param {Function} [options.log] - 用于输出日志的自定义函数。
* @param {Function} [options.error] - 用于输出错误信息的自定义函数。
* @returns {boolean} - 如果成功点击节点则返回 true,否则返回 false。
*/
function clickNode(query, options) {
options = options || {};
options.isRandom = options.isRandom || false;
// 使用封装的 select 函数查找符合条件的节点。
let node = select(query).findOnce();
let ret = false;
if (node) {
let rect = node.bounds();
if (options.isRandom) {
// 范围随机点击, 按压时长随机值
let x = random(rect.left + 1, rect.right - 1);
let y = random(rect.top + 1, rect.bottom - 1);
let duration = random(50, 300);
press(x, y, duration);
ret = true;
} else {
// 如果控件可以点击
if (node.clickable()) {
if (node.click()) {
ret = true;
} else {
node.clickCenter();
ret = true;
}
} else {
// 点击中心点
if (rect.centerX() > 0 && rect.centerY() > 0) {
node.clickCenter();
ret = true;
}
}
}
}
let mark = options.mark ? options.mark : query.toString();
if (ret) {
let message = "点击:" + mark;
// 如果传递了 error 方法,则使用该方法输出错误信息,否则使用 console.error 方法。
options.log ? options.log(message) : console.log(message);
return ret;
} else {
let message = "[点击失败]-没有找到:" + mark;
options.error ? options.error(message) : console.error(message);
return ret;
}
}
// 使用方法:传入选择器节点对象
let wechat = {
addressBook: { textMatches: /通讯录/ },
new: { textMatches: /新的朋友/ },
};
clickNode(wechat.addressBook, { mark: "通讯录", isRandom: true });
sleep(1000);
clickNode(wechat.new, { mark: "通讯录", isRandom: true });
一有时间,就逐步添加。
[/content_hide]
这些是一些简单的示例函数,你可以根据自己的需求进行修改和扩展。通过封装这些通用函数,我们可以减少重复代码的数量,提高代码的可读性和可维护性,并且可以在不同的场景中多次使用这些函数,提高代码的复用性。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
- 最新
- 最热
只看作者