YYPOST群发软件 发表于 16 小时前

clickPercent天然适配不同分辨率找控件点击



clickPercent天然适配不同分辨率找控件点击










/**
* 案例 8:clickPercent天然适配不同分辨率找控件点击
*
* 只教一件事:怎么用 auto.nodeSearch 在当前页面找到控件并点进去。
* 控件查找比找图/OCR 都稳——不用做模板、不受分辨率影响、文字变了也不怕。
*
* 演示流程:打开快手 → 找弹窗上的 "不再提示" → 算中心坐标点掉 →
*         再搜一次,节点消失即为点成功。
*
* 运行:真机/模拟器上直接跑(要开无障碍服务),不需要任何资源文件。
* 改成自己的业务:只要把 CAND_WORDS 换成你要找的文字,APP_PKG 换成目标包名。
*/

// ==================== 配置(改这里)====================
var APP_PKG = "com.smile.gifmaker";                        // 快手
var CAND_WORDS = ["不再提示", "不再显示", "我知道了"];         // 候选词:命中哪个点哪个
var SEARCH_TIMEOUT = 3000;                                 // 节点搜索超时(ms)
var WAIT_AFTER_OPEN = 3500;                                  // 打开后等待弹窗出现的时长(ms)

// ==================== 全局变量放顶部 ====================
var gFoundWord = "";

// ==================== 工具 ====================
function doSleep(ms) { sleep.millisecond(ms); }

// ==================== 核心:按候选词找控件 ====================
// auto.nodeSearch(超时).textIncludes(词) 返回节点集合;
// 集合为空时是 ''(不是 null),这是 AIWROK 的固定判断写法
function findNodeByText(texts, timeout) {
for (var i = 0; i < texts.length; i++) {
    var nodesObj = auto.nodeSearch(timeout).textIncludes(texts);
    if (nodesObj != '') {
      var nodeObj = nodesObj.getNode(0);
      return { node: nodeObj, word: texts };
    }
}
return null;
}

// ==================== 主流程 ====================
function runMain() {
printl("╔════════════════════════════════════════╗");
printl("║案例8:找控件点击 nodeSearch          ║");
printl("╚════════════════════════════════════════╝");

// ---- 1. 打开快手 ----
app.openApp(APP_PKG);
doSleep(WAIT_AFTER_OPEN);   // 等冷启动 + 弹窗出现
printl("[打开] 当前页面: " + app.getCurrentActivity());

// ---- 2. 找弹窗上的控件 ----
var found = findNodeByText(CAND_WORDS, SEARCH_TIMEOUT);
if (found == null) {
    printl("[失败] 页面上没有候选词: " + CAND_WORDS.join("/"));
    try { toast.show("没找到" + CAND_WORDS + ",可能没弹窗"); } catch (e) {}
    return;   // 找不到就体面退出,绝不硬点
}
gFoundWord = found.word;
printl("[找到] \"" + gFoundWord + "\" 文本=" + found.node.getText());

// ---- 3. 算中心坐标并点击 ----
// getCenterPoint() 带 XPercent()/YPercent(),是百分比坐标,
// 配合 auto.clickPercent 天然适配不同分辨率
var p = found.node.getCenterPoint();
var xp = p.XPercent();
var yp = p.YPercent();
printl("[坐标] 中心 = (" + xp.toFixed(3) + ", " + yp.toFixed(3) + ")");
auto.clickPercent(xp, yp);
doSleep(1500);

// ---- 4. 验证:再搜一次,节点消失 = 点掉了 ----
// 弹窗类操作不能靠 Activity 跳转验证,看"目标还在不在"最直接
var again = findNodeByText(CAND_WORDS, 1500);
if (again == null) {
    printl("[验证] ✅ \"" + gFoundWord + "\" 已消失,点击成功");
    try { toast.show("✅ 弹窗已点掉"); } catch (e) {}
} else {
    printl("[验证] ⚠ \"" + again.word + "\" 还在,可能没点中或弹窗刷新了");
    try { toast.show("已点击,但控件还在"); } catch (e) {}
}

printl("[结束]");
}

runMain();


页: [1]
查看完整版本: clickPercent天然适配不同分辨率找控件点击