|
|
agent´úÀíģʽ¹¦ÄÜС½á
- // AIWROK agent ´úÀí API ÍêÕûʾÀý
- // չʾ³£ÓõĴúÀí²Ù×÷
- print.log("===== agent ´úÀí API ʾÀý =====");
- // ========== 1. ¾ø¶Ô×ø±êµã»÷ agent.click(x, y) ==========
- print.log("\n--- 1. ¾ø¶Ô×ø±êµã»÷ agent.click(x, y) ---");
- print.log("˵Ã÷£ºÊ¹ÓÃÆÁÄ»¾ø¶ÔÏñËØ×ø±ê½øÐеã»÷");
- print.log("ÊÊÓãºÒÑÖª¾«È·×ø±êµÄ³¡¾°");
- var ÆÁÄ»¿í = screen.getScreenWidth();
- var ÆÁÄ»¸ß = screen.getScreenHeight();
- print.log("µ±Ç°ÆÁÄ»£º" + ÆÁÄ»¿í + " x " + ÆÁÄ»¸ß);
- agent.click(100, 100);
- print.log("✓ Òѵã»÷×ø±ê (100, 100)");
- var ÖÐÐÄX = Math.floor(ÆÁÄ»¿í / 2);
- var ÖÐÐÄY = Math.floor(ÆÁÄ»¸ß / 2);
- agent.click(ÖÐÐÄX, ÖÐÐÄY);
- print.log("✓ Òѵã»÷ÆÁÄ»ÖÐÐÄ (" + ÖÐÐÄX + ", " + ÖÐÐÄY + ")");
- // ========== 2. °Ù·Ö±È×ø±êµã»÷ agent.clickPercent(px, py) ==========
- print.log("\n--- 2. °Ù·Ö±È×ø±êµã»÷ agent.clickPercent(px, py) ---");
- print.log("˵Ã÷£ºÊ¹ÓðٷֱÈ×ø±ê£¨0.0-1.0£©£¬×Ô¶¯ÊÊÅ䲻ͬÆÁÄ»");
- print.log("ÊÊÓãºÐèÒªÔÚ²»Í¬·Ö±æÂÊÉ豸ÉÏÔËÐеĽű¾");
- agent.clickPercent(0.5, 0.5);
- print.log("✓ Òѵã»÷ÆÁÄ»ÖÐÐÄ (50%, 50%)");
- agent.clickPercent(0.9, 0.9);
- print.log("✓ Òѵã»÷ÆÁÄ»ÓÒÏÂÇøÓò (90%, 90%)");
- agent.clickPercent(0.5, 0.1);
- print.log("✓ Òѵã»÷ÆÁÄ»¶¥²¿Öмä (50%, 10%)");
- // ========== 3. ²éÕÒÎÄ×Ö²¢µã»÷ ==========
- print.log("\n--- 3. ²éÕÒÎÄ×Ö²¢µã»÷ ---");
- print.log("˵Ã÷£ºÍ¨¹ý agent.shell() Ö´ÐÐ uiautomator dump »ñÈ¡ UI XML");
- print.log("×¢Ò⣺agent.getXml() ·µ»Ø¶ÔÏó¶ø·Ç×Ö·û´®£¬»ñÈ¡UI() ·µ»Ø×Ö·û´®");
- function Ö´ÐÐShell(ÃüÁî) {
- var ½á¹û = agent.shell(ÃüÁî);
- if (!½á¹û) return "";
-
- var ½á¹û×Ö·û´® = "";
- if (typeof ½á¹û === "string") {
- ½á¹û×Ö·û´® = ½á¹û;
- } else if (½á¹û.toString) {
- ½á¹û×Ö·û´® = ½á¹û.toString();
- } else {
- ½á¹û×Ö·û´® = "" + ½á¹û;
- }
-
- var startIdx = -1;
- if (typeof ½á¹û×Ö·û´®.indexOf === "function") {
- startIdx = ½á¹û×Ö·û´®.indexOf("successMsg:");
- }
-
- if (startIdx !== -1) {
- var afterSuccess = ½á¹û×Ö·û´®.substring(startIdx + 11);
- var errorIdx = afterSuccess.indexOf(",errorMsg:");
- if (errorIdx !== -1) {
- var content = afterSuccess.substring(0, errorIdx);
- var endMarker = content.indexOf("UI hierchary dumped to:");
- if (endMarker !== -1) {
- content = content.substring(0, endMarker);
- }
- return "" + content.trim();
- }
- return "" + afterSuccess.trim();
- }
-
- return "" + ½á¹û×Ö·û´®;
- }
- function »ñÈ¡UI() {
- var ÁÙʱÎļþ = "/sdcard/ui_dump.xml";
- agent.shell("uiautomator dump --compressed " + ÁÙʱÎļþ + " 2>/dev/null");
- var ½á¹û = agent.shell("cat " + ÁÙʱÎļþ);
-
- if (!½á¹û) return "";
-
- var ½á¹û×Ö·û´® = "";
- if (typeof ½á¹û === "string") {
- ½á¹û×Ö·û´® = ½á¹û;
- } else if (½á¹û.toString) {
- ½á¹û×Ö·û´® = ½á¹û.toString();
- } else {
- ½á¹û×Ö·û´® = "" + ½á¹û;
- }
-
- var startIdx = -1;
- if (typeof ½á¹û×Ö·û´®.indexOf === "function") {
- startIdx = ½á¹û×Ö·û´®.indexOf("successMsg:");
- }
-
- var content = "";
- if (startIdx !== -1) {
- var afterSuccess = ½á¹û×Ö·û´®.substring(startIdx + 11);
- var errorIdx = afterSuccess.indexOf(",errorMsg:");
- if (errorIdx !== -1) {
- content = afterSuccess.substring(0, errorIdx);
- var endMarker = content.indexOf("UI hierchary dumped to:");
- if (endMarker !== -1) {
- content = content.substring(0, endMarker);
- }
- } else {
- content = afterSuccess;
- }
- content = content.trim();
- } else {
- content = ½á¹û×Ö·û´®;
- }
-
- return "" + content;
- }
- var xml = »ñÈ¡UI();
- if (xml.indexOf("ÍøÂçºÍ»¥ÁªÍø") !== -1) {
- print.log("ÕÒµ½¡¾ÍøÂçºÍ»¥ÁªÍø¡¿½Úµã");
- var ÎÄ×ÖË÷Òý = xml.indexOf("ÍøÂçºÍ»¥ÁªÍø");
- var ºóÃæ = xml.substring(ÎÄ×ÖË÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (m) {
- var left = parseInt(m[1]);
- var top = parseInt(m[2]);
- var right = parseInt(m[3]);
- var bottom = parseInt(m[4]);
- var centerX = (left + right) / 2;
- var centerY = (top + bottom) / 2;
- print.log("½Úµã·¶Î§£º[" + left + "," + top + "][" + right + "," + bottom + "]");
- print.log("¼ÆËãÖÐÐĵ㣺(" + centerX + ", " + centerY + ")");
- agent.click(centerX, centerY);
- print.log("✓ Òѵã»÷¡¾ÍøÂçºÍ»¥ÁªÍø¡¿");
- } else {
- print.log("⚠ δÕÒµ½½Úµã×ø±ê");
- }
- } else {
- print.log("µ±Ç°Ò³ÃæÎ´ÕÒµ½¡¾ÍøÂçºÍ»¥ÁªÍø¡¿");
- }
- print.log("\n💡 µã»÷Ìáʾ£º");
- print.log("- agent.click(x,y) ÊʺϹ̶¨×ø±ê»ò´Ó½Úµã¼ÆËã³öµÄ×ø±ê");
- print.log("- agent.clickPercent(px,py) ÊʺϿçÉ豸¼æÈݵij¡¾°");
- print.log("- Á½Õß¿ÉÒÔÅäºÏ auto.findText() ʵÏÖÖÇÄܶ¨Î»µã»÷");
- // ========== 4. »¬¶¯²Ù×÷ ==========
- print.log("\n--- 4. »¬¶¯²Ù×÷ ---");
- agent.swip(540, 2800, 540, 800, 500); // ´ÓÏÂÍùÉÏ»¬¶¯
- print.log("✓ »¬¶¯Íê³É");
- // ========== 5. AI Ëã·¨»¬¶¯£¨Ä£ÄâÊÖ¶¯£©==========
- print.log("\n--- 5. AI Ëã·¨»¬¶¯ ---");
- agent.swipAI(540, 2800, 540, 800); // ¸ü×ÔÈ»µÄ»¬¶¯
- print.log("✓ AI »¬¶¯Íê³É");
- // ========== 6. °´¼ü²Ù×÷ ==========
- print.log("\n--- 6. °´¼ü²Ù×÷ ---");
- agent.back(); // ·µ»Ø¼ü
- print.log("✓ °´Ï·µ»Ø¼ü");
- agent.home(); // Home ¼ü
- print.log("✓ °´Ï Home ¼ü");
- agent.home2(); // Home ¼ü£¨ÁíÒ»ÖÖʵÏÖ·½Ê½£©
- print.log("✓ ·¢ËÍ Home °´¼ü£¨home2£©");
- agent.recents(); // ×î½üÈÎÎñ¼ü
- print.log("✓ °´ÏÂ×î½üÈÎÎñ¼ü");
- // agent.power(); // ¿ª»ú¼ü£¨ÒƵ½½Å±¾×îºó£¬±ÜÃâÌáǰ¹ØÆÁ£©
- // print.log("✓ °´Ï¿ª»ú¼ü");
- agent.keyPress(4); // ·¢ËͰ´¼üÂë 4£¨·µ»Ø¼ü£¬µÈͬÓÚ back()£©
- print.log("✓ ͨ¹ý keyPress ·¢ËÍ·µ»Ø¼ü");
- agent.keyPress(3); // ·¢ËͰ´¼üÂë 3£¨Home ¼ü£¬µÈͬÓÚ home()£©
- print.log("✓ ͨ¹ý keyPress ·¢ËÍ Home ¼ü");
- // ========== 7. ÊäÈëÎı¾ ==========
- print.log("\n--- 7. ÊäÈëÎı¾ ---");
- agent.input("Hello World"); // ÊäÈëÎÄ×Ö
- print.log("✓ ÒÑÊäÈëÎı¾");
- // ========== 8. »ñÈ¡½ÚµãÐÅÏ¢ ==========
- print.log("\n--- 8. »ñÈ¡½ÚµãÐÅÏ¢ ---");
- print.log("×¢Ò⣺agent.getXml() ·µ»Ø¶ÔÏ󣬻ñÈ¡UI() ·µ»Ø×Ö·û´®");
- var xml2 = »ñÈ¡UI();
- print.log("XML ³¤¶È£º" + xml2.length);
- function ²éÕÒËùÓаüº¬ÎÄ×ֵĽڵã(xml, ÎÄ×Ö) {
- var ½á¹û = [];
- var λÖà = 0;
- while (true) {
- var Ë÷Òý = xml.indexOf('text="' + ÎÄ×Ö + '"', λÖÃ);
- if (Ë÷Òý === -1) break;
- var ºóÃæ = xml.substring(Ë÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (m) {
- ½á¹û.push({
- left: parseInt(m[1]),
- top: parseInt(m[2]),
- right: parseInt(m[3]),
- bottom: parseInt(m[4]),
- centerX: (parseInt(m[1]) + parseInt(m[3])) / 2,
- centerY: (parseInt(m[2]) + parseInt(m[4])) / 2
- });
- }
- λÖà = Ë÷Òý + 10;
- }
- return ½á¹û;
- }
- var nodes = ²éÕÒËùÓаüº¬ÎÄ×ֵĽڵã(xml2, "ͬÒâ");
- print.log("ÕÒµ½°üº¬'ͬÒâ'µÄ½ÚµãÊý£º" + nodes.length);
- function ²éÕÒËùÓнڵãJSON(xml) {
- var ½á¹û = [];
- var ½ÚµãÁбí = [];
- var classIndex = xml.indexOf('class="');
- while (classIndex !== -1) {
- var ºóÃæ = xml.substring(classIndex);
- var boundsM = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- var textM = ºóÃæ.match(/text="([^"]*)"/);
- var idM = ºóÃæ.match(/resource-id="([^"]*)"/);
- if (boundsM) {
- var ½Úµã = {
- class: "",
- left: parseInt(boundsM[1]),
- top: parseInt(boundsM[2]),
- right: parseInt(boundsM[3]),
- bottom: parseInt(boundsM[4]),
- text: textM ? textM[1] : "",
- resourceId: idM ? idM[1] : ""
- };
- ½á¹û.push(½Úµã);
- }
- classIndex = xml.indexOf('class="', classIndex + 7);
- }
- return ½á¹û;
- }
- var jsonNodes = ²éÕÒËùÓнڵãJSON(xml2);
- print.log("JSON ½ÚµãÊý£º" + jsonNodes.length);
- print.log("\n💡 Ìáʾ£ºagent.findNodesByTextMatches/Contains/Json ÔÚʵ¼ÊÉ豸Éϲ»´æÔÚ");
- print.log(" ÇëʹÓà agent.shell('uiautomator dump ...') + ×Ô¶¨Ò庯Êý½âÎö");
- // ========== 9. ½ØÍ¼ ==========
- print.log("\n--- 9. ÆÁÄ»½ØÍ¼ ---");
- print.log("˵Ã÷£ºagent.screenShot() ÔÚ²¿·ÖÉ豸Éϲ»´æÔÚ£¬Ê¹Óà shell ÃüÁî½ØÍ¼");
- var ½ØÍ¼Â·¾¶ = "/sdcard/screenshot_" + Date.now() + ".png";
- agent.shell("screencap -p " + ½ØÍ¼Â·¾¶);
- print.log("✓ ½ØÍ¼Òѱ£´æµ½£º" + ½ØÍ¼Â·¾¶);
- var ¼ì²éÎļþ = Ö´ÐÐShell("ls -l " + ½ØÍ¼Â·¾¶);
- if (¼ì²éÎļþ) {
- print.log("✓ ½ØÍ¼ÎļþÐÅÏ¢£º" + ¼ì²éÎļþ);
- }
- // ========== 10. Shell ÃüÁî ==========
- print.log("\n--- 10. Ö´ÐÐ Shell ÃüÁî ---");
- var result = Ö´ÐÐShell("uiautomator dump --compressed /proc/self/fd/1 2>/dev/null");
- print.log("✓ Shell ÃüÁîÖ´ÐÐÍê³É");
- // ========== 11. ´¥Ãþʼþ£¨¸ß¼¶£©==========
- print.log("\n--- 11. ´¥Ãþʼþ ---");
- print.log("˵Ã÷£ºtouchDown ¿ÉÓ㬵« touchMove/touchUp/touchUpUp ÔÚ²¿·ÖÉ豸Éϲ»´æÔÚ");
- print.log("×¢Ò⣺ʵ¼Ê²âÊÔÖУ¬½ö touchDown ¿Éµ÷Óã¬ÆäËû·½·¨±¨´í");
- agent.touchDown(540, 1800); // °´Ï£¨x, y£©- ÒÑÑéÖ¤¿ÉÓÃ
- sleep.millisecond(ºÁÃë = 100);
- // agent.touchMove(540, 1900); // ÒÆ¶¯ - ±¨´í£ºCan't find method
- // sleep.millisecond(ºÁÃë = 100);
- // agent.touchUp(540, 1900); // ̧Æð - ±¨´í£ºCan't find method
- print.log("✓ touchDown Ö´ÐÐÍê³É£¨touchMove/touchUp/touchUpUp ÔÚµ±Ç°É豸Éϲ»¿ÉÓã©");
- // touchUpUp Óë touchUp ÀàËÆ£¬µ«Í¬ÑùÔÚµ±Ç°É豸Éϲ»¿ÉÓÃ
- // agent.touchUpUp(540, 1900); // ´¥Ãþ̧Æð - ±¨´í£ºCan't find method
- print.log("✓ touchUpUp ÔÚµ±Ç°É豸Éϲ»¿ÉÓÃ");
- // ========== 12. ¼ì²é´úÀí״̬ ==========
- print.log("\n--- 12. ´úÀí״̬ ---");
- var isOpen = agent.isOpen();
- print.log("´úÀíÊÇ·ñ¿ªÆô£º" + isOpen);
- // ========== 13. ¿ªÆô´úÀíģʽ ==========
- print.log("\n--- 13. ¿ªÆô´úÀíģʽ agent.start() ---");
- print.log("˵Ã÷£º¿ªÆô´úÀíģʽ£¬ÊÖ»ú±ØÐë root »òʹÓà PC_IDE µÄ adb Á¬½Ó");
- print.log("·µ»ØÖµ£ºboolean£¬³É¹¦·µ»Ø true");
- var ¿ªÆô½á¹û = agent.start();
- print.log("¿ªÆô´úÀíģʽ½á¹û£º" + ¿ªÆô½á¹û);
- var Ôٴμì²é = agent.isOpen();
- print.log("¿ªÆôºó´úÀí״̬£º" + Ôٴμì²é);
- // ========== 14. Ëĸö·½Ïò»¬¶¯ ==========
- print.log("\n--- 14. Ëĸö·½Ïò»¬¶¯ ---");
- print.log("˵Ã÷£ºÍ¨¹ý½»»»ÆðÖ¹×ø±êʵÏÖÉÏ/ÏÂ/×ó/ÓÒËĸö·½ÏòµÄ»¬¶¯");
- var ÖÐX = Math.floor(ÆÁÄ»¿í / 2);
- var ÖÐY = Math.floor(ÆÁÄ»¸ß / 2);
- var Æ«ÒÆ = 800;
- // ÏòÉÏ»¬¶¯£¨ÄÚÈÝÏòÉϹö¶¯£¬¿´Ï·½ÄÚÈÝ£©
- agent.swip(ÖÐX, ÖÐY + Æ«ÒÆ, ÖÐX, ÖÐY - Æ«ÒÆ, 500);
- print.log("✓ ÏòÉÏ»¬¶¯Íê³É");
- // ÏòÏ»¬¶¯£¨ÄÚÈÝÏòϹö¶¯£¬¿´ÉÏ·½ÄÚÈÝ£©
- agent.swip(ÖÐX, ÖÐY - Æ«ÒÆ, ÖÐX, ÖÐY + Æ«ÒÆ, 500);
- print.log("✓ ÏòÏ»¬¶¯Íê³É");
- // Ïò×󻬶¯£¨²é¿´ÓÒ²àÄÚÈÝ£¬Èç·Ò³£©
- agent.swip(ÖÐX + Æ«ÒÆ, ÖÐY, ÖÐX - Æ«ÒÆ, ÖÐY, 500);
- print.log("✓ Ïò×󻬶¯Íê³É");
- // ÏòÓÒ»¬¶¯£¨²é¿´×ó²àÄÚÈÝ£¬Èç·µ»ØÉÏÒ»Ò³£©
- agent.swip(ÖÐX - Æ«ÒÆ, ÖÐY, ÖÐX + Æ«ÒÆ, ÖÐY, 500);
- print.log("✓ ÏòÓÒ»¬¶¯Íê³É");
- // ========== 15. ³¤°´²Ù×÷ ==========
- print.log("\n--- 15. ³¤°´²Ù×÷ ---");
- print.log("˵Ã÷£ºÓÉÓÚ touchUp ÔÚµ±Ç°É豸Éϲ»¿ÉÓã¬Ê¹Óà swip ʵÏÖ³¤°´");
- // agent.touchDown(540, 1800);
- // sleep.second(Ãë = 2);
- // agent.touchUp(540, 1800); // ±¨´í£ºCan't find method
- // print.log("✓ ³¤°´ (540, 1800) ³ÖÐø 2 ÃëÍê³É");
- // ³¤°´Óà swip ʵÏÖ£¨ÆðµãÖյ㼸ºõÏàͬ£¬Ê±¼ä³¤£©
- agent.swip(540, 1800, 541, 1801, 2000);
- print.log("✓ ͨ¹ý swip ʵÏÖ³¤°´Íê³É£¨³ÖÐø 2 Ã룩");
- // ========== 15. Ë«»÷²Ù×÷ ==========
- print.log("\n--- 15. Ë«»÷²Ù×÷ ---");
- print.log("˵Ã÷£ºÁ½´ÎÁ¬Ðø click£¬¼ä¸ô 100-200ms Ä£ÄâË«»÷");
- agent.click(540, 1800);
- sleep.millisecond(ºÁÃë = 150);
- agent.click(540, 1800);
- print.log("✓ Ë«»÷ (540, 1800) Íê³É");
- // ========== 16. ¼ôÌù°å²Ù×÷ÓëÕ³Ìù ==========
- print.log("\n--- 16. ¼ôÌù°å²Ù×÷ÓëÕ³Ìù ---");
- print.log("˵Ã÷£ºÏÈдÈë¼ôÌù°å£¬ÔÙͨ¹ý°´¼üÕ³Ìùµ½µ±Ç°ÊäÈë¿ò");
- var ´ýÊäÈëÎı¾ = "ÕâÊÇÒªÕ³ÌùµÄÖÐÎÄÄÚÈÝ";
- // ·½Ê½1£ºÍ¨¹ý Clipboard.copy() ÉèÖüôÌù°å
- Clipboard.copy(´ýÊäÈëÎı¾);
- sleep.millisecond(ºÁÃë = 300);
- // ·½Ê½2£ºÍ¨¹ý shell service call clipboard£¨Ë«±£ÏÕ£¬²¿·ÖÉ豸 Clipboard API ʧЧʱʹÓã©
- agent.shell("service call clipboard 3 i32 1 s16 '" + ´ýÊäÈëÎı¾ + "' i32 0");
- sleep.millisecond(ºÁÃë = 300);
- // ´¥·¢Õ³Ìù£ºKEYCODE_PASTE (279)
- agent.shell("input keyevent 279");
- sleep.second(Ãë = 1);
- print.log("✓ ÒÑͨ¹ý KEYCODE_PASTE Õ³ÌùÎı¾");
- // ±¸Ó÷½Ê½£ºCtrl+V ×éºÏ¼ü£¨KEYCODE_V=50 + META_CTRL_ON=0x1000£©
- // agent.shell("input keyevent 50 --meta 0x1000");
- // ========== 17. Æô¶¯Ó¦Óà ==========
- print.log("\n--- 17. Æô¶¯Ó¦Óà ---");
- print.log("˵Ã÷£ºÊ¹Óà app.openApp() Æô¶¯Ö¸¶¨°üÃûµÄÓ¦ÓÃ");
- var ¶¶Òô°üÃû = "com.ss.android.ugc.aweme";
- var СºìÊé°üÃû = "com.xingin.xhs";
- var ΢ÐŰüÃû = "com.tencent.mm";
- var Í·Ìõ¼«ËÙ°æ°üÃû = "com.ss.android.article.lite";
- var ÉèÖðüÃû = "com.android.settings";
- print.log("³£ÓÃÓ¦ÓðüÃû£º");
- print.log("- ¶¶Òô£º" + ¶¶Òô°üÃû);
- print.log("- СºìÊ飺" + СºìÊé°üÃû);
- print.log("- ΢ÐÅ£º" + ΢ÐŰüÃû);
- print.log("- Í·Ìõ¼«Ëٰ棺" + Í·Ìõ¼«ËÙ°æ°üÃû);
- print.log("- ÉèÖãº" + ÉèÖðüÃû);
- // Æô¶¯¶¶Òô£¨Ê¾Àý£¬×¢Ê͵ô±ÜÃâʵ¼ÊÖ´ÐУ©
- // app.openApp(¶¶Òô°üÃû);
- // sleep.second(Ãë = 5);
- // print.log("✓ ÒÑÆô¶¯¶¶Òô");
- print.log("💡 Ìáʾ£ºÆô¶¯ºó¿ÉÅäºÏ agent.clickPercent() ½øÐнçÃæ²Ù×÷");
- // ========== 18. ͨ¹ý resourceId ²éÕÒ½Úµã ==========
- print.log("\n--- 18. ͨ¹ý resourceId ²éÕÒ½Úµã ---");
- print.log("˵Ã÷£º´Ó XML ÖÐͨ¹ý resource-id ÊôÐÔ²éÕÒ½Úµã×ø±ê");
- function ͨ¹ýID²éÕÒ½Úµã(xml, resourceId) {
- var Ë÷Òý = xml.indexOf('resource-id="' + resourceId + '"');
- if (Ë÷Òý === -1) {
- return null;
- }
- var ºóÃæ = xml.substring(Ë÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (!m) {
- return null;
- }
- var left = parseInt(m[1]);
- var top = parseInt(m[2]);
- var right = parseInt(m[3]);
- var bottom = parseInt(m[4]);
- return {
- left: left,
- top: top,
- right: right,
- bottom: bottom,
- centerX: (left + right) / 2,
- centerY: (top + bottom) / 2,
- width: right - left,
- height: bottom - top
- };
- }
- var xmlForId = »ñÈ¡UI();
- function »ñÈ¡µ±Ç°°üÃû(xml) {
- var m = xml.match(/package="([^"]+)"/);
- return m ? m[1] : "";
- }
- var µ±Ç°°üÃû = »ñÈ¡µ±Ç°°üÃû(xmlForId);
- print.log("µ±Ç°Ç°Ì¨Ó¦ÓðüÃû£º" + µ±Ç°°üÃû);
- var ½ÚµãById = ͨ¹ýID²éÕÒ½Úµã(xmlForId, "android:id/title");
- if (½ÚµãById) {
- print.log("✓ ÕÒµ½±êÌâ½Úµã£¬ÖÐÐĵ㣺(" + ½ÚµãById.centerX + ", " + ½ÚµãById.centerY + ")");
- print.log(" ³ß´ç£º" + ½ÚµãById.width + " x " + ½ÚµãById.height);
- } else {
- var ËùÓÐIds = [];
- var idIndex = xmlForId.indexOf('resource-id="');
- while (idIndex !== -1) {
- var endIndex = xmlForId.indexOf('"', idIndex + 13);
- if (endIndex !== -1) {
- var id = xmlForId.substring(idIndex + 13, endIndex);
- if (id && !id.match(/^com\.android/) && !ËùÓÐIds[id]) {
- ËùÓÐIds.push(id);
- ËùÓÐIds[id] = true;
- }
- }
- idIndex = xmlForId.indexOf('resource-id="', idIndex + 13);
- }
- print.log("⚠ δÕÒµ½Ö¸¶¨ resourceId£¬µ±Ç°½çÃæ¿ÉÓà resource-id ÁÐ±í£¨Ç°10¸ö£©£º");
- for (var i = 0; i < Math.min(10, ËùÓÐIds.length); i++) {
- print.log(" - " + ËùÓÐIds[i]);
- }
- }
- // ========== 19. ͨ¹ý className ²éÕÒËùÓнڵã ==========
- print.log("\n--- 19. ͨ¹ý className ²éÕÒËùÓнڵã ---");
- print.log("˵Ã÷£º²éÕÒ½çÃæÉÏËùÓÐÖ¸¶¨ className µÄ½Úµã£¨ÈçËùÓа´Å¥/ÊäÈë¿ò£©");
- function ͨ¹ýClass²éÕÒËùÓнڵã(xml, className) {
- var ½á¹û = [];
- var ²éÕÒÖµ = 'class="' + className + '"';
- var λÖà = 0;
- while (true) {
- var Ë÷Òý = xml.indexOf(²éÕÒÖµ, λÖÃ);
- if (Ë÷Òý === -1) break;
- var ºóÃæ = xml.substring(Ë÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (m) {
- var left = parseInt(m[1]);
- var top = parseInt(m[2]);
- var right = parseInt(m[3]);
- var bottom = parseInt(m[4]);
- ½á¹û.push({
- left: left,
- top: top,
- right: right,
- bottom: bottom,
- centerX: (left + right) / 2,
- centerY: (top + bottom) / 2,
- width: right - left,
- height: bottom - top
- });
- }
- λÖà = Ë÷Òý + ²éÕÒÖµ.length;
- }
- return ½á¹û;
- }
- var xmlForClass = »ñÈ¡UI();
- // ²éÕÒËùÓÐ EditText ÊäÈë¿ò
- var ÊäÈë¿òÁбí = ͨ¹ýClass²éÕÒËùÓнڵã(xmlForClass, "android.widget.EditText");
- print.log("ÕÒµ½ EditText ÊäÈë¿òÊýÁ¿£º" + ÊäÈë¿òÁбí.length);
- for (var i = 0; i < ÊäÈë¿òÁбí.length; i++) {
- var ¿ò = ÊäÈë¿òÁбí[i];
- print.log(" ÊäÈë¿ò[" + i + "] ÖÐÐÄ(" + ¿ò.centerX + ", " + ¿ò.centerY + ") ³ß´ç " + ¿ò.width + "x" + ¿ò.height);
- }
- // ²éÕÒËùÓÐ Button °´Å¥
- var °´Å¥Áбí = ͨ¹ýClass²éÕÒËùÓнڵã(xmlForClass, "android.widget.Button");
- print.log("ÕÒµ½ Button °´Å¥ÊýÁ¿£º" + °´Å¥Áбí.length);
- // ========== 20. ͨ¹ý content-desc ²éÕÒ½Úµã ==========
- print.log("\n--- 20. ͨ¹ý content-desc ²éÕÒ½Úµã ---");
- print.log("˵Ã÷£ºÍ¨¹ýÎÞÕϰÃèÊö²éÕҽڵ㣨ÊʺÏͼ±ê°´Å¥£¬Èç·µ»Ø/¼ÓºÅ£©");
- function ͨ¹ýContentDesc²éÕÒ½Úµã(xml, desc) {
- var Ë÷Òý = xml.indexOf('content-desc="' + desc + '"');
- if (Ë÷Òý === -1) {
- return null;
- }
- var ºóÃæ = xml.substring(Ë÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (!m) {
- return null;
- }
- var left = parseInt(m[1]);
- var top = parseInt(m[2]);
- var right = parseInt(m[3]);
- var bottom = parseInt(m[4]);
- return {
- left: left,
- top: top,
- right: right,
- bottom: bottom,
- centerX: (left + right) / 2,
- centerY: (top + bottom) / 2
- };
- }
- var xmlForDesc = »ñÈ¡UI();
- var ·µ»Ø½Úµã = ͨ¹ýContentDesc²éÕÒ½Úµã(xmlForDesc, "·µ»Ø");
- if (·µ»Ø½Úµã) {
- print.log("✓ ÕÒµ½¡¾·µ»Ø¡¿°´Å¥£¬ÖÐÐĵ㣺(" + ·µ»Ø½Úµã.centerX + ", " + ·µ»Ø½Úµã.centerY + ")");
- } else {
- print.log("⚠ µ±Ç°Ò³ÃæÎ´ÕÒµ½ content-desc=·µ»Ø µÄ½Úµã");
- }
- // ³£¼ûµÄ content-desc Öµ£º·µ»Ø¡¢·¢²¼¡¢¼ÓºÅ¡¢+¡¢ËÑË÷¡¢²Ëµ¥¡¢¸ü¶à
- // ========== 21. ͨ¹ý hint ²éÕÒÊäÈë¿ò ==========
- print.log("\n--- 21. ͨ¹ý hint ²éÕÒÊäÈë¿ò ---");
- print.log("˵Ã÷£ºÊäÈë¿òδÊäÈëÄÚÈÝʱͨ³£ÏÔʾ hint ÌáʾÎÄ×Ö£¨Èç±êÌâ/ÕýÎÄ£©");
- function ͨ¹ýHint²éÕÒÊäÈë¿ò(xml, hint) {
- var Ë÷Òý = xml.indexOf('hint="' + hint + '"');
- if (Ë÷Òý === -1) {
- // ³¢ÊÔ±äÌå
- var ±äÌå = [hint, "ÇëÊäÈë" + hint, "ÊäÈë" + hint, "д" + hint];
- for (var i = 0; i < ±äÌå.length; i++) {
- Ë÷Òý = xml.indexOf('hint="' + ±äÌå[i] + '"');
- if (Ë÷Òý !== -1) {
- hint = ±äÌå[i];
- break;
- }
- }
- }
- if (Ë÷Òý === -1) {
- return null;
- }
- var ºóÃæ = xml.substring(Ë÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (!m) {
- return null;
- }
- return {
- centerX: (parseInt(m[1]) + parseInt(m[3])) / 2,
- centerY: (parseInt(m[2]) + parseInt(m[4])) / 2,
- hint: hint
- };
- }
- var xmlForHint = »ñÈ¡UI();
- var ±êÌâ¿ò = ͨ¹ýHint²éÕÒÊäÈë¿ò(xmlForHint, "±êÌâ");
- if (±êÌâ¿ò) {
- print.log("✓ ÕÒµ½±êÌâÊäÈë¿ò£¨hint=" + ±êÌâ¿ò.hint + "£©ÖÐÐĵ㣺(" + ±êÌâ¿ò.centerX + ", " + ±êÌâ¿ò.centerY + ")");
- } else {
- print.log("⚠ δÕÒµ½±êÌâÊäÈë¿ò");
- }
- // ========== 22. µÈ´ý½Úµã³öÏÖ ==========
- print.log("\n--- 22. µÈ´ý½Úµã³öÏÖ ---");
- print.log("˵Ã÷£ºÑ»·¼ì²â XML£¬Ö±µ½³öÏÖÄ¿±êÎÄ×Ö»ò³¬Ê±£¨ÊʺÏÒ³Ãæ¼ÓÔØµÈ´ý£©");
- function µÈ´ýÎÄ×Ö³öÏÖ(Ä¿±êÎÄ×Ö, ³¬Ê±Ãë) {
- var ¿ªÊ¼Ê±¼ä = Date.now();
- var ³¬Ê±ºÁÃë = ³¬Ê±Ãë * 1000;
- while (Date.now() - ¿ªÊ¼Ê±¼ä < ³¬Ê±ºÁÃë) {
- try {
- var xml = »ñÈ¡UI();
- if (xml.indexOf(Ä¿±êÎÄ×Ö) !== -1) {
- var Òѵȴý = Math.floor((Date.now() - ¿ªÊ¼Ê±¼ä) / 1000);
- print.log("✓ ÔÚ " + Òѵȴý + " Ãëºó¼ì²âµ½¡¾" + Ä¿±êÎÄ×Ö + "¡¿");
- return true;
- }
- } catch (e) {
- print.log("⚠ »ñÈ¡ XML ³ö´í£º" + e.message);
- }
- sleep.second(Ãë = 1);
- }
- print.log("✗ µÈ´ý " + ³¬Ê±Ãë + " Ãëºóδ³öÏÖ¡¾" + Ä¿±êÎÄ×Ö + "¡¿");
- return false;
- }
- // ʾÀý£ºµÈ´ý"ÏÂÒ»²½"°´Å¥³öÏÖ£¨×î¶à 10 Ã룩
- // var ÕÒµ½ = µÈ´ýÎÄ×Ö³öÏÖ("ÏÂÒ»²½", 10);
- // if (ÕÒµ½) {
- // agent.click(½Úµã.centerX, ½Úµã.centerY);
- // }
- print.log("💡 Ìáʾ£ºÑ»·µÈ´ý + ½Úµã²éÕÒ + µã»÷ = Îȶ¨µÄ×Ô¶¯»¯Á÷³Ì");
- // ========== 23. ʵÓà Shell ÃüÁî´óÈ« ==========
- print.log("\n--- 23. ʵÓà Shell ÃüÁî´óÈ« ---");
- print.log("˵Ã÷£ºÍ¨¹ý agent.shell() Ö´Ðи÷ÖÖϵͳÃüÁî");
- // 1. »ñÈ¡µ±Ç°½çÃæ XML£¨×î³£Óã©
- var uiXml = Ö´ÐÐShell("uiautomator dump --compressed /proc/self/fd/1 2>/dev/null");
- print.log("✓ 1. »ñÈ¡ UI XML£¬³¤¶È£º" + uiXml.length);
- // 2. Ä£Äâ°´¼üʼþ£¨input keyevent£©
- agent.shell("input keyevent 4"); // KEYCODE_BACK ·µ»Ø¼ü
- agent.shell("input keyevent 3"); // KEYCODE_HOME Home¼ü
- agent.shell("input keyevent 24"); // KEYCODE_VOLUME_UP ÒôÁ¿¼Ó
- agent.shell("input keyevent 25"); // KEYCODE_VOLUME_DOWN ÒôÁ¿¼õ
- agent.shell("input keyevent 26"); // KEYCODE_POWER µçÔ´¼ü
- agent.shell("input keyevent 279"); // KEYCODE_PASTE Õ³Ìù
- print.log("✓ 2. Ä£Äâ°´¼üʼþÍê³É");
- // 3. Æô¶¯Ó¦Óã¨am start£©
- // agent.shell("am start -n com.xingin.xhs/.activity.SplashActivity");
- // agent.shell("monkey -p com.xingin.xhs 1"); // ͨ¹ý monkey Æô¶¯
- print.log("✓ 3. am start / monkey Æô¶¯Ó¦ÓÃ");
- // 4. Ç¿ÖÆÍ£Ö¹Ó¦ÓÃ
- // agent.shell("am force-stop com.xingin.xhs");
- print.log("✓ 4. am force-stop Ç¿ÖÆÍ£Ö¹Ó¦ÓÃ");
- // 5. ÉèÖüôÌù°å£¨service call clipboard£©
- agent.shell("service call clipboard 3 i32 1 s16 '¼ôÌù°åÄÚÈÝ' i32 0");
- print.log("✓ 5. service call clipboard ÉèÖüôÌù°å");
- // 6. ³¤°´»¬¶¯£¨input swipe£¬¿ÉÄ£Äⳤ°´£©
- // agent.shell("input swipe 540 1800 541 1801 2000");
- print.log("✓ 6. input swipe Ä£Äⳤ°´");
- // 7. ÊäÈëÎÄ×Ö£¨input text£¬½öÖ§³Ö ASCII£©
- agent.shell("input text 'Hello'");
- print.log("✓ 7. input text ÊäÈë ASCII ÎÄ×Ö");
- // 8. »ñȡϵͳÊôÐÔ
- var ÊôÐÔÖµ = Ö´ÐÐShell("getprop ro.product.model");
- print.log("✓ 8. É豸Ðͺţº" + ÊôÐÔÖµ);
- // ========== 24. ½ØÍ¼±£´æµ½Îļþ ==========
- print.log("\n--- 24. ½ØÍ¼±£´æµ½Îļþ ---");
- print.log("˵Ã÷£ºÊ¹Óà screencap ÃüÁî½ØÍ¼£¬agent.screenShot() ÔÚ²¿·ÖÉ豸Éϲ»´æÔÚ");
- var ½ØÍ¼Â·¾¶ = "/sdcard/screenshot_" + Date.now() + ".png";
- agent.shell("screencap -p " + ½ØÍ¼Â·¾¶);
- print.log("✓ ½ØÍ¼Òѱ£´æµ½£º" + ½ØÍ¼Â·¾¶);
- var Îļþ¼ì²é = Ö´ÐÐShell("ls -l " + ½ØÍ¼Â·¾¶);
- if (Îļþ¼ì²é) {
- var ´óСÐÅÏ¢ = Îļþ¼ì²é;
- print.log("✓ ½ØÍ¼ÎļþÐÅÏ¢£º" + ´óСÐÅÏ¢);
- }
- print.log("💡 ÅäºÏ file API ³Ö¾Ã»¯½ØÍ¼£¬±ãÓÚºóÐø OCR ÕÒ×Ö»òÉÏ´«");
- // ========== 25. ×ÛºÏʵս£ºÖÇÄܲéÕÒ²¢µã»÷Á÷³Ì ==========
- print.log("\n--- 25. ×ÛºÏʵս£ºÖÇÄܲéÕÒ²¢µã»÷Á÷³Ì ---");
- print.log("˵Ã÷£ºÑ»·²éÕҽڵ㠡ú ¼ÆËã ¡ú µã»÷ ¡ú ÑéÖ¤ ¡ú ÖØÊÔ");
- function ÖÇÄܲéÕÒ²¢µã»÷(Ä¿±êÎÄ×Ö, ³¬Ê±Ãë) {
- var ¿ªÊ¼Ê±¼ä = Date.now();
- var ³¬Ê±ºÁÃë = ³¬Ê±Ãë * 1000;
- var ³¢ÊÔ´ÎÊý = 0;
- while (Date.now() - ¿ªÊ¼Ê±¼ä < ³¬Ê±ºÁÃë) {
- ³¢ÊÔ´ÎÊý++;
- try {
- var xml = »ñÈ¡UI();
- // ¼ì²éÄ¿±êÎÄ×ÖÊÇ·ñ´æÔÚ
- if (xml.indexOf(Ä¿±êÎÄ×Ö) === -1) {
- sleep.second(Ãë = 1);
- continue;
- }
- // ͨ¹ý bounds ÕýÔòÌáÈ¡×ø±ê
- var ÎÄ×ÖË÷Òý = xml.indexOf(Ä¿±êÎÄ×Ö);
- var ºóÃæ = xml.substring(ÎÄ×ÖË÷Òý);
- var m = ºóÃæ.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (m) {
- var left = parseInt(m[1]);
- var top = parseInt(m[2]);
- var right = parseInt(m[3]);
- var bottom = parseInt(m[4]);
- var cx = (left + right) / 2;
- var cy = (top + bottom) / 2;
- agent.click(cx, cy);
- print.log("✓ µÚ " + ³¢ÊÔ´ÎÊý + " ´Î³¢ÊÔ£ºÒѵã»÷¡¾" + Ä¿±êÎÄ×Ö + "¡¿(" + cx + ", " + cy + ")");
- // µã»÷ºóµÈ´ý²¢ÑéÖ¤
- sleep.second(Ãë = 1);
- var xml2 = »ñÈ¡UI();
- if (xml2.indexOf(Ä¿±êÎÄ×Ö) === -1) {
- print.log("✓ ÑéÖ¤³É¹¦£ºÄ¿±êÒÑÏûʧ");
- return true;
- } else {
- print.log("⚠ Ä¿±êÈÔ´æÔÚ£¬¿ÉÄܵã»÷δÉúЧ£¬ÖØÊÔ...");
- }
- }
- } catch (e) {
- print.log("⚠ µÚ " + ³¢ÊÔ´ÎÊý + " ´Î³¢ÊÔ³ö´í£º" + e.message);
- }
- sleep.second(Ãë = 1);
- }
- print.log("✗ ³¬Ê± " + ³¬Ê±Ãë + " Ã룬¹²³¢ÊÔ " + ³¢ÊÔ´ÎÊý + " ´Îδ³É¹¦");
- return false;
- }
- // ʾÀýµ÷Óã¨×¢ÊͱÜÃâʵ¼ÊÖ´ÐУ©
- // ÖÇÄܲéÕÒ²¢µã»÷("ͬÒâ", 10);
- // ÖÇÄܲéÕÒ²¢µã»÷("ÏÂÒ»²½", 15);
- // ÖÇÄܲéÕÒ²¢µã»÷("·¢²¼", 10);
- print.log("💡 ´Ëº¯Êý·â×°ÁËÍêÕûµÄ²éÕÒ¡úµã»÷¡úÑéÖ¤¡úÖØÊÔÁ÷³Ì£¬¿ÉÖ±½Ó¸´ÓÃ");
- // ========== 26. ´íÎó´¦ÀíÓëÖØÊÔ»úÖÆ ==========
- print.log("\n--- 26. ´íÎó´¦ÀíÓëÖØÊÔ»úÖÆ ---");
- print.log("˵Ã÷£ºÊ¹Óà try-catch °ü¹ü¹Ø¼ü²Ù×÷£¬Ê§°Üʱ×Ô¶¯ÖØÊÔ");
- function ´øÖØÊԵIJÙ×÷(²Ù×÷º¯Êý, ²Ù×÷Ãû, ×î´óÖØÊÔ) {
- ×î´óÖØÊÔ = ×î´óÖØÊÔ || 3;
- for (var i = 1; i <= ×î´óÖØÊÔ; i++) {
- try {
- print.log("µÚ " + i + "/" + ×î´óÖØÊÔ + " ´Î³¢ÊÔ " + ²Ù×÷Ãû);
- var ½á¹û = ²Ù×÷º¯Êý();
- if (½á¹û) {
- print.log("✓ " + ²Ù×÷Ãû + " ³É¹¦");
- return true;
- }
- } catch (e) {
- print.log("⚠ µÚ " + i + " ´Î³ö´í£º" + e.message);
- }
- if (i < ×î´óÖØÊÔ) {
- sleep.second(Ãë = 1);
- }
- }
- print.log("✗ " + ²Ù×÷Ãû + " ʧ°Ü£¬ÒÑÖØÊÔ " + ×î´óÖØÊÔ + " ´Î");
- return false;
- }
- // ʾÀý£º´øÖØÊԵĵã»÷²Ù×÷
- // ´øÖØÊԵIJÙ×÷(function() {
- // var xml = »ñÈ¡UI();
- // if (xml.indexOf("ÏÂÒ»²½") === -1) return false;
- // // ... ²éÕÒ²¢µã»÷
- // return true;
- // }, "µã»÷ÏÂÒ»²½", 3);
- print.log("💡 try-catch + ÖØÊÔ»úÖÆ¿É´ó·ùÌáÉý½Å±¾Îȶ¨ÐÔ");
- // ========== 27. Ó¦ÓùÜÀíÓëÇл» ==========
- print.log("\n--- 27. Ó¦ÓùÜÀíÓëÇл» ---");
- print.log("˵Ã÷£ºÆô¶¯¡¢Çл»¡¢¹Ø±ÕÓ¦Óõij£Ó÷½·¨");
- // Æô¶¯Ó¦ÓÃ
- // app.openApp("com.xingin.xhs");
- // sleep.second(Ãë = 5);
- // ͨ¹ý shell Æô¶¯Ö¸¶¨ Activity£¨¸ü¾«È·£©
- // agent.shell("am start -n com.xingin.xhs/.activity.SplashActivity");
- // ͨ¹ý°üÃûÆô¶¯£¨monkey ·½Ê½£¬¸üͨÓã©
- // agent.shell("monkey -p com.xingin.xhs 1");
- // Ç¿ÖÆÍ£Ö¹Ó¦ÓÃ
- // agent.shell("am force-stop com.xingin.xhs");
- // Çл»µ½×î½üÈÎÎñ
- // agent.recents();
- // sleep.second(Ãë = 1);
- // agent.clickPercent(0.5, 0.5); // µã»÷µÚÒ»¸öÈÎÎñ
- // ²é¿´µ±Ç°Ç°Ì¨Ó¦ÓÃ
- var µ±Ç°Ó¦Óà = Ö´ÐÐShell("dumpsys window | grep mCurrentFocus");
- var µ±Ç°Ó¦Óó¤¶È = typeof µ±Ç°Ó¦ÓÃ.length === "function" ? µ±Ç°Ó¦ÓÃ.length() : (µ±Ç°Ó¦ÓÃ.length || 0);
- var µ±Ç°Ó¦ÓÃÏÔʾ = µ±Ç°Ó¦ÓÃ.substring(0, Math.min(µ±Ç°Ó¦Óó¤¶È, 100));
- print.log("µ±Ç°Ç°Ì¨Ó¦ÓÃÐÅÏ¢£º" + µ±Ç°Ó¦ÓÃÏÔʾ);
- print.log("💡 Ó¦ÓùÜÀíÁ÷³Ì£ºÆô¶¯ ¡ú ²Ù×÷ ¡ú ÑéÖ¤ ¡ú ¹Ø±Õ");
- // ========== 28. µçÔ´¼ü²Ù×÷£¨×îºóÖ´ÐУ©==========
- print.log("\n--- 28. µçÔ´¼ü²Ù×÷ ---");
- print.log("˵Ã÷£ºÒƵ½×îºóÖ´ÐУ¬±ÜÃâÌáǰ¹ØÆÁÓ°ÏìºóÐø²Ù×÷");
- agent.power(); // ¿ª»ú¼ü
- print.log("✓ °´Ï¿ª»ú¼ü£¨¹ØÆÁ£©");
- print.log("\n===== ʾÀý½áÊø =====");
¸´ÖÆ´úÂë
|
|