{ "info": { "author": "\u7f57\u79d1\u5cf0", "author_email": "lkf20031988@163.com", "bugtrack_url": null, "classifiers": [], "description": "# rtsf-app\n\u57fa\u4e8ertsf\u6d4b\u8bd5\u6846\u67b6\uff0c\u5173\u952e\u5b57\u9a71\u52a8Android UI,\u8fdb\u884c\u81ea\u52a8\u5316\u7684\u529f\u80fd\u6d4b\u8bd5\n\n\n# \u73af\u5883\u51c6\u5907\n\n## window\u5b89\u88c5 appium.js\n1. [\u4e0b\u8f7d\u5b89\u88c5node.js](https://nodejs.org/en)\n2. \u6267\u884c\u547d\u4ee4\uff0c\u5b89\u88c5cnpm: npm install -g cnpm --registry=https://registry.npm.taobao.org\n3. \u6267\u884c\u547d\u4ee4\uff0c\u5b89\u88c5appium: cnpm install appium -g\n4. \u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u9a8c\u8bc1appium: appium.cmd --command-timeout 120000 -p 4723 -U DEVICE_ID\n\n> appium.cmd\u5176\u5b9e\u5c31\u662f: node \"%appdata%\\npm\\node_modules\\appium\\build\\lib\\main.js\" --command-timeout 120000 -p 4723 -U DEVICE_ID\n\n\n\n## \u8bbe\u7f6eANDROID_HOME\u73af\u5883\u53d8\u91cf\n1. [\u4e0b\u8f7dsimple_android_home](https://github.com/RockFeng0/rtsf-app/releases/tag/v1.0.39)\n2. \u89e3\u538b\u6587\u4ef6android_home.zip\uff0c\u65b0\u589e\u73af\u5883\u53d8\u91cf ANDROID_HOME\uff0c\u4e3a\u89e3\u538b\u540e\u7684\u6839\u76ee\u5f55\u7684\u8def\u5f84\n3. \u5728\u73af\u5883\u53d8\u91cfpath\u4e2d\uff0c\u8ffd\u52a0 %ANDROID_HOME%\\platform-tools\n\n> \u5982\u679c\u4f60\u5b89\u88c5\u4e86 android SDK\uff0c\u5e76\u8bbe\u7f6e\u4e86 ANDROID_HOME, \u786e\u4fdd adb \u548c aapt\u547d\u4ee4\u53ef\u4ee5\u88ab\u8c03\u7528\n\n\n\n## \u4e0b\u8f7dselenium-server-standalone.jar\n\n> \u53c2\u89c1[rtsf-web](https://github.com/RockFeng0/rtsf-web)\u9879\u76ee\uff0c\u73af\u5883\u51c6\u5907\u680f\uff0c\u7ed9\u51fa\u7684\u4e0b\u8f7d\u94fe\u63a5\n\n## \u5b89\u88c5rtsf-app\npip install rtsf-app \n\n# \u547d\u4ee4\u4ecb\u7ecd\n\n## \u5de5\u5177\u547d\u4ee4\n1. \u67e5\u770b\u8bbe\u5907\u4fe1\u606f, \u683c\u5f0f: \u8bbe\u5907id:\u8bbe\u5907\u5c5e\u6027 ,\u8bbe\u5907\u5c5e\u6027\u4e2d\uff0candroid_version\u5c31\u662f\u8bbe\u5907\u7248\u672c\uff0c\u5373android device platform version\n\n```\n# PC\u4e2d\uff0c\u6267\u884cainfo\u547d\u4ee4\uff0c\u6253\u5370\u8be5PC\u8fde\u63a5\u7684\u6240\u6709\u8bbe\u5907\u4fe1\u606f\u53ca\u8bbe\u5907\u5c5e\u6027\n> ainfo\n{'127.0.0.1:6555': {'ip': None, 'model': 'SAMSUNG-SM-N900A', 'cpu': 'x86', 'pad_version': 'hlteatt-userdebug 4.4.4 tt eng.jenkins.20171226.140228 release-keys', 'android_version': '4.4.4', 'android_api_version': '19', 'linux_version': 'Linux version 3.10.0+ (ttvm@TianTian-Dev) (gcc version 4.6 20120106 (prerelease) (GCC) ) #13 SMP PREEMPT Mon Dec 18 11:26:12 CST 2017'}}\n```\n\n\n\n2. \u67e5\u770bapk\u4fe1\u606f\uff0c\u5176\u4e2d\u4e3b\u8981\u5173\u6ce8\uff0cappPackage\u548cappActivity \n\n```\n# PC\u4e2d\uff0c\u6267\u884cainfo --apk APK_FILE \u547d\u4ee4\uff0c\u67e5\u770bapk\u4fe1\u606f\n> ainfo --apk C:\\ApiDemos-debug.apk\n{'platformName': 'Android', 'deviceName': None, 'platformVersion': None, 'app': 'C:\\\\d_disk\\\\auto\\\\buffer\\\\test\\\\tools\\\\android\\\\ApiDemos-debug.apk', 'appPackage': 'io.appium.android.apis', 'appWaitPackage': 'io.appium.android.apis', 'appActivity': 'io.appium.android.apis.ApiDemos', 'unicodeKeyboard': True, 'resetKeyboard': True, 'newCommandTimeout': 120000}\n```\n\n## \u573a\u666f\u4e00 \u672c\u5730\u6d4b\u8bd5\n\n\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u5c31\u662f\u4e00\u53f0PC\uff0c\u8fde\u63a5\u4e00\u53f0\u8bbe\u5907\u7684\u6d4b\u8bd5\u573a\u666f\uff0c\u6b65\u9aa4\u5982\u4e0b\n\n**1.\u6d4b\u8bd5\u573a\u666f\u5047\u8bbe**\n\n```\n apk(\u5f85\u6d4b\u8bd5\u7684apk): C:\\ApiDemos-debug.apk\n case(\u81ea\u52a8\u5316\u6d4b\u8bd5\u7528\u4f8b): C:\\test_case.yaml\n\n PC_A_IP(\u672c\u673a): 192.168.1.1\n PC_A_Android_Device_ID(\u5929\u5929\u6a21\u62df\u5668): 127.0.0.1:6555\n```\n\n**2.\u5f00\u542fappium server,\u5e76\u7ed1\u5b9a\u5f85\u6d4b\u8bbe\u5907**\n\n```\n# PC_A\uff0c\u76d1\u542c4723\u7aef\u53e3\uff0c\u8be5\u7aef\u53e3\u7ed1\u5b9a id\u4e3a127.0.0.1:6555\u5e76\u4e14\u7248\u672c\u4e3a4.4.4\u7684\u8bbe\u5907\uff1b\u6ce8\u610f\uff0c\u76d1\u542c\u7aef\u53e3+1\u4e5f\u4f1a\u88ab\u5360\u7528\n> appserver 192.168.1.1:4723 --device-name 127.0.0.1:6555 --device-version 4.4.4\n\n```\n\n**3.aldriver\u9a71\u52a8\u6d4b\u8bd5**\n\n```\n# aldriver\u547d\u4ee4\u6267\u884c\u672c\u5730\u6d4b\u8bd5\uff0c\u8be5\u547d\u4ee4\u4e3b\u52a8\u8fde\u63a5\u672c\u5730PC_A\u76844723\u7aef\u53e3\uff0c\u5e76\u9a71\u52a8adb\u8fde\u63a5\u7684\u7b2c\u4e00\u4e2a\u8bbe\u5907\u8fdb\u884c\u6d4b\u8bd5\n# \u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\uff0c\u5728\u5047\u8bbe\u573a\u666f\u4e2d\uff0c\u8981\u6c42appserver\u4f7f\u7528PC_A\u4f7f\u7528\u672c\u673aIP\u548c4723\u7aef\u53e3\uff0c\u5e76\u7ed1\u5b9a\u540d\u5b57\u662f 127.0.0.1:6555 \u7684\u8bbe\u5907\n> aldriver C:\\test_case.yaml --apk C:\\ApiDemos-debug.apk\n\n# \u5982\u679c\uff0c\u4f60\u6ca1\u6709apk,\u4f46\u662f\u901a\u8fc7 \u5de5\u5177\u547d\u4ee4\uff0c\u83b7\u53d6\u5230 appPackage\u548cappActivity\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e0b\u8ff0\u547d\u4ee4\uff1b\u539f\u7406\u76f8\u5f53\u4e8eappium\u4e2d\u7684\uff0cstart_activity(package, activity)\n#> aldriver C:\\test_case.yaml --package io.appium.android.apis --activity io.appium.android.apis.ApiDemos\n\n# \u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u8865\u5168\u6240\u6709\u53c2\u6570\n#> aldriver C:\\test_case.yaml --apk C:\\ApiDemos-debug.apk --package io.appium.android.apis --activity io.appium.android.apis.ApiDemos\n```\n\n**4.\u91ca\u653e\u7aef\u53e3\u5360\u7528**\n\n> ctrl + c \u7ed3\u675f\u7aef\u53e3\u5360\u7528\n\n\n\n## \u573a\u666f\u4e8c \u8fdc\u7a0b\u63a7\u5236\u6d4b\u8bd5-Selenium Grid Mode\n\n**\u6d4b\u8bd5\u80cc\u666f\u53ca\u5206\u6790**\n\n```\n\u80cc\u666f: \n \u6bd4\u5982\uff0c\u624b\u4e0a\u67091000\u6761\u76f8\u5bf9\u72ec\u7acb\u7684\u6d4b\u8bd5case\uff0c\u4e00\u53f0PC\u4e00\u53f0\u8bbe\u5907\u7684\u65b9\u5f0f\u5b8c\u6210\u8fd9\u4e9bcase\u7684\u9a8c\u8bc1\uff0c\u6548\u7387\u8f83\u4f4e\u3002\u90a3\u4e48\uff0c\u5e76\u884c\u6d4b\u8bd5\u662f\u6700\u597d\u7684\u89e3\u51b3\u529e\u6cd5\n\n\u5206\u6790: \n 1.\u591a\u53f0PC\u8fde\u63a5\u591a\u53f0\u8bbe\u5907\u7684\u6d4b\u8bd5\u573a\u666f\u5047\u8bbe,\u5176\u539f\u7406\u662f\u57fa\u4e8eselenium RC\uff0c\u4f7f\u7528selenium Grid\u7684\u65b9\u5f0f\uff0c\u4f7f\u5f97appium server\u4f5c\u4e3anode\u8282\u70b9\uff0c\u8fdb\u884c\u5206\u5e03\u5f0f\u6d4b\u8bd5\n 2.\u53ef\u662f\uff0c\u5373\u4f7f\u662f\u5206\u5e03\u5f0f\u6d4b\u8bd5\uff0c\u5b83\u7684\u8fc7\u7a0b\u4e5f\u662f\u4e00\u4e2a\u5e76\u53d1\u7684\u8fc7\u7a0b\uff0c\u6bcf\u53f0\u8bbe\u5907\u5206\u522b\u90fd\u8981\u6d4b\u8bd51000\u6761case\u3002\u597d\u6bd4\u5f88\u591a\u8f66\u5728\u652f\u8def\u4e0a\u8dd1\uff0c\u6c47\u5165\u7684\u4e3b\u5e72\u9053\u5374\u53ea\u6709\u4e00\u6761\n 3.\u9700\u8981\u505a\u7684\uff0c\u5c31\u662f\u8ba9\u8fd91000\u6761case\uff0c\u5206\u914d\u7ed9\u8fd9\u4e9b\u8bbe\u5907\uff0c\u8ba9\u5b83\u4eec\u5e76\u884c\u6d4b\u8bd5\u3002\u89e3\u51b3\u65b9\u6cd5\uff1a\u591a\u91cdhub\n```\n\n\u591a\u53f0PC,\u8fde\u63a5\u591a\u53f0\u8bbe\u5907,\u5e76\u884c\u6d4b\u8bd5case\u573a\u666f\uff0c\u6b65\u9aa4\u5982\u4e0b\n\n**1.\u6d4b\u8bd5\u573a\u666f\u5047\u8bbe**\n\n```\n apk(\u5f85\u6d4b\u8bd5\u7684apk): C:\\ApiDemos-debug.apk\n case1(\u81ea\u52a8\u5316\u6d4b\u8bd5\u7528\u4f8b): C:\\test_case1.yaml\n case2(\u81ea\u52a8\u5316\u6d4b\u8bd5\u7528\u4f8b): C:\\test_case2.yaml\n ...\n\n PC_Server_IP(Grid Hub\u7aef): 192.168.1.254\n\n PC_A_IP(\u672c\u673a): 192.168.1.1\n PC_A_Android_Device_ID(\u5929\u5929\u6a21\u62df\u5668): 127.0.0.1:6555\n ...\n\n PC_B_IP(\u8fdc\u7aef\u673a): 192.168.1.2\n PC_B_Android_Device_ID(\u5929\u5929\u6a21\u62df\u5668): 127.0.0.1:6555\n ...\n\n\u6ce8\u610f: adb.exe\u6700\u591a\u652f\u6301\u6bcf\u53f0pc\u94fe\u63a520\u53f0\u8bbe\u5907\n\u5e76\u884c\u6d4b\u8bd5: PC_A\u8fde\u63a5\u7684\u6240\u6709\u673a\u5668\uff0c\u6d4b\u8bd5case1;PC_B\u8fde\u63a5\u7684\u6240\u6709\u673a\u5668,\u6d4b\u8bd5case2\n```\n\n\n\n**2.\u5f00\u542fselenium grid hub**\n\n\u547d\u4ee4\u8be6\u89e3\uff0c\u53c2\u89c1[rtsf-web](https://github.com/RockFeng0/rtsf-web)\n\n```\n# PC_Server\u8bbe\u7f6ePC_A\u7684hub\n> wrhub C:\\selenium-server-standalone-3.14.0.jar --port 4444\n\n# PC_Server\u8bbe\u7f6ePC_B\u7684hub\n> wrhub C:\\selenium-server-standalone-3.14.0.jar --port 5555\n```\n\n**3.\u5f00\u542fappium server node**\n\n```\n# PC_A 4723\u7aef\u53e3\u7ed1\u5b9a\u8bbe\u5907\uff0c\u5e76\u6ce8\u518cnode\u8282\u70b9 \n> appserver 192.168.1.1:4723 --device-name 127.0.0.1:6555 --device-version 4.4.4 --hub-ip 192.168.1.254 --hub-port 4444\n\n# PC_A 4725\u7aef\u53e3\u7ed1\u5b9a\u8bbe\u5907\uff0c\u5e76\u6ce8\u518cnode\u8282\u70b9 \n> appserver 192.168.1.1:4725 --device-name DEVICE_ID --device-version DEVICE_VERSION --hub-ip 192.168.1.254 --hub-port 4444\n...\n\n# PC_B, \u540c\u7406\n> appserver 192.168.1.2:4723 --device-name 127.0.0.1:6555 --device-version 4.4.4 --hub-ip 192.168.1.254 --hub-port 5555\n...\n```\n\n**4.ardriver\u9a71\u52a8\u6d4b\u8bd5**\n\n\u6ce8\u610f:\n- \u5982\u679c\u4f7f\u7528 --apk\u53c2\u6570\uff0c\u90a3\u4e48 \u786e\u4fdd PC A \u548c PC B,\u5728\u8be5\u6307\u5b9a\u7684\u6587\u4ef6\u8def\u5f84\u4e2d\uff0c\u5b58\u5728\u8fd9\u4e2aapk\u3002\n- \u5982\u679c\u4f7f\u7528 --package\u548c--activity\u53c2\u6570\uff0c\u90a3\u4e48\u786e\u4fdd\uff0c\u8fde\u63a5\u5230PC\u7684\u624b\u673a\uff0c\u5df2\u7ecf\u88c5\u4e86\u8fd9\u4e2aapk\n- aldriver \u4e0e ardriver\u7684\u533a\u522b\u5c31\u5728\u4e8e: ardriver\u652f\u6301 ip\u548cport\u53c2\u6570\uff0c\u5141\u8bb8grid\u6a21\u5f0f\n\n```\n# ardriver\u672c\u8eab\u662f\u4e2a\u5e76\u53d1\u9a71\u52a8\u6d4b\u8bd5\uff0c\u4f46\u662f\uff0c\u6bcf\u6b21\u4f7f\u7528\u90fd\u4f1a\u5f00\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u5e76\u53d1\u7684\u8fc7\u7a0b\uff0c\u5c31\u91c7\u7528\u591a\u6b21\u6267\u884c\u547d\u4ee4\u5427\n# PC_A\u6267\u884ccase1\uff0c\u6267\u884ccase1\u7684\u6d4b\u8bd5\u9a8c\u8bc1\n> ardriver C:\\test_case1.yaml --apk C:\\ApiDemos-debug.apk --ip 192.168.1.254 --port 4444\n\n# PC_B\u7684\u6240\u6709\u8bbe\u5907\uff0c\u6267\u884ccase2\u7684\u6d4b\u8bd5\u9a8c\u8bc1\n> ardriver C:\\test_case2.yaml --apk C:\\ApiDemos-debug.apk --ip 192.168.1.254 --port 5555\n\n```\n\n## \u6d4b\u8bd5\u62a5\u544a\u53ca\u65e5\u5fd7\n\n> \u6267\u884c\u7ed3\u675f\u540e\uff0c\u6d4b\u8bd5\u7528\u4f8b\u6240\u5728\u8def\u5f84\uff0c\u5c31\u662freport\u751f\u6210\u7684\u8def\u5f84\n\n\n# \u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\uff0c\u6a21\u677f\u57fa\u4e8ertsf\n\n> \u53d8\u91cf\u5f15\u7528-> $var \u5173\u952e\u5b57(\u51fd\u6570)\u5f15\u7528-> ${function}\n\n- \u5e38\u91cf\u7684\u5b9a\u4e49\uff0c glob_var \u548c glob_regx\n- \u6a21\u677f\u5e38\u7528\u7684\u5173\u952e\u5b57\uff0c\u53c2\u89c1 [rtsf](https://github.com/RockFeng0/rtsf)\u4ecb\u7ecd\n\n## \u57fa\u672c\u7528\u4f8b\n\n\u57fa\u672c\u7528\u4f8b\uff0c\u662f\u6307\u6ca1\u6709\u5206\u5c42\u7684\u60c5\u51b5\u4e0b\uff0c\u7b80\u5355\u7684\u6d4b\u8bd5\u7528\u4f8b\n\n```\n# test_case.yaml\n# yaml\u6d4b\u8bd5\u7528\u4f8b\uff0c\u6a21\u578b\u793a\u4f8b:\n- project:\n name: xxx App\n module: xxx\u6a21\u5757-\u529f\u80fd\u6d4b\u8bd5\n\n- case:\n # id desc \u9009\u586b\uff0c\u975e\u7ea6\u5b9a\u5b57\u6bb5 \n id: ATP-1\n desc: \u6d4b\u8bd5\u7528\u4f8b-\u6a21\u677f\u683c\u5f0f\u7684\u8bbe\u8ba1-\u6a21\u677f\uff08\u5168\u5b57\u6bb5\uff09\n\n # name \u5fc5\u586b\uff0c\u9700\u786e\u4fdd\u552f\u4e00\u6027\n name: android_app_ui_auto_test_demo_1\n\n # responsible \u9009\u586b\n responsible: rockfeng0\n\n # tester \u9009\u586b\n tester: rockfeng0\n\n # \u5b9a\u4e49\u6b63\u5219\u8868\u8fbe\u5f0f, \u5b9a\u4e49\u7684\u5b57\u7b26\u4e32\u4e0d\u4f1a\u89e3\u6790\n glob_regx:\n rex_bar_title: 'Views/Controls/(.*)'\n\n # \u5b9a\u4e49\u53d8\u91cf\uff0c \u6548\u679c\u540c SetVar(name, value)\n glob_var:\n app_package: io.appium.android.apis\n app_main_activity: .ApiDemos\n app_view_webview_activity: .view.WebView1\n app_view_button_activity: .view.Buttons1\n app_view_control_activity: .view.Controls1\n app_view_dragdrop_activity: .view.DragAndDropDemo\n app_graphic_paint_activity: .graphics.TouchPaint\n app_animation_activity: .animation.BouncingBalls\n\n # pre_command \u9009\u586b\n pre_command:\n - ${StartActivity($app_package, $app_view_control_activity)}\n - ${DyStrData(var_bar_title, $rex_bar_title)}\n - ${VerifyVar(var_bar_title, 1. Light Theme)} \n\n # steps \u5fc5\u586b\n steps: \n\n # \u5728appdriver\u4e2d\uff0c\u5b9a\u4f4d\u5143\u7d20\n - appdriver:\n by: id\n value: io.appium.android.apis:id/edit\n index: 0\n timeout: 10\n action: ${SendKeys(\u4f60\u597d - hello)}\n\n - appdriver:\n action: ${TimeSleep(1)}\n\n - appdriver:\n by: -android uiautomator\n value: text(\"Checkbox 1\")\n index: 0\n timeout: 10\n action: ${Tap()}\n\n - appdriver:\n action: ${VerifyElemAttr(checked, true)}\n\n - appdriver:\n action: ${Tap()}\n\n - appdriver:\n action: ${VerifyElemAttr(checked, false)}\n\n - appdriver:\n action: ${TimeSleep(1)} \n\n - appdriver:\n action: ${Swipe(up, 1)}\n\n - appdriver:\n by: id\n value: android:id/text1 \n action: ${Tap()} \n\n - appdriver:\n by: -android uiautomator\n value: 'text(\"Earth\")'\n action: ${Tap()}\n\n # post_command \u9009\u586b\n post_command:\n - ${Back()}\n - ${CloseApp()}\n\n```\n\n## \u5206\u5c42\u7528\u4f8b\n\n- \u5206\u5c42\u7528\u4f8b\uff0c\u662f\u6307\u6a21\u5757\u529f\u80fd\u6d4b\u8bd5\u7684\u65f6\u5019\uff0c\u5bf9\u6d4b\u8bd5\u7528\u4f8b\u8fdb\u884c\u5206\u5c42\uff0c\u6700\u5c0f\u7684\u5355\u5143\u4e3aapi\uff0c\u5176\u6b21\u4e3asuite\uff0c\u6700\u540e\u7ec4\u6210\u7528\u4f8b\n- \u5176\u5b58\u653e\u8def\u5f84\u3001\u7f16\u5199\u89c4\u5219\u7b49\uff0c\u8be6\u89c1 [rtsf](https://github.com/RockFeng0/rtsf)\u76f8\u5173\u4ecb\u7ecd\n- \u793a\u4f8b\u53ef\u4ee5\uff0c\u53c2\u89c1[rtsf-http](https://github.com/RockFeng0/rtsf-http)\u76f8\u5173\u4ecb\u7ecd\n\n\n# \u5c01\u88c5\u7684\u5173\u952e\u5b57(\u5185\u7f6e\u51fd\u6570)\n\n\u5173\u952e\u5b57\u7684\u4f7f\u7528\uff0c\u5728\u524d\u9762\uff0c\u6709\u4ecb\u7ecd\uff0c\u89c4\u5219\u5982\u4e0b\n> \u53d8\u91cf\u5f15\u7528-> $var \u5173\u952e\u5b57(\u51fd\u6570)\u5f15\u7528-> ${function}\n\n## App functions --> android\u8bbe\u5907-\u6d4b\u8bd5\u76f8\u5173\u5e38\u7528\u64cd\u4f5c\n\n```\nLaunchApp() # use current session to launch and active the app \nStartActivity(app_package,app_activity,timeout) # Only support android. start an activity and focus to it. default timeout is 10 seconds\nPageSource() # page source for this activity\nForward() # \u7c7b\u4f3c\u6d4f\u89c8\u5668\u7684 \u524d\u8fdb\nBack() # \u7c7b\u4f3c\u6d4f\u89c8\u5668\u7684 \u540e\u9000\nShake() # \u6a21\u62df\u8bbe\u5907\u6447\u6643 \nBackgroundApp(seconds) # \u5e94\u7528\u4f1a\u88ab\u653e\u5230\u540e\u53f0\u7279\u5b9a\u65f6\u95f4,\u7136\u540e\u5e94\u7528\u4f1a\u91cd\u65b0\u56de\u5230\u524d\u53f0 \nOpenNotifications() # \u6253\u5f00\u901a\u77e5\u680f\nRemoveApp(app_package) # \u5378\u8f7dapp\nSwitchToDefaultContext() # \u5207\u6362\u5230\u9ed8\u8ba4\u4e0a\u4e0b\u6587 \nSwitchToNewContext() # \u5207\u6362\u5230\u65b0\u7684\u4e0a\u4e0b\u6587\nReset() # \u91cd\u7f6eapp, \u5373\u5148closeApp\u7136\u540e\u5728launchAPP\nCloseApp() # only close app . keep the session\nQuitApp() # will close the session\n```\n\n\n## AppElement methods --> \u5143\u7d20\u5b9a\u4f4d\u76f8\u5173\u64cd\u4f5c\n\n
| AppElement methods | \n\u53c2\u6570\u4ecb\u7ecd | \n\u63cf\u8ff0 | \n
|---|---|---|
| GetControl() | \n\n | \u83b7\u53d6element controls,\u8fd4\u56de\u5b57\u5178\uff0c\u5982\uff1a{\"by\":None,\"value\":None,\"index\":0,\"timeout\":10} | \n
| SetControl(by,value,index,timeout) | \nby: \u6307appium\u7684\u5bfb\u627e\u5143\u7d20\u7684\u65b9\u5f0f:NativeApp\u652f\u6301(\"id\",\"xpath\",\"class name\",'-android uiautomator')\uff0cWebView\u652f\u6301selenium\u6240\u7528\u65b9\u5f0f\uff0c\u9ed8\u8ba4\u4e3aNone | \n\n 1.\u4f9d\u636eapp\u5f53\u524dcontext\uff0c\u8bbe\u7f6eelement controls\uff0c\u7528\u4e8eapp\u5143\u7d20\u7684\u5b9a\u4f4d\u548c\u63a7\u5236 \n 2. -android uiautomator\u662fappium\u4f7f\u7528uiautomator\u4e2d\u7684UiSelector\u6765\u5b9a\u4f4d\u5143\u7d20\uff0c\u5e38\u7528\u6765\u4f7f\u7528\u6587\u672c\u5b9a\u4f4d\u5143\u7d20\uff0cvalue\u503c\u5982 text(\"xxxx\")\n | \n
| value: \u4e0eby\u914d\u5bf9\u4f7f\u7528\uff0c\u76f8\u5e94by\u7684\u503c | \n||
| index: \u7d22\u5f15\u503c\uff0c\u9ed8\u8ba4\u4e3a0\uff0c\u5373\u7b2c\u4e00\u4e2a\uff0c \u5982\u679cby,value\u7ec4\u5408\u627e\u5230\u5f88\u591a\u5143\u7d20\uff0c\u901a\u8fc7\u7d22\u5f15index\u6307\u5b9a\u4e00\u4e2a | \n||
| timeout: \u8d85\u65f6\u65f6\u95f4\uff0c\u9ed8\u8ba410\uff0c\u537310\u79d2\uff0c\u5982\u679cby,value\u7ec4\u5408\u5bfb\u627e\u5143\u7d20\u8d85\u8fc710\u79d2\uff0c\u8d85\u65f6\u62a5\u9519 | \n