{"id":101,"date":"2026-08-03T16:59:11","date_gmt":"2026-08-03T08:59:11","guid":{"rendered":"https:\/\/www.deartester.com\/index.php\/2026\/08\/03\/cursor-selenium-appium%ef%bc%9aai%e6%97%b6%e4%bb%a3%e7%9a%84%e8%87%aa%e5%8a%a8%e5%8c%96%e6%b5%8b%e8%af%95%e6%96%b0%e5%a7%bf%e5%8a%bf\/"},"modified":"2026-09-03T23:17:24","modified_gmt":"2026-09-03T15:17:24","slug":"cursor-selenium-appium%ef%bc%9aai%e6%97%b6%e4%bb%a3%e7%9a%84%e8%87%aa%e5%8a%a8%e5%8c%96%e6%b5%8b%e8%af%95%e6%96%b0%e5%a7%bf%e5%8a%bf","status":"publish","type":"post","link":"https:\/\/www.deartester.com\/index.php\/2026\/08\/03\/cursor-selenium-appium%ef%bc%9aai%e6%97%b6%e4%bb%a3%e7%9a%84%e8%87%aa%e5%8a%a8%e5%8c%96%e6%b5%8b%e8%af%95%e6%96%b0%e5%a7%bf%e5%8a%bf\/","title":{"rendered":"Cursor + Selenium\/Appium\uff1aAI\u65f6\u4ee3\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u65b0\u59ff\u52bf"},"content":{"rendered":"<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\">\u4f60\u6709\u6ca1\u6709\u7b97\u8fc7\uff1a\u5199\u4e00\u4e2a\u5b8c\u6574\u7684Selenium\u767b\u5f55\u6d4b\u8bd5\u811a\u672c\uff0c\u4ece\u5b9a\u4f4d\u5143\u7d20\u5230\u52a0\u65ad\u8a00\uff0c\u8981\u82b1\u591a\u957f\u65f6\u95f4\uff1f30\u5206\u949f\uff1f1\u5c0f\u65f6\uff1f<\/span><\/p>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u518d\u7b97\u7b97Appium\u2014\u2014\u5149\u914ddesired_caps\u3001\u5904\u7406\u6df7\u5408App\u7684context\u5207\u6362\u3001\u8c03\u8bd5XPath\u5b9a\u4f4d\uff0c\u534a\u5929\u5c31\u8fc7\u53bb\u4e86\u3002<\/span><\/p>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u5982\u679c\u6709\u4e2a\u5de5\u5177\uff0c\u4f60\u7528\u4e00\u53e5\u8bdd\u63cf\u8ff0\u6d4b\u8bd5\u610f\u56fe\uff0c\u5b83\u5c31\u80fd\u751f\u6210\u53ef\u8fd0\u884c\u7684POM\u6846\u67b6\u4ee3\u7801\u2014\u2014\u4f60\u4f1a\u4e0d\u4f1a\u5fc3\u52a8\uff1f<\/span><\/p>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u8fd9\u7bc7\u6587\u7ae0\u5e26\u4f60\u7528<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">Cursor + Selenium\/Appium<\/span><\/strong><span leaf=\"\">\u642d\u5efa\u4e00\u5957AI\u9a71\u52a8\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u5de5\u4f5c\u6d41\u3002\u4e0d\u662f\u6982\u5ff5\u704c\u6c34\uff0c\u662f\u53ef\u590d\u5236\u7684\u5b9e\u64cd\u6d41\u7a0b\uff0c\u6bcf\u6bb5\u4ee3\u7801\u90fd\u80fd\u8dd1\u3002<\/span><\/p>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u4e00\u3001\u4e3a\u4ec0\u4e48\u662f Cursor\uff1fAI \u65f6\u4ee3\u6d4b\u8bd5\u5de5\u7a0b\u5e08\u7684\u65b0\u751f\u4ea7\u529b\u5de5\u5177<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">1.1 Cursor\u662f\u4ec0\u4e48<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor\u662f\u4e00\u6b3e\u57fa\u4e8eVS Code\u6df1\u5ea6\u5b9a\u5236\u7684AI\u539f\u751fIDE\uff0c\u5185\u7f6eClaude 3.5 Sonnet\u548cGPT-4o\u7b49\u6a21\u578b\u3002\u5b83\u4e0d\u662f\u5728\u7f16\u8f91\u5668\u91cc\u52a0\u4e86\u4e2a\u804a\u5929\u7a97\u53e3\uff0c\u800c\u662f\u4ece\u5e95\u5c42\u91cd\u65b0\u8bbe\u8ba1\u4e86<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">AI\u4e0e\u4ee3\u7801\u7684\u4ea4\u4e92\u65b9\u5f0f<\/span><\/strong><\/p>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u5bf9\u6d4b\u8bd5\u5de5\u7a0b\u5e08\u6765\u8bf4\uff0c\u8fd9\u610f\u5473\u7740\u4ec0\u4e48\uff1f\u4f60\u4e0d\u9700\u8981\u4ece\u96f6\u624b\u5199\u6bcf\u4e00\u884c\u5b9a\u4f4d\u4ee3\u7801\u3001\u6bcf\u4e00\u4e2a\u7b49\u5f85\u903b\u8f91\u3001\u6bcf\u4e00\u6761\u65ad\u8a00\u2014\u2014\u4f60\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u6d4b\u8bd5\u610f\u56fe\uff0cCursor\u5e2e\u4f60\u751f\u6210\u53ef\u8fd0\u884c\u7684\u4ee3\u7801<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">1.2 \u4e09\u5927\u6838\u5fc3\u80fd\u529b<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 617px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u80fd\u529b<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u505a\u4ec0\u4e48<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u6d4b\u8bd5\u573a\u666f<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">Tab \u8865\u5168<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5b9e\u65f6\u9884\u6d4b\u4e0b\u4e00\u884c\u4ee3\u7801\uff0c\u5ef6\u8fdf&lt;200ms<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5199\u5b9a\u4f4d\u8bed\u53e5\u65f6\u81ea\u52a8\u8865\u5168By\u7b56\u7565\u3001Assert\u65ad\u8a00<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">Composer<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u7406\u89e3\u591a\u6587\u4ef6\u4e0a\u4e0b\u6587\uff0c\u8de8\u6587\u4ef6\u751f\u6210\u4ee3\u7801<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u4e00\u53e5\u8bdd\u751f\u6210BasePage+PageObject+TestCases\u4e09\u5c42\u7ed3\u6784<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">Agent \u6a21\u5f0f<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u81ea\u4e3b\u6267\u884c\u591a\u6b65\u9aa4\u4efb\u52a1\uff0c\u6309\u9700\u8c03\u7528\u5de5\u5177<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5206\u6790\u5931\u8d25\u7528\u4f8b\u2192\u5b9a\u4f4d\u5143\u7d20\u5931\u6548\u2192\u4fee\u590d\u811a\u672c\u2192\u91cd\u8dd1\u9a8c\u8bc1<\/span><\/section>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">1.3 \u4e0eCopilot\/Claude\u7684\u533a\u522b<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 617px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u7ef4\u5ea6<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">Cursor<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">GitHub Copilot<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">Claude Web<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u4ee3\u7801\u8865\u5168<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">Tab\u8865\u5168+\u884c\u5185<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">Tab\u8865\u5168+\u884c\u5185<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u4e0d\u652f\u6301<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u591a\u6587\u4ef6\u751f\u6210<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">Composer\u8de8\u6587\u4ef6<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u4e0d\u652f\u6301<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u4e0d\u652f\u6301<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u9879\u76ee\u7ea7\u7406\u89e3<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u7d22\u5f15\u6574\u4e2a\u9879\u76ee<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5f53\u524d\u6587\u4ef6+\u5c11\u91cf\u4e0a\u4e0b\u6587<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u4ec5\u5bf9\u8bdd\u4e0a\u4e0b\u6587<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">Agent\u81ea\u4e3b\u6267\u884c<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u652f\u6301<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u6709\u9650\u652f\u6301<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u4e0d\u652f\u6301<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">Rules\u7ea6\u675f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">.cursorrules\u9879\u76ee\u7ea7<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">.github\/copilot<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u65e0<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u5b9a\u4ef7<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">$20\/\u6708Pro\u7248<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">$10\/\u6708<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">$20\/\u6708<\/span><\/section>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.85;\"><span leaf=\"\">\ud83d\udca1 \u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aCopilot\u662f&#8221;\u4f60\u5199\u4ee3\u7801\u5b83\u8865\u5168&#8221;\uff0cCursor\u662f&#8221;\u4f60\u8bf4\u610f\u56fe\u5b83\u751f\u6210&#8221;\u3002\u5bf9\u4e8e\u6d4b\u8bd5\u811a\u672c\u7684\u6279\u91cf\u751f\u6210\uff0cCursor\u7684Composer\u6a21\u5f0f\u662f\u5f53\u524d\u6548\u7387\u5929\u82b1\u677f<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">1.4 \u5b83\u4e0d\u66ff\u4ee3\u4ec0\u4e48<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u8bf4\u6e05\u695a\u8fb9\u754cCursor\u4e0d\u66ff\u4ee3\uff1a<\/span><\/p>\n<ul style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u6d4b\u8bd5\u7528\u4f8b\u8bbe\u8ba1<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u2014\u2014\u7b49\u4ef7\u7c7b\u3001\u8fb9\u754c\u503c\u3001\u6b63\u4ea4\u6cd5\uff0c\u8fd9\u662f\u4f60\u7684\u5927\u8111\u5de5\u4f5c\uff0cAI\u4e0d\u77e5\u9053\u4e1a\u52a1\u98ce\u9669<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u5143\u7d20\u5b9a\u4f4d\u7b56\u7565\u51b3\u7b56<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u2014\u2014\u7528id\u8fd8\u662fxpath\uff1fAI\u7ed9\u4f60\u5efa\u8bae\uff0c\u4f46\u7a33\u5b9a\u6027\u5224\u65ad\u9760\u4f60<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u4e1a\u52a1\u903b\u8f91\u65ad\u8a00<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u2014\u2014AI\u80fd\u5199assert\uff0c\u4f46\u65ad\u4ec0\u4e48\u3001\u65ad\u591a\u6df1\uff0c\u53d6\u51b3\u4e8e\u4f60\u5bf9\u9700\u6c42\u7684\u7406\u89e3<\/span><\/section>\n<\/li>\n<\/ul>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor\u662f<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u653e\u5927\u5668<\/span><\/strong><span leaf=\"\">\uff0c\u653e\u5927\u4f60\u7684\u6d4b\u8bd5\u8bbe\u8ba1\u80fd\u529b\uff0c\u4e0d\u662f\u66ff\u4ee3\u4f60\u7684\u601d\u8003<\/span><\/p>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u4e8c\u3001\u73af\u5883\u51c6\u5907\uff1a5\u5206\u949f\u642d\u597d\u5de5\u4f5c\u6d41<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">2.1 Cursor\u5b89\u88c5\u4e0e\u914d\u7f6e<\/span><\/span><\/h3>\n<ol style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u8bbf\u95ee cursor.com \u4e0b\u8f7d\u5b89\u88c5\uff08\u652f\u6301Windows\/macOS\/Linux\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u6253\u5f00Cursor \u2192 Settings \u2192 Models \u2192 \u9009\u62e9Claude 3.5 Sonnet\uff08\u4ee3\u7801\u751f\u6210\u8d28\u91cf\u597d\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Settings \u2192 General \u2192 \u5f00\u542f&#8221;Auto Save&#8221;\uff08Composer\u751f\u6210\u4ee3\u7801\u540e\u81ea\u52a8\u4fdd\u5b58\uff09<\/span><\/section>\n<\/li>\n<\/ol>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">2.2 Selenium\u73af\u5883\uff08Python\uff09<\/span><\/span><\/h3>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"bash\"><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u521b\u5efa\u865a\u62df\u73af\u5883<\/span><\/span><\/code><code><span leaf=\"\">python -m venv venv<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__built_in\">source<\/span>&nbsp;venv\/bin\/activate &nbsp;<span class=\"code-snippet__comment\"># Windows: venv\\Scripts\\activate<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u5b89\u88c5\u4f9d\u8d56<\/span><\/span><\/code><code><span leaf=\"\">pip install selenium pytest webdriver-manager pytest-html<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u9a8c\u8bc1<\/span><\/span><\/code><code><span leaf=\"\">python -c&nbsp;<span class=\"code-snippet__string\">\"from selenium import webdriver; print('Selenium OK')\"<\/span><\/span><\/code><code><span leaf=\"\">pytest --version<\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">2.3 Appium\u73af\u5883<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Appium\u73af\u5883\u6bd4Selenium\u590d\u6742\uff0c\u5206Android\u548ciOS\u4e24\u90e8\u5206\uff1a<\/span><\/p>\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);\">Android\u5fc5\u9700<\/span><\/span><\/h4>\n<ul style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">JDK 8+\uff08<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">java -version<\/span><\/code><span leaf=\"\">\u9a8c\u8bc1\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Android SDK\uff08\u542badb\uff0c<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">adb devices<\/span><\/code><span leaf=\"\">\u9a8c\u8bc1\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Appium Server 2.0+\uff08<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">appium -v<\/span><\/code><span leaf=\"\">\u9a8c\u8bc1\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Appium Driver\uff1a<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">appium driver install uiautomator2<\/span><\/code><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u6a21\u62df\u5668\u6216\u771f\u673a\uff08Android Studio\u81ea\u5e26\u6a21\u62df\u5668\u5373\u53ef\uff09<\/span><\/section>\n<\/li>\n<\/ul>\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);\">iOS\u5fc5\u9700\uff08macOS\uff09<\/span><\/span><\/h4>\n<ul style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Xcode 15+\uff08App Store\u5b89\u88c5\uff0c\u542bxcodebuild\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Appium Driver\uff1a<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">appium driver install xcuitest<\/span><\/code><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">ios-deploy\uff08<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">npm install -g ios-deploy<\/span><\/code><span leaf=\"\">\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">libimobiledevice\uff08<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">brew install libimobiledevice<\/span><\/code><span leaf=\"\">\uff09<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u6a21\u62df\u5668\uff1a<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">xcrun simctl list devices available<\/span><\/code><span leaf=\"\">\u67e5\u770b\u53ef\u7528\u8bbe\u5907<\/span><\/section>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"nginx\"><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u5b89\u88c5Appium Python\u5ba2\u6237\u7aef<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__attribute\">pip<\/span>&nbsp;install Appium-Python-Client<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u9a8c\u8bc1Android\u73af\u5883<\/span><\/span><\/code><code><span leaf=\"\">adb devices<\/span><\/code><code><span leaf=\"\">appium -v<\/span><\/code><code><span leaf=\"\">appium driver list<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__comment\"># \u9a8c\u8bc1iOS\u73af\u5883\uff08\u4ec5macOS\uff09<\/span><\/span><\/code><code><span leaf=\"\">xcodebuild -version<\/span><\/code><code><span leaf=\"\">xcrun simctl list devices available | grep iPhone<\/span><\/code><\/pre>\n<\/section>\n<\/li>\n<ul class=\"list-paddingleft-1\">\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<li>\n<section><span leaf=\"\"><br  \/><\/span><\/section>\n<\/li>\n<\/ul>\n<\/ul>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u4e09\u3001Cursor + Selenium\uff1aWeb\u81ea\u52a8\u5316\u811a\u672c\u751f\u6210\u5b9e\u6218<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.1 \u573a\u666f\uff1a\u7535\u5546\u7f51\u7ad9\u767b\u5f55+\u641c\u7d22+\u52a0\u8d2d\u7269\u8f66<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u6211\u4eec\u7528\u4e00\u4e2a\u771f\u5b9e\u573a\u666f\u6f14\u793a\uff1a\u6d4b\u8bd5\u67d0\u7535\u5546\u7f51\u7ad9\u7684&#8221;\u7528\u6237\u767b\u5f55\u2192\u641c\u7d22\u5546\u54c1\u2192\u52a0\u5165\u8d2d\u7269\u8f66&#8221;\u6d41\u7a0b<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.2 \u4f20\u7edf\u505a\u6cd5 vs Cursor\u505a\u6cd5<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 617px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u6b65\u9aa4<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">\u4f20\u7edf\u505a\u6cd5\u8017\u65f6<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);\">Cursor\u505a\u6cd5\u8017\u65f6<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u642dPOM\u6846\u67b6\u7ed3\u6784<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">40\u5206\u949f\uff08\u624b\u52a8\u5efa\u76ee\u5f55\/\u6587\u4ef6\uff09<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">30\u79d2\uff08Composer\u4e00\u6b21\u751f\u6210\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u7f16\u5199\u767b\u5f55\u9875Page Object<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">20\u5206\u949f\uff08\u5b9a\u4f4d+\u5c01\u88c5\uff09<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">2\u5206\u949f\uff08\u63cf\u8ff0\u610f\u56fe\uff0cReview\u751f\u6210\u4ee3\u7801\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">25\u5206\u949f\uff08\u7ec4\u88c5+\u65ad\u8a00\uff09<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">3\u5206\u949f\uff08\u63cf\u8ff0\u6d41\u7a0b\uff0c\u5fae\u8c03\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u52a0\u663e\u5f0f\u7b49\u5f85\u548c\u5f02\u5e38\u5904\u7406<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">15\u5206\u949f\uff08\u5bb9\u6613\u9057\u6f0f\uff09<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">1\u5206\u949f\uff08\u5728Prompt\u4e2d\u8981\u6c42\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u5408\u8ba1<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">~100\u5206\u949f<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">~7\u5206\u949f<\/span><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.85;\"><span leaf=\"\">\ud83d\udca1 \u6548\u7387\u63d0\u5347\u7ea614\u500d\u3002\u4f46\u6ce8\u610f\uff1a\u751f\u6210\u540e\u5fc5\u987b\u4eba\u5de5Review\uff0c\u91cd\u70b9\u68c0\u67e5\u5b9a\u4f4d\u7b56\u7565\u7684\u7a33\u5b9a\u6027\u548c\u65ad\u8a00\u7684\u5b8c\u6574\u6027<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.3 \u7528Composer\u4e00\u6b65\u751f\u6210POM\u6846\u67b6<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u5728Cursor\u4e2d\u6309<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">Cmd\/Ctrl+I<\/span><\/code><span leaf=\"\">\u6253\u5f00Composer\uff0c\u8f93\u5165\u4ee5\u4e0bPrompt\uff1a<\/span><\/p>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Prompt\u793a\u4f8b<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 0px;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u5728\u5f53\u524d\u9879\u76ee\u4e0b\u751f\u6210\u4e00\u4e2aSelenium Web\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6\uff0c\u4f7f\u7528Python + pytest\uff0cPOM\u8bbe\u8ba1\u6a21\u5f0f\u3002\u9700\u6c42\uff1a<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">1.&nbsp;<\/span>BasePage\u7c7b\uff1a\u5c01\u88c5find_element\u3001click\u3001input\u3001wait_for_element\u3001take_screenshot\u516c\u5171\u65b9\u6cd5\uff0c\u7edf\u4e00\u7528WebDriverWait\u663e\u5f0f\u7b49\u5f85<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">2.<\/span>&nbsp;Pages\u76ee\u5f55\uff1aLoginPage\uff08\u767b\u5f55\u9875\uff09\u3001SearchPage\uff08\u641c\u7d22\u9875\uff09\u3001CartPage\uff08\u8d2d\u7269\u8f66\u9875\uff09<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">3.<\/span>&nbsp;Tests\u76ee\u5f55\uff1atest_login_search_cart.py\uff0c\u6d4b\u8bd5\u6d41\u7a0b\uff1a\u767b\u5f55\u2192\u641c\u7d22&#8221;\u624b\u673a&#8221;\u2192\u70b9\u51fb\u7b2c\u4e00\u4e2a\u5546\u54c1\u2192\u52a0\u5165\u8d2d\u7269\u8f66\u2192\u9a8c\u8bc1\u8d2d\u7269\u8f66\u6570\u91cf<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">4.<\/span>&nbsp;\u5b9a\u4f4d\u7b56\u7565\u4f18\u5148\u7ea7\uff1aid &gt; name &gt; css &gt; xpath<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">5.<\/span>&nbsp;\u6bcf\u4e2aPage\u7c7b\u5305\u542b__init__\u63a5\u6536driver<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">6.<\/span>&nbsp;conftest.py\u63d0\u4f9bdriver fixture\uff0c\u7528webdriver-manager\u81ea\u52a8\u7ba1\u7406ChromeDriver<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">7.<\/span>&nbsp;\u751f\u6210pytest.ini\u914d\u7f6e\u6587\u4ef6<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;\"><span leaf=\"\">Cursor\u4f1a\u81ea\u52a8\u521b\u5efa\u5b8c\u6574\u7684\u9879\u76ee\u7ed3\u6784\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"bash\"><code><span leaf=\"\">project\/<\/span><\/code><code><span leaf=\"\">\u251c\u2500\u2500 pages\/<\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 __init__.py<\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 base_page.py &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># BasePage\u516c\u5171\u65b9\u6cd5<\/span><\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 login_page.py &nbsp; &nbsp; &nbsp;<span class=\"code-snippet__comment\"># \u767b\u5f55\u9875Page Object<\/span><\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 search_page.py &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u641c\u7d22\u9875Page Object<\/span><\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u2514\u2500\u2500 cart_page.py &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u8d2d\u7269\u8f66\u9875Page Object<\/span><\/span><\/code><code><span leaf=\"\">\u251c\u2500\u2500 tests\/<\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 __init__.py<\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u251c\u2500\u2500 conftest.py &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"code-snippet__comment\"># pytest fixtures<\/span><\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u2514\u2500\u2500 test_login_search_cart.py &nbsp;<span class=\"code-snippet__comment\"># \u6d4b\u8bd5\u7528\u4f8b<\/span><\/span><\/code><code><span leaf=\"\">\u251c\u2500\u2500 utils\/<\/span><\/code><code><span leaf=\"\">\u2502 &nbsp; \u2514\u2500\u2500 __init__.py<\/span><\/code><code><span leaf=\"\">\u251c\u2500\u2500 pytest.ini<\/span><\/code><code><span leaf=\"\">\u2514\u2500\u2500 requirements.txt<\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.4 \u751f\u6210\u7684\u4ee3\u7801\u793a\u4f8b\uff1aBasePage<\/span><\/span><\/h3>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"python\"><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.support.ui&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;WebDriverWait<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.support&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;expected_conditions&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;EC<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.common.by&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;By<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;os<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">class<\/span>&nbsp;<span class=\"code-snippet__title\">BasePage<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u6240\u6709Page Object\u7684\u57fa\u7c7b\uff0c\u5c01\u88c5\u516c\u5171\u64cd\u4f5c\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">__init__<\/span>(<span class=\"code-snippet__params\">self, driver<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.driver = driver<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.wait = WebDriverWait(driver,&nbsp;<span class=\"code-snippet__number\">10<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">find_element<\/span>(<span class=\"code-snippet__params\">self, *locator<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;<span class=\"code-snippet__variable\">self<\/span>.wait.until(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EC.presence_of_element_located(locator)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">find_clickable<\/span>(<span class=\"code-snippet__params\">self, *locator<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;<span class=\"code-snippet__variable\">self<\/span>.wait.until(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EC.element_to_be_clickable(locator)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">click<\/span>(<span class=\"code-snippet__params\">self, *locator<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.find_clickable(*locator).click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">input_text<\/span>(<span class=\"code-snippet__params\">self, text, *locator<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; element =&nbsp;<span class=\"code-snippet__variable\">self<\/span>.find_element(*locator)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; element.clear()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; element.send_keys(text)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">get_text<\/span>(<span class=\"code-snippet__params\">self, *locator<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;<span class=\"code-snippet__variable\">self<\/span>.find_element(*locator).text<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">take_screenshot<\/span>(<span class=\"code-snippet__params\">self, name=<\/span><span class=\"code-snippet__params\"><span class=\"code-snippet__string\">\"screenshot\"<\/span><\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; path = os.path.join(<span class=\"code-snippet__string\">\"screenshots\"<\/span>,&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{name}<\/span><\/span><span class=\"code-snippet__string\">.png\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; os.makedirs(<span class=\"code-snippet__string\">\"screenshots\"<\/span>, exist_ok=<span class=\"code-snippet__literal\">True<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.driver.save_screenshot(path)<\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.5 \u751f\u6210\u7684\u4ee3\u7801\u793a\u4f8b\uff1aLoginPage<\/span><\/span><\/h3>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"python\"><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.common.by&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;By<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;pages.base_page&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;BasePage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">class<\/span>&nbsp;<span class=\"code-snippet__title\">LoginPage<\/span>(<span class=\"code-snippet__title\">BasePage<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u767b\u5f55\u9875Page Object\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u5b9a\u4f4d\u7b56\u7565\uff1aid\u4f18\u5148\uff0ccss\u5176\u6b21\uff0cxpath\u515c\u5e95<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; USERNAME_INPUT = (By.ID,&nbsp;<span class=\"code-snippet__string\">\"username\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; PASSWORD_INPUT = (By.ID,&nbsp;<span class=\"code-snippet__string\">\"password\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; LOGIN_BUTTON = (By.CSS_SELECTOR,&nbsp;<span class=\"code-snippet__string\">\"button[type='submit']\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ERROR_MESSAGE = (By.CLASS_NAME,&nbsp;<span class=\"code-snippet__string\">\"error-msg\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">login<\/span>(<span class=\"code-snippet__params\">self, username, password<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u6267\u884c\u767b\u5f55\u64cd\u4f5c\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.input_text(username, *<span class=\"code-snippet__variable\">self<\/span>.USERNAME_INPUT)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.input_text(password, *<span class=\"code-snippet__variable\">self<\/span>.PASSWORD_INPUT)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__variable\">self<\/span>.click(*<span class=\"code-snippet__variable\">self<\/span>.LOGIN_BUTTON)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">get_error_message<\/span>(<span class=\"code-snippet__params\">self<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u83b7\u53d6\u9519\u8bef\u63d0\u793a\u4fe1\u606f\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;<span class=\"code-snippet__variable\">self<\/span>.get_text(*<span class=\"code-snippet__variable\">self<\/span>.ERROR_MESSAGE)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">is_loaded<\/span>(<span class=\"code-snippet__params\">self<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u9a8c\u8bc1\u9875\u9762\u662f\u5426\u52a0\u8f7d\u5b8c\u6210\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;<span class=\"code-snippet__variable\">self<\/span>.find_element(*<span class=\"code-snippet__variable\">self<\/span>.USERNAME_INPUT).is_displayed()<\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.6 \u751f\u6210\u7684\u4ee3\u7801\u793a\u4f8b\uff1a\u6d4b\u8bd5\u7528\u4f8b<\/span><\/span><\/h3>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"python\"><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;pytest<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;pages.login_page&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;LoginPage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;pages.search_page&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;SearchPage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;pages.cart_page&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;CartPage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">test_login_search_add_cart<\/span>(<span class=\"code-snippet__params\">driver<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u6d4b\u8bd5\u6d41\u7a0b\uff1a\u767b\u5f55\u2192\u641c\u7d22\u624b\u673a\u2192\u52a0\u8d2d\u7269\u8f66\u2192\u9a8c\u8bc1\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 1: \u767b\u5f55<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; login_page = LoginPage(driver)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; login_page.login(<span class=\"code-snippet__string\">\"testuser\"<\/span>,&nbsp;<span class=\"code-snippet__string\">\"testpass123\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;login_page.is_loaded()&nbsp;<span class=\"code-snippet__keyword\">is<\/span>&nbsp;<span class=\"code-snippet__literal\">False<\/span>&nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u767b\u5f55\u6210\u529f\u5e94\u8df3\u8f6c<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 2: \u641c\u7d22<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; search_page = SearchPage(driver)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; search_page.search(<span class=\"code-snippet__string\">\"\u624b\u673a\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;search_page.get_result_count() &gt;&nbsp;<span class=\"code-snippet__number\">0<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 3: \u52a0\u8d2d\u7269\u8f66<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; search_page.click_first_product()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; cart_page = CartPage(driver)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; cart_page.add_to_cart()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; cart_count = cart_page.get_cart_count()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;cart_count &gt;=&nbsp;<span class=\"code-snippet__number\">1<\/span>,&nbsp;<span class=\"code-snippet__string\">f\"\u8d2d\u7269\u8f66\u6570\u91cf\u5f02\u5e38:&nbsp;<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{cart_count}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><\/pre>\n<\/section>\n<section style=\"text-align: center;\" nodeleaf=\"\">\n<figure class=\"wx-qr-wrap\"><img decoding=\"async\" class=\"rich_pages wxw-img\" data-aistatus=\"1\" data-imgfileid=\"100000613\" data-ratio=\"0.46596858638743455\" data-s=\"300,640\" data-type=\"png\" data-w=\"573\" type=\"block\" src=\"https:\/\/mmbiz.qpic.cn\/sz_mmbiz_png\/BWmfcibGhS1IjiaSNSaibuwv4S2FLVSCFXia3Fvldc0Tjvc21gz6RyW8Xh0iao4FeYbCOSmdwKaldCjA7hicKhEpQHa6gKns3IV2NicqQLJ26EWyGE\/640?wx_fmt=png&#038;from=appmsg\" \/><figcaption class=\"wx-qr-tip\"><img decoding=\"async\" src=\"https:\/\/www.deartester.com\/wp-content\/uploads\/2026\/09\/wechat-qr.jpg\" alt=\"\u5fae\u4fe1\u516c\u4f17\u53f7\u4e8c\u7ef4\u7801\" loading=\"lazy\"><span>\u56fe\u7247\u5f15\u81ea\u5fae\u4fe1\u516c\u4f17\u53f7\uff0c\u626b\u7801\u5173\u6ce8\u9605\u8bfb\u539f\u6587<\/span><\/figcaption><\/figure>\n<\/section>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span style=\"color: rgb(153, 153, 153);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-size: 13px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;float: none;display: inline !important;\" data-pm-slice=\"0 0 []\"><span leaf=\"\">Cursor Composer\u4e00\u952e\u751f\u6210POM\u6846\u67b6\u8fc7\u7a0b\u7ebf\u7a3f<\/span><\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3.7 \u5173\u952ePrompt\u6280\u5de7<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u751f\u6210\u4ee3\u7801\u7684\u8d28\u91cf\uff0c\u53d6\u51b3\u4e8e\u4f60\u63cf\u8ff0\u7684\u7cbe\u5ea6\u3002\u4e09\u4e2a\u539f\u5219\uff1a<\/span><\/p>\n<ul style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u8bf4\u6e05\u6846\u67b6<\/span><\/strong><br \/>\n<section><span leaf=\"\">\uff1aPOM\u5206\u5c42 \/ \u7ebf\u6027\u811a\u672c \/ \u5173\u952e\u5b57\u9a71\u52a8\u2014\u2014\u4e0d\u8bf4\u6e05\u695a\uff0cAI\u4f1a\u7ed9\u4f60\u7ebf\u6027\u811a\u672c<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u8bf4\u6e05\u5b9a\u4f4d\u7b56\u7565<\/span><\/strong><br \/>\n<section><span leaf=\"\">\uff1aid\u4f18\u5148 &gt; css\u5176\u6b21 &gt; xpath\u515c\u5e95\u2014\u2014\u5426\u5219AI\u53ef\u80fd\u5168\u7528XPath\uff0c\u4e0d\u7a33\u5b9a<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u8bf4\u6e05\u7b49\u5f85\u7b56\u7565<\/span><\/strong><br \/>\n<section><span leaf=\"\">\uff1a\u663e\u5f0f\u7b49\u5f85WebDriverWait + 10\u79d2\u2014\u2014\u4e0d\u8981\u6c42\u7684\u8bdd\uff0cAI\u53ef\u80fd\u7528time.sleep()<\/span><\/section>\n<\/li>\n<\/ul>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\" data-pm-slice=\"2 2 []\"><span leaf=\"\">\ud83c\udfaf&nbsp;<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u6838\u5fc3\u539f\u5219<\/span><\/strong><span leaf=\"\">\uff1aPrompt\u8d8a\u5177\u4f53\uff0c\u751f\u6210\u4ee3\u7801\u8d8a\u53ef\u7528\u3002\u6a21\u7cca\u7684&#8221;\u5199\u4e2a\u767b\u5f55\u6d4b\u8bd5&#8221;\u53ea\u4f1a\u7ed9\u4f60\u7ebf\u6027\u811a\u672c+time.sleep\uff0c\u7cbe\u786e\u7684\u63cf\u8ff0\u624d\u80fd\u751f\u6210\u5de5\u7a0b\u7ea7\u4ee3\u7801\u3002<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><span leaf=\"\"><br  \/><\/span><\/p>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u56db\u3001Cursor + Appium\uff1a\u79fb\u52a8\u7aef\u81ea\u52a8\u5316\u811a\u672c\u751f\u6210\u5b9e\u6218\uff08Android + iOS\uff09<\/span><\/span><\/h2>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Appium\u7684\u590d\u6742\u5ea6\u6bd4Selenium\u9ad8\u4e00\u4e2a\u91cf\u7ea7\uff1a\u5e73\u53f0\u5dee\u5f02\uff08Android vs iOS\uff09\u3001\u6df7\u5408App\u7684context\u5207\u6362\u3001\u539f\u751f\u7ec4\u4ef6\u5b9a\u4f4d\u7b56\u7565\u4e0d\u540c\u3001\u624b\u52bf\u64cd\u4f5c\u590d\u6742\u3002\u4f46Cursor\u540c\u6837\u80fd\u5927\u5e45\u63d0\u6548<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">4.1 \u573a\u666f\uff1a\u6d4b\u8bd5\u67d0App\u7684\u542f\u52a8\u2192\u767b\u5f55\u2192\u6d4f\u89c8\u2192\u9000\u51fa\u6d41\u7a0b<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u6211\u4eec\u5206Android\u548ciOS\u4e24\u4e2a\u5e73\u53f0\u6f14\u793a<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">4.2 Android\u7aef\uff1a\u751f\u6210Appium\u6d4b\u8bd5\u811a\u672c<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Prompt\u793a\u4f8b\uff08Android\uff09<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u751f\u6210\u4e00\u4e2aAppium Android\u6d4b\u8bd5\u811a\u672c\uff0cPython + pytest\uff0c\u6d4b\u8bd5\u6d41\u7a0b\uff1a\u542f\u52a8App\u2192\u767b\u5f55\u2192\u6d4f\u89c8\u9996\u9875\u2192\u9000\u51fa\u767b\u5f55\u3002<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 0px;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(171, 25, 66);font-weight: bold;\">\u8981\u6c42\uff1a<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">1.<\/span>&nbsp;\u767b\u5f55\uff1a\u7528Accessibility ID\u5b9a\u4f4d\u7528\u6237\u540d\/\u5bc6\u7801\u8f93\u5165\u6846\uff0c\u8f93\u5165\u540e\u70b9\u51fb\u767b\u5f55\u6309\u94ae<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">2.&nbsp;<\/span><\/span><span leaf=\"\">\u6d4f\u89c8\uff1a\u6ed1\u52a8\u9996\u98753\u6b21\uff0c\u70b9\u51fb\u7b2c2\u4e2a\u5546\u54c1\u8fdb\u5165\u8be6\u60c5\u9875<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">3.&nbsp;<\/span><\/span><span leaf=\"\">\u9000\u51fa\uff1a\u8fd4\u56de\u9996\u9875\u2192\u6253\u5f00\u4fa7\u8fb9\u680f\u2192\u70b9\u51fb\u9000\u51fa\u767b\u5f55\u2192\u786e\u8ba4\u9000\u51fa<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">4.<\/span><\/span><span leaf=\"\">&nbsp;\u6bcf\u6b65\u52a0WebDriverWait\u663e\u5f0f\u7b49\u5f85\uff0c\u8d85\u65f610\u79d2<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">5.<\/span><\/span><span leaf=\"\">&nbsp;\u6ed1\u52a8\u7528TouchAction\u7684press+move_to+release\u5b9e\u73b0<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">6.&nbsp;<\/span><\/span><span leaf=\"\">\u7528pytest\u6807\u8bb0@pytest.mark.android<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.75;\"><span leaf=\"\" data-pm-slice=\"1 1 [&quot;table&quot;,{&quot;interlaced&quot;:null,&quot;align&quot;:null,&quot;class&quot;:null,&quot;style&quot;:null},&quot;table_body&quot;,{},&quot;table_row&quot;,{&quot;class&quot;:null,&quot;style&quot;:null},&quot;table_cell&quot;,{&quot;colspan&quot;:1,&quot;rowspan&quot;:1,&quot;colwidth&quot;:[576],&quot;width&quot;:null,&quot;valign&quot;:null,&quot;align&quot;:null,&quot;style&quot;:null},&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;margin: 0px 0px 15px; padding: 0px; box-sizing: border-box; font-size: 15px; color: rgb(63, 63, 63); text-align: justify; line-height: 1.85; font-family: -apple-system, BlinkMacSystemFont, \\&quot;Segoe UI\\&quot;, Roboto, \\&quot;PingFang SC\\&quot;, \\&quot;Microsoft YaHei\\&quot;, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;},&quot;namespaceURI&quot;:&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;}]\"><span textstyle=\"\" style=\"color: rgb(2, 30, 170);font-weight: bold;\">Cursor\u751f\u6210\u7684\u6838\u5fc3\u4ee3\u7801\uff1a<\/span><\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"python\"><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;pytest<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;appium&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;webdriver<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;appium.webdriver.common.appiumby&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;AppiumBy<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;appium.webdriver.common.touch_action&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;TouchAction<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.support.ui&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;WebDriverWait<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.support&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;expected_conditions&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;EC<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__meta\">@pytest.mark.android<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">class<\/span>&nbsp;<span class=\"code-snippet__title\">TestAndroidLoginBrowse<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; @pytest.fixture(scope=<span class=\"code-snippet__string\">\"class\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">driver<\/span>(<span class=\"code-snippet__params\">self<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; desired_caps = {<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"platformName\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"Android\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"automationName\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"UiAutomator2\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"appPackage\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"com.example.app\"<\/span>, &nbsp;<span class=\"code-snippet__comment\"># \u66ff\u6362\u4e3a\u5b9e\u9645\u5305\u540d<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"appActivity\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\".MainActivity\"<\/span>, &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u66ff\u6362\u4e3a\u5b9e\u9645Activity<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"noReset\"<\/span>:&nbsp;<span class=\"code-snippet__literal\">True<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"newCommandTimeout\"<\/span>:&nbsp;<span class=\"code-snippet__number\">300<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver = webdriver.Remote(<span class=\"code-snippet__string\">\"http:\/\/127.0.0.1:4723\"<\/span>, desired_caps)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">yield<\/span>&nbsp;driver<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.quit()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">test_login_browse_logout<\/span>(<span class=\"code-snippet__params\">self, driver<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; wait = WebDriverWait(driver,&nbsp;<span class=\"code-snippet__number\">10<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 1: \u767b\u5f55<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; username = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"username_input\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; username.send_keys(<span class=\"code-snippet__string\">\"testuser\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; password = driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"password_input\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; password.send_keys(<span class=\"code-snippet__string\">\"testpass123\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"login_button\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ).click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 2: \u9a8c\u8bc1\u767b\u5f55\u6210\u529f\uff08\u9996\u9875\u5143\u7d20\u51fa\u73b0\uff09<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; home_tab = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"home_tab\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;home_tab.is_displayed(),&nbsp;<span class=\"code-snippet__string\">\"\u767b\u5f55\u540e\u672a\u8fdb\u5165\u9996\u9875\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 3: \u6ed1\u52a8\u6d4f\u89c8\u9996\u98753\u6b21<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; action = TouchAction(driver)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; size = driver.get_window_size()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;i&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;<span class=\"code-snippet__built_in\">range<\/span>(<span class=\"code-snippet__number\">3<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action.press(x=size[<span class=\"code-snippet__string\">\"width\"<\/span>]\/\/<span class=\"code-snippet__number\">2<\/span>, y=size[<span class=\"code-snippet__string\">\"height\"<\/span>]\/\/<span class=\"code-snippet__number\">4<\/span>) \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.move_to(x=size[<span class=\"code-snippet__string\">\"width\"<\/span>]\/\/<span class=\"code-snippet__number\">2<\/span>, y=size[<span class=\"code-snippet__string\">\"height\"<\/span>]*<span class=\"code-snippet__number\">3<\/span>\/\/<span class=\"code-snippet__number\">4<\/span>) \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.release().perform()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 4: \u70b9\u51fb\u7b2c2\u4e2a\u5546\u54c1<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; product = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.XPATH,&nbsp;<span class=\"code-snippet__string\">\"(\/\/android.widget.ImageView)[2]\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; product.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 5: \u8fd4\u56de\u9996\u9875\u2192\u6253\u5f00\u4fa7\u8fb9\u680f\u2192\u9000\u51fa\u767b\u5f55<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.back()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"menu_button\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ).click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; logout_btn = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"logout_button\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; logout_btn.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u786e\u8ba4\u9000\u51fa<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; confirm = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ID,&nbsp;<span class=\"code-snippet__string\">\"android:id\/button1\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; confirm.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u9a8c\u8bc1\u56de\u5230\u767b\u5f55\u9875<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; login_screen = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"username_input\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;login_screen.is_displayed(),&nbsp;<span class=\"code-snippet__string\">\"\u9000\u51fa\u540e\u672a\u56de\u5230\u767b\u5f55\u9875\"<\/span><\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">4.3 iOS\u7aef\uff1a\u751f\u6210Appium\u6d4b\u8bd5\u811a\u672c<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">iOS\u4e0eAndroid\u7684\u811a\u672c\u7ed3\u6784\u76f8\u4f3c\uff0c\u4f46\u6709\u51e0\u4e2a\u5173\u952e\u5dee\u5f02\u9700\u8981\u6ce8\u610f\u3002\u5728Cursor\u4e2d\u751f\u6210iOS\u811a\u672c\u65f6\uff0c\u8981\u5728Prompt\u4e2d\u660e\u786e\u6307\u51fa\uff1a<\/span><\/p>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Prompt\u793a\u4f8b\uff08iOS\uff09<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 0px;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u751f\u6210\u4e00\u4e2aAppium iOS\u6d4b\u8bd5\u811a\u672c\uff0cPython + pytest\uff0c\u6d4b\u8bd5\u6d41\u7a0b\u540cAndroid\u7248\uff08\u542f\u52a8\u2192\u767b\u5f55\u2192\u6d4f\u89c8\u2192\u9000\u51fa\uff09<\/span><\/span><span leaf=\"\"><br  \/><\/span><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">iOS\u7279\u6b8a\u8981\u6c42\uff1a<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">1.<\/span>&nbsp;\u5b9a\u4f4d\u7b56\u7565\u4f18\u5148\u7528Accessibility ID\uff08iOS\u7684accessibility identifier\u5bf9\u5e94XCUIElement\u7684label\uff09<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">2.&nbsp;<\/span><\/span><span leaf=\"\">iOS\u7684alert\u5f39\u7a97\u7528driver.switch_to.alert\u5904\u7406\uff0c\u4e0d\u7528ACCESSIBILITY\u5b9a\u4f4d<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">3.&nbsp;<\/span><\/span><span leaf=\"\">\u6ed1\u52a8\u7528ActionChains\uff08iOS\u7684TouchAction\u7528\u6cd5\u4e0eAndroid\u4e0d\u540c\uff09<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">4.<\/span><\/span><span leaf=\"\">&nbsp;App\u8def\u5f84\u7528.app\u6587\u4ef6\uff08\u6a21\u62df\u5668\uff09<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">5.&nbsp;<\/span><\/span><span leaf=\"\">\u7528pytest\u6807\u8bb0@pytest.mark.ios<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">6.&nbsp;<\/span><\/span><span leaf=\"\">\u589e\u52a0context\u5207\u6362\u5904\u7406\uff08\u5982\u679c\u662f\u6df7\u5408App\uff0c\u9700\u5207\u6362\u5230WEBVIEW\uff09<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.75;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">Cursor\u751f\u6210\u7684iOS\u6838\u5fc3\u4ee3\u7801\uff1a<\/span><\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"python\"><code><span leaf=\"\"><span class=\"code-snippet__meta\">@pytest.mark.ios<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">class<\/span>&nbsp;<span class=\"code-snippet__title\">TestIOSLoginBrowse<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; @pytest.fixture(scope=<span class=\"code-snippet__string\">\"class\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">driver<\/span>(<span class=\"code-snippet__params\">self<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; desired_caps = {<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"platformName\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"iOS\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"automationName\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"XCUITest\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"platformVersion\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"17.0\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"deviceName\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"iPhone 15\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"app\"<\/span>:&nbsp;<span class=\"code-snippet__string\">\"\/path\/to\/MyApp.app\"<\/span>, &nbsp;<span class=\"code-snippet__comment\"># \u66ff\u6362\u4e3a\u5b9e\u9645app\u8def\u5f84<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"noReset\"<\/span>:&nbsp;<span class=\"code-snippet__literal\">True<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"newCommandTimeout\"<\/span>:&nbsp;<span class=\"code-snippet__number\">300<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver = webdriver.Remote(<span class=\"code-snippet__string\">\"http:\/\/127.0.0.1:4723\"<\/span>, desired_caps)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">yield<\/span>&nbsp;driver<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.quit()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">test_login_browse_logout<\/span>(<span class=\"code-snippet__params\">self, driver<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; wait = WebDriverWait(driver,&nbsp;<span class=\"code-snippet__number\">10<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 1: \u767b\u5f55<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; username = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"username_input\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; username.send_keys(<span class=\"code-snippet__string\">\"testuser\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; password = driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"password_input\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; password.send_keys(<span class=\"code-snippet__string\">\"testpass123\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"login_button\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ).click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 2: \u5904\u7406\u53ef\u80fd\u7684iOS\u539f\u751falert\u5f39\u7a97<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">try<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert = driver.switch_to.alert<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert.accept()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">except<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">pass<\/span>&nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u65e0\u5f39\u7a97\u5219\u7ee7\u7eed<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 3: \u9a8c\u8bc1\u767b\u5f55\u6210\u529f<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; home_tab = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"home_tab\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;home_tab.is_displayed()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 4: iOS\u6ed1\u52a8\uff08\u7528ActionChains\uff09<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">from<\/span>&nbsp;selenium.webdriver.common.action_chains&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;ActionChains<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; size = driver.get_window_size()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;i&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;<span class=\"code-snippet__built_in\">range<\/span>(<span class=\"code-snippet__number\">3<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ActionChains(driver) \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .move_by_offset(size[<span class=\"code-snippet__string\">\"width\"<\/span>]\/\/<span class=\"code-snippet__number\">2<\/span>, size[<span class=\"code-snippet__string\">\"height\"<\/span>]\/\/<span class=\"code-snippet__number\">4<\/span>) \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .click_and_hold() \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .move_by_offset(<span class=\"code-snippet__number\">0<\/span>, size[<span class=\"code-snippet__string\">\"height\"<\/span>]\/\/<span class=\"code-snippet__number\">2<\/span>) \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .release() \\<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .perform()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ActionChains(driver).reset_actions()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 5: \u70b9\u51fb\u7b2c2\u4e2a\u5546\u54c1<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; product = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.XPATH,&nbsp;<span class=\"code-snippet__string\">\"(\/\/XCUIElementTypeImage)[2]\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; product.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 6: \u6df7\u5408App context\u5207\u6362\uff08\u5982\u679c\u9700\u8981\uff09<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__string\">\"WEBVIEW\"<\/span>&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;driver.contexts:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; driver.switch_to.context(<span class=\"code-snippet__string\">\"WEBVIEW\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u5728WebView\u4e2d\u64cd\u4f5c...<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; driver.switch_to.context(<span class=\"code-snippet__string\">\"NATIVE_APP\"<\/span>) &nbsp;<span class=\"code-snippet__comment\"># \u5207\u56de\u539f\u751f<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># Step 7: \u9000\u51fa\u767b\u5f55<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; driver.find_element(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"menu_button\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ).click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; logout_btn = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"logout_button\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; logout_btn.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; confirm = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"\u786e\u8ba4\u9000\u51fa\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; confirm.click()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u9a8c\u8bc1\u56de\u5230\u767b\u5f55\u9875<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; login_screen = wait.until(EC.presence_of_element_located(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (AppiumBy.ACCESSIBILITY,&nbsp;<span class=\"code-snippet__string\">\"username_input\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">assert<\/span>&nbsp;login_screen.is_displayed(),&nbsp;<span class=\"code-snippet__string\">\"\u9000\u51fa\u540e\u672a\u56de\u5230\u767b\u5f55\u9875\"<\/span><\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">4.4 Android vs iOS\u5173\u952e\u5dee\u5f02\u5bf9\u7167<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 739.766px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"font-size: 15px;color: rgb(122, 79, 214);\">\u7ef4\u5ea6<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"font-size: 15px;color: rgb(122, 79, 214);font-weight: bold;\">Android<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"font-size: 15px;color: rgb(122, 79, 214);font-weight: bold;\">iOS<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">automationName<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">UiAutomator2<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">XCUITest<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">App\u6587\u4ef6<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">.apk<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">.app\uff08\u6a21\u62df\u5668\uff09\/ .ipa\uff08\u771f\u673a\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5143\u7d20\u7c7b\u578b<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">android.widget.*<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">XCUIElementType*<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u6ed1\u52a8\u5b9e\u73b0<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">TouchAction(press\u2192move_to\u2192release)<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">ActionChains(click_and_hold\u2192move_by_offset\u2192release)<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">alert\u5904\u7406<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">driver.switch_to.alert \u6216 ACCESSIBILITY\u5b9a\u4f4d<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">driver.switch_to.alert.accept()<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">context\u5207\u6362<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u540ciOS\uff08WEBVIEW\/NATIVE_APP\uff09<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u540cAndroid<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u5b9a\u4f4d\u4f18\u5148\u7b56\u7565<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">Accessibility ID &gt; id &gt; xpath<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">Accessibility ID\uff08label\uff09&gt; predicate &gt; xpath<\/span><\/section>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.85;\"><span leaf=\"\">\ud83d\udca1&nbsp;<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">Cursor\u4f7f\u7528\u6280\u5de7<\/span><\/strong><span leaf=\"\">\uff1a\u751f\u6210\u8de8\u5e73\u53f0\u811a\u672c\u65f6\uff0c\u5728Prompt\u4e2d\u660e\u786e\u5217\u51faAndroid\u548ciOS\u7684\u5dee\u5f02\u70b9\u3002Cursor\u4f1a\u5206\u522b\u751f\u6210\u4e24\u5957\u4ee3\u7801\uff0c\u800c\u4e0d\u662f\u6df7\u5728\u4e00\u8d77\u3002\u5982\u679c\u4f60\u53ea\u8bf4&#8221;\u5199\u4e2aAppium\u6d4b\u8bd5&#8221;\uff0c\u5b83\u9ed8\u8ba4\u751f\u6210Android\u7248\u2014\u2014iOS\u7684\u5dee\u5f02\u5bb9\u6613\u9057\u6f0f<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">4.5 \u8de8\u5e73\u53f0\u6d4b\u8bd5\u6846\u67b6<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u66f4\u9ad8\u7ea7\u7684\u73a9\u6cd5\uff1a\u7528Cursor\u751f\u6210\u4e00\u5957\u652f\u6301\u53cc\u5e73\u53f0\u7684\u6d4b\u8bd5\u57fa\u7c7b\uff0c\u901a\u8fc7pytest marker\u5207\u6362\u5e73\u53f0\uff1a<\/span><\/p>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Prompt\u793a\u4f8b\uff08\u8de8\u5e73\u53f0\uff09<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u751f\u6210\u4e00\u4e2a\u8de8\u5e73\u53f0Appium\u6d4b\u8bd5\u57fa\u7c7bCrossPlatformBasePage\uff0c\u652f\u6301Android\u548ciOS\u53cc\u5e73\u53f0<\/span><\/span><span leaf=\"\"><br  \/><\/span><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(123, 12, 0);font-weight: bold;\">\u8981\u6c42\uff1a<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">1.&nbsp;<\/span>\u901a\u8fc7pytest marker\u5207\u6362platform\uff0cdesired_caps\u5728conftest.py\u4e2d\u6839\u636emarker\u52a8\u6001\u751f\u6210<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">2.&nbsp;<\/span><\/span><span leaf=\"\">\u5c01\u88c5\u516c\u5171\u64cd\u4f5c\uff08click, input, swipe, wait\uff09\u7684\u5e73\u53f0\u9002\u914d\u5c42<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">3.&nbsp;<\/span><\/span><span leaf=\"\">\u6ed1\u52a8\u65b9\u6cd5\uff1aAndroid\u7528TouchAction\uff0ciOS\u7528ActionChains<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">4.&nbsp;<\/span><\/span><span leaf=\"\">\u63d0\u4f9bplatform\u53d8\u91cf\uff0cPage Object\u4e2d\u53ef\u7528\u6761\u4ef6\u5224\u65ad\u5904\u7406\u5e73\u53f0\u5dee\u5f02<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\" data-pm-slice=\"2 2 []\"><span leaf=\"\" style=\"box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);font-weight: bold;\">5.<\/span><\/span><span leaf=\"\">&nbsp;\u751f\u6210conftest.py\u7684driver fixture\uff0c\u6839\u636e&#8211;platform\u53c2\u6570\u9009\u62e9Android\u6216iOS\u7684desired_caps<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section style=\"text-align: center;\" nodeleaf=\"\">\n<figure class=\"wx-qr-wrap\"><img decoding=\"async\" class=\"rich_pages wxw-img\" data-ratio=\"0.46308724832214765\" data-s=\"300,640\" data-type=\"png\" data-w=\"596\" type=\"block\" data-imgfileid=\"100000614\" data-aistatus=\"1\" src=\"https:\/\/mmbiz.qpic.cn\/sz_mmbiz_png\/BWmfcibGhS1ImPEq0cbibzbUnMMtqibDuWiao6Bfozw6DC63N76IawAxwMX4JnxuthtCq0GNZxn7iaIeWdibNEsyia73qVicoC6Gb6ic4hTMaJyW141w\/640?wx_fmt=png&#038;from=appmsg\" \/><figcaption class=\"wx-qr-tip\"><img decoding=\"async\" src=\"https:\/\/www.deartester.com\/wp-content\/uploads\/2026\/09\/wechat-qr.jpg\" alt=\"\u5fae\u4fe1\u516c\u4f17\u53f7\u4e8c\u7ef4\u7801\" loading=\"lazy\"><span>\u56fe\u7247\u5f15\u81ea\u5fae\u4fe1\u516c\u4f17\u53f7\uff0c\u626b\u7801\u5173\u6ce8\u9605\u8bfb\u539f\u6587<\/span><\/figcaption><\/figure>\n<\/section>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.75;\"><span style=\"color: rgb(153, 153, 153);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-size: 13px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;float: none;display: inline !important;\" data-pm-slice=\"0 0 []\"><span leaf=\"\">Cursor + Appium\u8de8\u5e73\u53f0\u5de5\u4f5c\u6d41\u7ebf\u7a3f\uff1a\u4e00\u5957Prompt\u751f\u6210\u53cc\u5e73\u53f0\u811a\u672c<\/span><\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><span leaf=\"\"><br  \/><\/span><\/p>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u4e94\u3001Cursor Rules \u914d\u7f6e\uff1a\u6253\u9020\u4e13\u5c5e\u6d4b\u8bd5\u811a\u624b\u67b6<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">5.1 .cursorrules\u6587\u4ef6\u662f\u4ec0\u4e48<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u8fd9\u662fCursor\u7684<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u9879\u76ee\u7ea7AI\u884c\u4e3a\u7ea6\u675f\u6587\u4ef6<\/span><\/strong><span leaf=\"\">\u3002\u653e\u5728\u9879\u76ee\u6839\u76ee\u5f55\uff0cCursor\u5728\u751f\u6210\u4ee3\u7801\u65f6\u4f1a\u81ea\u52a8\u9075\u5b88\u5176\u4e2d\u7684\u89c4\u5219\u3002\u76f8\u5f53\u4e8e\u7ed9\u4f60\u7684AI\u52a9\u624b\u5b9a\u4e00\u4efd&#8221;\u5de5\u4f5c\u624b\u518c&#8221;<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">5.2 \u63a8\u8350\u7684\u6d4b\u8bd5\u9886\u57dfRules\u914d\u7f6e<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">.cursorrules<\/span><\/code><span leaf=\"\">\u6587\u4ef6\uff1a<\/span><\/p>\n<section class=\"code-snippet__fix code-snippet__js\">\n<ul class=\"code-snippet__line-index code-snippet__js\">\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<pre class=\"code-snippet__js\" data-lang=\"markdown\"><code><span leaf=\"\"><span class=\"code-snippet__section\"># \u9879\u76ee\uff1a\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\"># \u8bed\u8a00\uff1aPython 3.10+<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\"># \u6846\u67b6\uff1apytest + Selenium\/Appium<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\">## \u4ee3\u7801\u7ed3\u6784\u89c4\u5219<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u4f7f\u7528POM\uff08Page Object Model\uff09\u8bbe\u8ba1\u6a21\u5f0f<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;BasePage\u5c01\u88c5\u516c\u5171\u64cd\u4f5c\uff0c\u6240\u6709Page\u7c7b\u7ee7\u627fBasePage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u6d4b\u8bd5\u7528\u4f8b\u6587\u4ef6\u653e\u5728tests\/\u76ee\u5f55\uff0cPage Object\u653e\u5728pages\/\u76ee\u5f55<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u6bcf\u4e2aPage\u7c7b\u53ea\u8d1f\u8d23\u4e00\u4e2a\u9875\u9762\u7684\u5143\u7d20\u548c\u64cd\u4f5c<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\">## \u5b9a\u4f4d\u7b56\u7565\u4f18\u5148\u7ea7<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;Web\uff1aid &gt; name &gt; css<span class=\"code-snippet__emphasis\">_selector &gt; xpath<\/span><\/span><\/code><code><span leaf=\"\">- Android\uff1aaccessibility_id &gt; id &gt; xpath<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;iOS\uff1aaccessibility<span class=\"code-snippet__emphasis\">_id &gt; predicate_<\/span>string &gt; xpath<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u7981\u6b62\u4f7f\u7528\u7edd\u5bf9xpath\uff08\u5982\/html\/body\/div[3]\/...\uff09<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\">## \u7b49\u5f85\u7b56\u7565<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u7edf\u4e00\u4f7f\u7528WebDriverWait + expected<span class=\"code-snippet__emphasis\">_conditions<\/span><\/span><\/code><code><span leaf=\"\">- \u663e\u5f0f\u7b49\u5f85\u8d85\u65f6\u65f6\u95f4\uff1a10\u79d2\uff08\u53ef\u901a\u8fc7\u53c2\u6570\u8986\u76d6\uff09<\/span><\/code><code><span leaf=\"\">- \u7981\u6b62\u4f7f\u7528time.sleep()<\/span><\/code><code><span leaf=\"\">- \u9875\u9762\u52a0\u8f7d\u7b49\u5f85\u7528dom_to<span class=\"code-snippet__emphasis\">_be_<\/span>loaded<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\">## \u65ad\u8a00\u89c4\u5219<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u4f7f\u7528pytest\u539f\u2f63assert\uff0c\u4e0d\u5f15\u5165unittest.AssertionError<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u6bcf\u4e2a\u6d4b\u8bd5\u6b65\u9aa4\u81f3\u5c11\u4e00\u4e2a\u65ad\u8a00<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u65ad\u8a00\u5931\u8d25\u4fe1\u606f\u5305\u542b\uff1a\u671f\u671b\u503c\u3001\u5b9e\u9645\u503c\u3001\u4e0a\u4e0b\u6587<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__section\">## \u547d\u540d\u89c4\u8303<\/span><\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;Page\u7c7b\uff1a\u5927\u9a7c\u5cf0+Page\u540e\u7f00\uff0c\u5982LoginPage<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__bullet\">-<\/span>&nbsp;\u6d4b\u8bd5\u51fd\u6570\uff1atest<span class=\"code-snippet__emphasis\">_\u5c0f\u9a7c\u5cf0+\u573a\u666f\u63cf\u8ff0\uff0c\u5982test_<\/span>login<span class=\"code-snippet__emphasis\">_with_<\/span>valid<span class=\"code-snippet__emphasis\">_credentials<\/span><\/span><\/code><code><span leaf=\"\">- \u5b9a\u4f4d\u53d8\u91cf\uff1a\u5168\u5927\u5199+\u4e0b\u5212\u7ebf\uff0c\u5982USERNAME_INPUT<\/span><\/code><\/pre>\n<\/section>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">5.3 \u914d\u7f6eCursor Skill\uff1a\u4e00\u884c\u6307\u4ee4\u751f\u6210\u7528\u4f8b<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor\u7684Skill\u529f\u80fd\u53ef\u4ee5\u8ba9\u4f60\u628a\u91cd\u590d\u7684Prompt\u56fa\u5316\u4e3a\u6a21\u677f\u3002\u5728Cursor\u4e2d\u6253\u5f00Settings \u2192 Rules, Skills, Subagents \u2192 \u65b0\u5efaSkill\uff1a<\/span><\/p>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Skill\u521b\u5efaPrompt<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<section>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;\"><span leaf=\"\" data-pm-slice=\"1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;margin: 0px; padding: 0px; box-sizing: border-box; font-size: 15px; color: rgb(63, 63, 63); text-align: justify; line-height: 1.75;&quot;},&quot;namespaceURI&quot;:&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;}]\"><span textstyle=\"\" style=\"font-weight: bold;\">\u65b0\u589e\u89c4\u5219\uff1a<\/span>\u6839\u636e\u9700\u6c42\u6587\u6863\uff0c\u751f\u6210\u529f\u80fd\u6d4b\u8bd5\u7528\u4f8b\uff0c\u9700\u8981\u8986\u76d6\u6b63\u5411\u3001\u9006\u5411\u3001\u5f02\u5e38\u3001\u5e76\u53d1\u573a\u666f\u3002\u8f93\u51fa\u4e3aPython pytest\u6d4b\u8bd5\u51fd\u6570\uff0c\u5305\u542b\u6b65\u9aa4\u6ce8\u91ca\u548c\u65ad\u8a00\u3002\u5c06\u7528\u4f8b\u6587\u4ef6\u653e\u5728tests\/\u76ee\u5f55\u4e0b<\/span><\/p>\n<\/section>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;text-indent: 2em;\"><span leaf=\"\">Cursor\u4f1a\u521b\u5efa\u4e00\u4e2a<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">SKILL.md<\/span><\/code><span leaf=\"\">\u6587\u4ef6\u3002\u4ee5\u540e\u53ea\u9700\u8981\u5728\u5bf9\u8bdd\u4e2d\u8f93\u5165<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">\/generate-test-cases<\/span><\/code><span leaf=\"\">&nbsp;+ \u9700\u6c42\u63cf\u8ff0\uff0c\u5c31\u80fd\u81ea\u52a8\u751f\u6210\u7b26\u5408\u4f60\u9879\u76ee\u89c4\u8303\u7684\u6d4b\u8bd5\u7528\u4f8b<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">5.4 Rules\u7ef4\u62a4\u5efa\u8bae<\/span><\/span><\/h3>\n<ul style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u628a.cursorrules\u7eb3\u5165Git\u7248\u672c\u7ba1\u7406\uff0c\u56e2\u961f\u5171\u4eab\u540c\u4e00\u5957\u89c4\u5219<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">Rules\u5185\u5bb9\u968f\u9879\u76ee\u6f14\u8fdb\u2014\u2014\u53d1\u73b0Cursor\u751f\u6210\u4ee3\u7801\u6709\u7cfb\u7edf\u6027\u95ee\u9898\uff0c\u5c31\u5728Rules\u91cc\u52a0\u7ea6\u675f<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\">\u4e0d\u8981\u5199\u592a\u591a\u89c4\u5219\u2014\u201410\u6761\u4ee5\u5185\u7684\u6838\u5fc3\u7ea6\u675f\u6bd450\u6761\u7ec6\u8282\u89c4\u5219\u6548\u679c\u597d<\/span><\/section>\n<\/li>\n<\/ul>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u516d\u3001\u8fdb\u9636\u73a9\u6cd5\uff1aCursor Agent \u6a21\u5f0f\u8dd1\u6d4b\u8bd5\u6d41\u6c34\u7ebf<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">6.1 Agent\u6a21\u5f0f\u662f\u4ec0\u4e48<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor 0.43\u7248\u672c\u5f15\u5165\u4e86Agent\u6a21\u5f0f\u3002\u4e0eComposer\u4e0d\u540c\uff0cAgent\u53ef\u4ee5<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u81ea\u4e3b\u6267\u884c\u591a\u6b65\u9aa4\u4efb\u52a1<\/span><\/strong><span leaf=\"\">\u2014\u2014\u4e0d\u53ea\u662f\u751f\u6210\u4ee3\u7801\uff0c\u8fd8\u80fd\u8fd0\u884c\u6d4b\u8bd5\u3001\u8bfb\u53d6\u65e5\u5fd7\u3001\u5206\u6790\u5931\u8d25\u3001\u4fee\u590d\u811a\u672c<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">6.2 \u573a\u666f\uff1aAgent\u4fee\u590d\u4e00\u4e2a\u5143\u7d20\u5b9a\u4f4d\u5931\u6548\u7684\u7528\u4f8b<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u5047\u8bbe\u4f60\u7684Selenium\u6d4b\u8bd5\u7528\u4f8b\u8dd1\u7ea2\u4e86\uff0c\u62a5\u9519<\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\">NoSuchElementException\u2014\u2014<\/span><span leaf=\"\" data-pm-slice=\"1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, \\&quot;Segoe UI\\&quot;, Roboto, \\&quot;PingFang SC\\&quot;, \\&quot;Microsoft YaHei\\&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;&quot;},&quot;namespaceURI&quot;:&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;}]\">\u9875\u9762\u6539\u7248\uff0c\u767b\u5f55\u6309\u94ae\u7684id\u53d8\u4e86<\/span><\/code><\/p>\n<p style=\"margin: 0px 0px 4px;padding: 0px;box-sizing: border-box;font-size: 13px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.75;font-weight: bold;\"><span leaf=\"\">\ud83d\udc64 Agent Prompt<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.75;\" data-pm-slice=\"2 4 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u8fd0\u884c tests\/test_login_search_cart.py\uff0c\u5206\u6790\u5931\u8d25\u7684\u7528\u4f8b\u3002\u5982\u679c\u5931\u8d25\u539f\u56e0\u662f\u5143\u7d20\u5b9a\u4f4d\u5931\u6548\uff0c\u68c0\u67e5\u5f53\u524d\u9875\u9762\u7684HTML\u7ed3\u6784\uff0c\u66f4\u65b0\u5b9a\u4f4d\u7b56\u7565\u540e\u91cd\u65b0\u8fd0\u884c\u9a8c\u8bc1<\/span><\/span><\/p>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);font-weight: bold;\">Agent\u4f1a\u81ea\u52a8\u6267\u884c\u4ee5\u4e0b\u6b65\u9aa4\uff1a<\/span><\/span><\/p>\n<ol style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u8fd0\u884c<\/span><\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">pytest tests\/test_login_search_cart.py<\/span><\/span><\/code><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\uff0c\u6355\u83b7\u5931\u8d25\u8f93\u51fa<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u5206\u6790\u9519\u8bef\uff1a<\/span><\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">NoSuchElementException: By.ID, \"login-btn\"<\/span><\/span><\/code><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u6253\u5f00\u6d4f\u89c8\u5668\u8bbf\u95ee\u76ee\u6807\u9875\u9762\uff0c\u5206\u6790\u5f53\u524dHTML\u7ed3\u6784<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u53d1\u73b0\u767b\u5f55\u6309\u94ae\u6539\u6210\u4e86<\/span><\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">&lt;button class=\"btn-primary\" data-testid=\"login\"&gt;<\/span><\/span><\/code><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u66f4\u65b0\u5b9a\u4f4d\u7b56\u7565\uff1aBy.ID \u2192 By.CSS_SELECTOR,&nbsp;<\/span><\/span><code style=\"margin: 0px;padding: 0px;box-sizing: border-box;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\"[data-testid='login']\"<\/span><\/span><\/code><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u4fee\u6539login_page.py\u4e2d\u7684LOGIN_BUTTON\u5b9a\u4f4d<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin:0px 0px 6px;padding:0px;box-sizing:border-box;line-height:1.75;color:#7a4442;\">\n<section style=\"text-indent: 0px;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 68, 66);\">\u91cd\u65b0\u8fd0\u884c\u6d4b\u8bd5\uff0c\u9a8c\u8bc1\u901a\u8fc7<\/span><\/span><\/section>\n<\/li>\n<\/ol>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section style=\"text-align: center;\" nodeleaf=\"\">\n<figure class=\"wx-qr-wrap\"><img decoding=\"async\" class=\"rich_pages wxw-img\" data-ratio=\"0.5052631578947369\" data-s=\"300,640\" data-type=\"png\" data-w=\"570\" type=\"block\" data-imgfileid=\"100000615\" data-aistatus=\"1\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/BWmfcibGhS1JsfFlqa3VqO1AOcLeuU4ia9qdYlicn0f7E9RZXKuYWoELXgOsUKKMicnzNbAW10ohzWricfG7WHHficfPOEelXWo7rIthkxdXGNaics\/640?wx_fmt=png&#038;from=appmsg\" \/><figcaption class=\"wx-qr-tip\"><img decoding=\"async\" src=\"https:\/\/www.deartester.com\/wp-content\/uploads\/2026\/09\/wechat-qr.jpg\" alt=\"\u5fae\u4fe1\u516c\u4f17\u53f7\u4e8c\u7ef4\u7801\" loading=\"lazy\"><span>\u56fe\u7247\u5f15\u81ea\u5fae\u4fe1\u516c\u4f17\u53f7\uff0c\u626b\u7801\u5173\u6ce8\u9605\u8bfb\u539f\u6587<\/span><\/figcaption><\/figure>\n<\/section>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: center;line-height: 1.75;\"><span style=\"color: rgb(153, 153, 153);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-size: 13px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;float: none;display: inline !important;\" data-pm-slice=\"0 0 []\"><span leaf=\"\">Cursor Agent\u81ea\u52a8\u4fee\u590d\u5931\u8d25\u7528\u4f8b\u6d41\u7a0b\u7ebf\u7a3f<\/span><\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">6.3 \u6548\u7387\u5bf9\u6bd4<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 617px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">\u4efb\u52a1<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">\u624b\u52a8\u4fee\u590d<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">Agent\u4fee\u590d<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u8fd0\u884c\u6d4b\u8bd5\u53d1\u73b0\u95ee\u9898<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">5\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">30\u79d2<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u6392\u67e5\u5b9a\u4f4d\u5931\u6548\u539f\u56e0<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">10-20\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">1\u5206\u949f\uff08\u81ea\u52a8\u5206\u6790HTML\uff09<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u4fee\u6539\u5b9a\u4f4d\u7b56\u7565<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">5\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">10\u79d2<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u91cd\u8dd1\u9a8c\u8bc1<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">5\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">30\u79d2<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u5408\u8ba1<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">25-35\u5206\u949f<\/span><\/strong><\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">~2\u5206\u949f<\/span><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.85;\"><span leaf=\"\">\ud83d\udca1 Agent\u6a21\u5f0f\u76ee\u524d\u9002\u5408<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u5b9a\u4f4d\u5931\u6548\u3001\u7b49\u5f85\u8d85\u65f6\u3001\u65ad\u8a00\u503c\u5fae\u8c03<\/span><\/strong><span leaf=\"\">\u8fd9\u7c7b\u95ee\u9898\u3002\u590d\u6742\u7684\u4e1a\u52a1\u903b\u8f91Bug\u4ecd\u9700\u4eba\u5de5\u5206\u6790<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><span leaf=\"\"><br  \/><\/span><\/p>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u4e03\u3001\u6548\u7387\u5bf9\u6bd4\u4e0e\u907f\u5751\u6307\u5357<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">7.1 \u6574\u4f53\u6548\u7387\u6570\u636e<\/span><\/span><\/h3>\n<table style=\"margin: 15px 0px;padding: 0px;box-sizing: border-box;width: 617px;border-collapse: collapse;font-size: 14px;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\">\n<tbody>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">\u4efb\u52a1<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">\u7eaf\u624b\u5199<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">Cursor\u8f85\u52a9<\/span><\/span><\/section>\n<\/th>\n<th style=\"margin: 0px;padding: 10px 8px;box-sizing: border-box;background: rgb(7, 193, 96);color: rgb(255, 255, 255);text-align: left;font-weight: 600;\">\n<section style=\"text-align: center;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(122, 79, 214);\">\u63d0\u5347\u500d\u6570<\/span><\/span><\/section>\n<\/th>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u642d\u5efaPOM\u6846\u67b6<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">40\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">30\u79d2<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">~80x<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u7f16\u5199\u5355\u9875Page Object<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">20\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">2\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">~10x<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">25\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">3\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">~8x<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">\u4fee\u590d\u5b9a\u4f4d\u5931\u6548<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">30\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">2\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;\">\n<section><span leaf=\"\">~15x<\/span><\/section>\n<\/td>\n<\/tr>\n<tr style=\"margin: 0px;padding: 0px;box-sizing: border-box;\">\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">\u751f\u6210\u8de8\u5e73\u53f0Appium\u811a\u672c<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">90\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">5\u5206\u949f<\/span><\/section>\n<\/td>\n<td style=\"margin: 0px;padding: 8px;box-sizing: border-box;border: 1px solid rgb(224, 224, 224);vertical-align: top;background: rgb(249, 249, 249);\">\n<section><span leaf=\"\">~18x<\/span><\/section>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u6ce8\u610f\uff1a\u4ee5\u4e0a\u6570\u636e\u57fa\u4e8e&#8221;5\u5e74\u6d4b\u8bd5\u7ecf\u9a8c\u5de5\u7a0b\u5e08 + Cursor Pro&#8221;\u7684\u5b9e\u6d4b\u7ed3\u679c\u3002\u65b0\u624b\u6548\u7387\u63d0\u5347\u66f4\u5927\uff0c\u4f46Review\u65f6\u95f4\u4e5f\u8981\u76f8\u5e94\u589e\u52a0<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">7.2 \u4e09\u4e2a\u5e38\u89c1\u5751<\/span><\/h3>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"2 2 []\"><span leaf=\"\">\u57511\uff1a\u751f\u6210\u7684\u5b9a\u4f4d\u7b56\u7565\u4e0d\u591f\u7a33\u5b9a<\/span><\/h4>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor\u751f\u6210\u7684\u4ee3\u7801\u53ef\u80fd\u5927\u91cf\u4f7f\u7528XPath\u6216CSS\u9009\u62e9\u5668\uff0c\u8fd9\u4e9b\u5b9a\u4f4d\u65b9\u5f0f\u5728\u9875\u9762\u6539\u7248\u65f6\u5bb9\u6613\u5931\u6548<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u89e3\u51b3<\/span><\/strong><span leaf=\"\">\uff1a\u5728.cursorrules\u4e2d\u5f3a\u5236\u5b9a\u4f4d\u4f18\u5148\u7ea7\uff08id &gt; accessibility &gt; css &gt; xpath\uff09\uff0c\u5e76\u5728Review\u65f6\u624b\u52a8\u66ff\u6362\u4e0d\u7a33\u5b9a\u7684\u9009\u62e9\u5668\u3002Cursor\u751f\u6210\u540e\uff0c\u82b15\u5206\u949f\u68c0\u67e5\u6bcf\u4e2a\u5b9a\u4f4d\u7b56\u7565\u2014\u2014\u8fd9\u4e2a\u65f6\u95f4\u6bd4\u624b\u519930\u5206\u949f\u503c<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"2 2 []\"><span leaf=\"\">\u57512\uff1aAppium context\u5207\u6362\u5bb9\u6613\u9057\u6f0f<\/span><\/h4>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u6df7\u5408App\uff08\u539f\u751f+WebView\uff09\u5728\u6d4b\u8bd5\u4e2d\u9700\u8981\u9891\u7e41\u5207\u6362context\u3002Cursor\u5982\u679c\u4e0d\u77e5\u9053\u662f\u6df7\u5408App\uff0c\u751f\u6210\u7684\u4ee3\u7801\u53ef\u80fd\u53ea\u5728NATIVE_APP\u4e2d\u64cd\u4f5c\uff0c\u5bfc\u81f4WebView\u4e2d\u7684\u5143\u7d20\u627e\u4e0d\u5230<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u89e3\u51b3<\/span><\/strong><span leaf=\"\">\uff1a\u5728Prompt\u4e2d\u660e\u786e\u8bf4&#8221;\u8fd9\u662f\u6df7\u5408App\uff0cWebView\u90e8\u5206\u9700\u8981switch_to.context(&#8216;WEBVIEW&#8217;)&#8221;\u3002\u66f4\u597d\u7684\u505a\u6cd5\u662f\u5199\u8fdb.cursorrules\uff1a\u6240\u6709Appium\u811a\u672c\u9ed8\u8ba4\u5904\u7406context\u5207\u6362<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"576\">\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"2 2 []\"><span leaf=\"\">\u57513\uff1a\u8fc7\u5ea6\u4f9d\u8d56AI\u5bfc\u81f4\u7528\u4f8b\u8bbe\u8ba1\u80fd\u529b\u9000\u5316<\/span><\/h4>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">\u8fd9\u662f\u6700\u9690\u853d\u7684\u5751\u3002\u5f53\u4f60\u4e60\u60ef\u4e86&#8221;\u8bf4\u4e00\u53e5\u8bdd\u5c31\u51fa\u4ee3\u7801&#8221;\uff0c\u53ef\u80fd\u8df3\u8fc7\u6d4b\u8bd5\u7528\u4f8b\u8bbe\u8ba1\u2014\u2014\u7b49\u4ef7\u7c7b\u6ca1\u5206\u3001\u8fb9\u754c\u503c\u6ca1\u6d4b\u3001\u5f02\u5e38\u8def\u5f84\u6ca1\u8986\u76d6\u3002\u4ee3\u7801\u5f88\u5feb\uff0c\u4f46\u6d4b\u8bd5\u8d28\u91cf\u5728\u4e0b\u964d<\/span><\/p>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u89e3\u51b3<\/span><\/strong><span leaf=\"\">\uff1a\u575a\u6301&#8221;\u5148\u8bbe\u8ba1\u518d\u751f\u6210&#8221;\u2014\u2014\u5148\u7528\u7b49\u4ef7\u7c7b\/\u8fb9\u754c\u503c\u6cd5\u5217\u51fa\u6d4b\u8bd5\u70b9\uff08\u7eb8\u7b14\u6216\u601d\u7ef4\u5bfc\u56fe\uff09\uff0c\u518d\u8ba9Cursor\u6839\u636e\u4f60\u7684\u6d4b\u8bd5\u70b9\u751f\u6210\u4ee3\u7801\u3002AI\u8d1f\u8d23&#8221;\u5199&#8221;\uff0c\u4f60\u8d1f\u8d23&#8221;\u60f3&#8221;<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 style=\"margin: 20px 0px 10px;padding: 0px;box-sizing: border-box;font-size: 15px;font-weight: bold;color: rgb(51, 51, 51);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">7.3 \u6b63\u786e\u59ff\u52bf\uff1aAI\u751f\u6210\u9aa8\u67b6 + \u4eba\u5de5\u6253\u78e8\u7ec6\u8282<\/span><\/span><\/h4>\n<ol style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">AI\u751f\u6210<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u6846\u67b6\u7ed3\u6784\u3001\u516c\u5171\u65b9\u6cd5\u3001\u57fa\u7840\u5b9a\u4f4d<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u4eba\u5de5Review<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u5b9a\u4f4d\u7b56\u7565\u7a33\u5b9a\u6027\u3001\u65ad\u8a00\u5b8c\u6574\u6027\u3001\u7b49\u5f85\u7b56\u7565\u5408\u7406\u6027<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u4eba\u5de5\u8865\u5145<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u4e1a\u52a1\u7279\u6709\u903b\u8f91\u3001\u5f02\u5e38\u8def\u5f84\u3001\u6570\u636e\u9a71\u52a8\u53c2\u6570\u5316<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">AI\u4fee\u590d<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u65e5\u5e38\u7ef4\u62a4\u4e2d\u7528Agent\u6a21\u5f0f\u4fee\u590d\u5b9a\u4f4d\u5931\u6548<\/span><\/section>\n<\/li>\n<\/ol>\n<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\"  \/>\n<h2 style=\"margin: 35px 0px 15px;padding: 0px 0px 0px 12px;box-sizing: border-box;font-size: 20px;font-weight: bold;color: rgb(26, 26, 26);border-left: 4px solid rgb(7, 193, 96);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" data-pm-slice=\"0 0 []\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(0, 82, 255);\">\u516b\u3001\u603b\u7ed3\u4e0e\u884c\u52a8\u6e05\u5355<\/span><\/span><\/h2>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(255, 41, 65);\">\u4e00\u53e5\u8bdd\u5b9a\u4f4d<\/span><\/span><\/h3>\n<p style=\"margin: 0px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);text-align: justify;line-height: 1.85;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 2em;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\">Cursor\u662f\u81ea\u52a8\u5316\u6d4b\u8bd5\u7684<\/span><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u6548\u7387\u653e\u5927\u5668<\/span><\/strong><span leaf=\"\">\u2014\u2014\u5b83\u628a\u4f60\u4ece\u91cd\u590d\u7684&#8221;\u5199\u6a21\u677f\u4ee3\u7801&#8221;\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u8ba9\u4f60\u6709\u66f4\u591a\u65f6\u95f4\u505a\u771f\u6b63\u6709\u4ef7\u503c\u7684\u6d4b\u8bd5\u8bbe\u8ba1\u3002\u4f46\u8bb0\u4f4f\uff1a\u5b83\u653e\u5927\u7684\u662f\u4f60\u7684\u80fd\u529b\uff0c\u5982\u679c\u4f60\u7684\u8bbe\u8ba1\u80fd\u529b\u4e3a\u96f6\uff0c\u653e\u5927\u540e\u8fd8\u662f\u96f6<\/span><\/p>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">3\u6b65\u4e0a\u624b\u8ba1\u5212<\/span><\/span><\/h3>\n<ol style=\"margin: 12px 0px 15px 20px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u672c\u5468<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u5b89\u88c5Cursor\uff0c\u7528Composer\u751f\u6210\u4e00\u4e2aSelenium\u767b\u5f55\u6d4b\u8bd5\u811a\u672c\uff0c\u8dd1\u901a<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u7b2c\u4e8c\u5468<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u914d\u7f6e.cursorrules\uff0c\u751f\u6210\u5b8c\u6574POM\u6846\u67b6\uff0c\u63a5\u5165pytest\u548c\u6d4b\u8bd5\u62a5\u544a<\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\"><strong style=\"margin: 0px;padding: 0px;box-sizing: border-box;color: rgb(7, 193, 96);\"><span leaf=\"\">\u7b2c\u4e09\u5468<\/span><\/strong><br \/>\n<section><span leaf=\"\">\u5c1d\u8bd5Appium\u811a\u672c\u751f\u6210\uff08\u5148Android\u540eiOS\uff09\uff0c\u4f53\u9a8cAgent\u4fee\u590d<\/span><\/section>\n<\/li>\n<\/ol>\n<h3 style=\"margin: 25px 0px 12px;padding: 0px;box-sizing: border-box;font-size: 17px;font-weight: bold;color: rgb(26, 26, 26);line-height: 1.4;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: center;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\"><span leaf=\"\"><span textstyle=\"\" style=\"color: rgb(64, 118, 0);\">5\u6761\u68c0\u67e5\u6e05\u5355<\/span><\/span><\/h3>\n<ul style=\"margin: 12px 0px 15px;padding: 0px;box-sizing: border-box;font-size: 15px;color: rgb(63, 63, 63);list-style: none;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;\" class=\"list-paddingleft-1\">\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\"><span textstyle=\"\" style=\"text-decoration: underline;\">\u9879\u76ee\u6839\u76ee\u5f55\u6709.cursorrules\u6587\u4ef6\uff0c\u5b9a\u4f4d\u7b56\u7565\u548c\u7b49\u5f85\u7b56\u7565\u5df2\u7ea6\u675f<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\"><span textstyle=\"\" style=\"text-decoration: underline;\">Cursor\u751f\u6210\u7684\u6bcf\u4e2aPage Object\uff0c\u4f60\u90fdReview\u4e86\u5b9a\u4f4d\u7b56\u7565\uff08\u662f\u5426\u7a33\u5b9a\uff09<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\"><span textstyle=\"\" style=\"text-decoration: underline;\">\u6d4b\u8bd5\u7528\u4f8b\u7684\u65ad\u8a00\u4e0d\u53ea\u662fassert True\uff0c\u5305\u542b\u5177\u4f53\u7684\u671f\u671b\u503c\u548c\u5b9e\u9645\u503c<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\"><span textstyle=\"\" style=\"text-decoration: underline;\">Appium\u811a\u672c\u4e2d\uff0cAndroid\u548ciOS\u7684\u5dee\u5f02\u70b9\uff08\u6ed1\u52a8\u3001alert\u3001\u5143\u7d20\u7c7b\u578b\uff09\u5df2\u5904\u7406<\/span><\/span><\/section>\n<\/li>\n<li style=\"margin: 0px 0px 6px;padding: 0px;box-sizing: border-box;line-height: 1.75;\">\n<section><span leaf=\"\"><span textstyle=\"\" style=\"text-decoration: underline;\">\u6bcf\u6b21\u9875\u9762\u6539\u7248\u540e\uff0c\u7528Cursor Agent\u6a21\u5f0f\u81ea\u52a8\u4fee\u590d\uff0c\u800c\u975e\u624b\u52a8\u9010\u4e2a\u6539<\/span><\/span><\/section>\n<\/li>\n<\/ul>\n<p style=\"margin: 0px;padding: 0px;box-sizing: border-box;font-size: 14px;color: rgb(87, 107, 149);text-align: justify;line-height: 1.85;\"><span leaf=\"\">\ud83d\udca1 AI\u4e0d\u4f1a\u66ff\u4ee3\u6d4b\u8bd5\u5de5\u7a0b\u5e08\uff0c\u4f46\u4f1a\u7528AI\u7684\u6d4b\u8bd5\u5de5\u7a0b\u5e08\uff0c\u4f1a\u66ff\u4ee3\u4e0d\u4f1a\u7528\u7684\u3002\u4ece\u4eca\u5929\u5f00\u59cb\uff0c\u8ba9Cursor\u6210\u4e3a\u4f60\u7684\u6d4b\u8bd5\u811a\u624b\u67b6<\/span><\/p>\n<p style=\"display: none;\"><mp-style-type data-value=\"3\"><\/mp-style-type><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f60\u6709\u6ca1\u6709\u7b97\u8fc7\uff1a\u5199\u4e00\u4e2a\u5b8c\u6574\u7684Selenium\u767b\u5f55\u6d4b\u8bd5\u811a\u672c\uff0c\u4ece\u5b9a\u4f4d\u5143\u7d20\u5230\u52a0\u65ad\u8a00\uff0c\u8981\u82b1\u591a\u957f\u65f6\u95f4\uff1f30\u5206\u949f\uff1f1\u5c0f\u65f6\uff1f  [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":100,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-101","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai"],"_links":{"self":[{"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/posts\/101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/comments?post=101"}],"version-history":[{"count":1,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/posts\/101\/revisions"}],"predecessor-version":[{"id":202,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/posts\/101\/revisions\/202"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/media\/100"}],"wp:attachment":[{"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/media?parent=101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/categories?post=101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deartester.com\/index.php\/wp-json\/wp\/v2\/tags?post=101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}