|
|
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[i]);
- if (nodesObj != '') {
- var nodeObj = nodesObj.getNode(0);
- return { node: nodeObj, word: texts[i] };
- }
- }
- 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[0] + ",可能没弹窗"); } 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();
复制代码
|
|