{ "info": { "author": "\u7f57\u79d1\u5cf0", "author_email": "lkf20031988@163.com", "bugtrack_url": null, "classifiers": [], "description": "# rtsf-web\n \u57fa\u4e8ertsf\u6d4b\u8bd5\u6846\u67b6\u548cselenium\u7a0b\u5e8f\u6846\u67b6\uff0c\u5173\u952e\u5b57\u9a71\u52a8Web UI\u5c42\u9762\uff0c\u8fdb\u884c\u81ea\u52a8\u5316\u7684\u529f\u80fd\u6d4b\u8bd5\n\n## \u73af\u5883\u51c6\u5907\n\n### \u5b89\u88c5\u6d4f\u89c8\u5668\u9a71\u52a8\u548c\u4e0b\u8f7dselenium-server.jar\n1. \u5b89\u88c5\u6d4f\u89c8\u5668\n2. \u4e0b\u8f7d\u6d4f\u89c8\u5668\u5b98\u65b9\u9a71\u52a8\n3. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u786e\u4fdd\u9a71\u52a8\u53ef\u88ab\u8c03\u7528\n4. \u4e0b\u8f7d selenium-server\n\n\u7ecf\u8fc7\u591a\u5e74\u7684\u53d1\u5c55WebDriver\u5df2\u7ecf\u6210\u4e3a\u4e86\u4e8b\u5b9e\u4e0a\u7684\u6807\u51c6\uff0c\u73b0\u5728\u6bcf\u79cd\u6d4f\u89c8\u5668\u90fd\u6709\u72ec\u7acb\u7684\u5b98\u65b9\u9a71\u52a8\u6587\u4ef6\u4e86\n\nBrowser | Component\n--------|----------\nChrome |[chromedriver(.exe)](http://chromedriver.storage.googleapis.com/index.html)\nInternet Explorer |[IEDriverServer.exe](http://selenium-release.storage.googleapis.com/index.html)\nEdge |[MicrosoftWebDriver.msi](http://go.microsoft.com/fwlink/?LinkId=619687)\nFirefox 47+ |[geckodriver(.exe)](https://github.com/mozilla/geckodriver/releases/)\nPhantomJS |[phantomjs(.exe)](http://phantomjs.org/)\nOpera |[operadriver(.exe)](https://github.com/operasoftware/operachromiumdriver/releases)\nSafari |[SafariDriver.safariextz](http://selenium-release.storage.googleapis.com/index.html)\n**selenium-server** |[selenium-server-standalone.jar](http://selenium-release.storage.googleapis.com/index.html)\n\n\n### \u5b89\u88c5rtsf-web\npip install rtsf-web\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### \u5982\u4f55\u83b7\u53d6\u63a7\u4ef6\nweb\u63a7\u4ef6\u5143\u7d20\u7684\u83b7\u53d6\uff0c\u9075\u5faaselenium\u7684\u89c4\u5219\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u8ff0\u65b9\u5f0f\u6765\u5b9a\u4f4d\u5143\u7d20\u63a7\u4ef6: id\u3001xpath\u3001link text\u3001partial link text\u3001name\u3001tag name\u3001class name\u3001css selector\n\n\u63a8\u8350\u5e38\u7528\u7684\u5de5\u5177\uff0c\u4e00\u822c\u662f Firefox \u6216\u8005 Chrome \u7b49\u6d4f\u89c8\u5668\u7684\u5f00\u53d1\u8005\u5de5\u5177\u3002\u5982\u4e0b\u56fe\uff0c\u4f7f\u7528chrome\u5f00\u53d1\u6a21\u5f0f\uff0c\u91c7\u7528css\u548cxpath\u4e24\u79cd\u65b9\u5f0f\u5b9a\u4f4d\u8f93\u5165\u6846:\n![chrome-deployment-tools.gif](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/chrome-deployment-tools.gif)\n\n\u53e6\u4e00\u4e2a\u5de5\u5177\uff0cselenium IDE\uff0c\u5b98\u65b9\u63a8\u51fa\u7684\u5e26\u6709\u754c\u9762\u7684\u5de5\u5177\n![selenium-ide.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/selenium-ide.png)\n\n\u90a3\u4e48\uff0c\u6211\u4e3a\u4ec0\u4e48\u4e0d\u63a8\u8350\u4f7f\u7528\uff0cSelenium IDE? \u4eceselenium1.0\u5f00\u59cb\uff0cselenium ide\u66fe\u7ecf\u7ed9\u6211\u60ca\u8273\uff0c\u53ef\u4ee5\u5f55\u5236\u3001\u5b9a\u4f4d\u3001\u751f\u6210\u811a\u672c\u7b49\uff0c\u5f88\u4f18\u79c0\uff0c\u4f46\u662fselenium2.0\u540e\uff0c\u518d\u4e5f\u6ca1\u6709\u7528\u4e86\u3002\u4e00\u65b9\u9762\u7531\u4e8e\u662f\u57fa\u4e8e\u65e7\u6280\u672f\u5b9e\u73b0\uff0c\u5728\u706b\u72d055\u53ca\u4e4b\u540e\u7684\u65b0\u7248\u672c\u4e0a\u4e0d\u518d\u652f\u6301\u4e86\uff0c\u867d\u7136\u5f88\u597d\u7528\uff0c\u4f46\u662f\u9000\u51fa\u5386\u53f2\u821e\u53f0\u4e86\uff1b \u53e6\u4e00\u65b9\u9762\uff0cfirefox\u548cchrome\u7b49\u6d4f\u89c8\u5668\uff0cweb\u5f00\u53d1\u5de5\u5177\u529f\u80fd\u5f3a\u5927\uff0c\u5b89\u88c5\u7b80\u5355\uff0c\u5bf9\u5143\u7d20\u7684\u5b9a\u4f4d\u548c\u8c03\u8bd5\u63d0\u4f9b\u4e86\u975e\u5e38\u4fbf\u6377\u7684\u65b9\u5f0f\u3002\n\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- project:\n name: xxx\u7cfb\u7edf\n module: \u767b\u9646\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: web_auto_test_demo\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_title: '\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053'\n\n # \u5b9a\u4e49\u53d8\u91cf\uff0c \u6548\u679c\u540c SetVar(name, value)\n glob_var:\n url1: https://www.baidu.com\n url2: https://www.sina.com\n\n # pre_command \u9009\u586b\n pre_command:\n - ${NavigateTo($url1)}\n # - ${DyStrData(\"title\", re.compile(rex_title))}\n # - ${VerifyTitle($title)}\n\n # steps \u5fc5\u586b\n steps: \n # webdriver \u6d4b\u8bd5web ui \u65f6\u4f7f\u7528\n\n - webdriver:\n action: ${NavigateTo($url2)}\n\n - webdriver:\n action: ${ScrollTo(0, 1000)}\n\n - webdriver:\n action: ${TimeSleep(1)}\n\n - webdriver:\n action: ${Refresh()}\n\n - webdriver:\n action: ${NewTab($url1)}\n\n # \u5728webdriver\u4e2d\uff0c\u8bbe\u7f6e SetControl\u53c2\u6570\uff0c\u5b9a\u4f4d\u5143\u7d20\n - webdriver:\n by: css selector\n value: '#kw'\n index: 0\n timeout: 10\n action: ${SendKeys(123)}\n\n - webdriver:\n action: ${TimeSleep(1)}\n\n # \u76f4\u63a5\u4f7f\u7528 SetControl\u5173\u952e\u5b57\uff0c\u5b9a\u4f4d\u5143\u7d20\n - webdriver:\n action: ${SetControl(by=css selector, value=#kw)}\n\n - webdriver:\n action: ${SendKeys(456)}\n\n - webdriver:\n action: ${SetControl(by=id, value=su)}\n\n - webdriver:\n action: ${DyAttrData(id_su_value, value)}\n\n - webdriver:\n action: ${TimeSleep(1)}\n\n - webdriver:\n action: ${WebClose()} \n\n # post_command \u9009\u586b\n post_command:\n - ${WebQuit()}\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## \u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\n\n1. \u6267\u884c\u524d\uff0c\u6ce8\u610f\u4e0bselenium\u7684\u6267\u884c\u73af\u5883\uff0c rtsf-web\u9650\u5b9a\u4e86\u4e24\u4e2d\u6d4f\u89c8\u5668(chrome\u548cfirefox)\n2. \u8c37\u6b4c\u6d4f\u89c8\u5668\uff0c\u6309\u7167selenium\u7684\u6587\u6863\u4ecb\u7ecd\uff0c\u81ea\u884c\u4e0b\u8f7dchromedriver.exe\u5e76\u914d\u7f6e\n3. \u706b\u72d0\u6d4f\u89c8\u5668\uff0c\u6309\u7167selenium\u7684\u6587\u6863\u4ecb\u7ecd\uff0c\u7248\u672c\u9ad8\u7684\uff0c\u81ea\u884c\u4e0b\u8f7dgeckodriver.exe\u5e76\u914d\u7f6e\n\n> \u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\uff0c\u6709\u4e2a\u547d\u4ee4\uff1a wldriver \u548c wrdriver\n\n### wldriver(web local driver)\u672c\u5730\u6267\u884c\n\u672c\u5730\u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\uff0c\u662f\u6307\u76f4\u63a5\u4f7f\u7528webdriver\u4e2d\u5404\u4e2a\u6d4f\u89c8\u5668\u7684\u9a71\u52a8\uff0c\u6bd4\u5982webdriver.Chrome\u7b49\n\n![wldriver-h.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/wldriver-h.png)\n\n\u67e5\u770b\u5e2e\u52a9: wldriver -h\n\u9009\u586b\uff1a\n- \u8bbe\u7f6e\u6d4f\u89c8\u5668(chrome\u3001firefox),\u9ed8\u8ba4\u662f\u8c37\u6b4c\u6d4f\u89c8\u5668: --browser chrome\n- \u8bbe\u7f6e\u6d4f\u89c8\u5668\u4e0b\u8f7d\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u9ed8\u8ba4\u503c\u662f\u6d4f\u89c8\u5668\u7684\u8bbe\u7f6e: --download-path c:\\downloads\n- \u8bbe\u7f6e\u706b\u72d0\u662f\u5426\u4f7f\u7528geckodriver.exe,\u9ed8\u8ba4\u503c\u662fFalse: --marionette False\n\n```\n# run web local case\nwldriver --browser chrome C:\\f_disk\\BaiduNetdiskDownload\\rtsf-web\\tests\\data\\test_case.yaml\n```\n\n![wldriver-case.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/wldriver-case.png)\n\n\n### wrdriver(web remote driver)\u8fdc\u7a0b\u6267\u884c\uff0c\u5373selnium grid\u5206\u5e03\u5f0f\u6a21\u5f0f\n\u8be5\u6a21\u5f0f\uff0c\u9075\u5faaselnium grid\u8981\u6c42\uff0c\u9700\u8981\u5f00\u542fhub\u548cnode, rtsf-web\u63d0\u4f9b\u4e24\u4e2a\u547d\u4ee4: wrhub\u548cwrnode\n\n#### \u5f00\u542fhub\n\u7b80\u5355\u7406\u89e3\u4e0bhub, \u73a9\u5c40\u57df\u7f51\u6e38\u620f\uff0c\u6211\u4eec\u5148\u8981\u5efa\u7acb\u4e3b\u673a\uff0c\u90a3\u4e48hub\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e3b\u673a\u7684\u6982\u5ff5\n\n![wrhub-command.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/wrhub-command.png)\n\n\u67e5\u770b\u5e2e\u52a9: wrhub -h\n\u9009\u586b\uff1a\n- \u8bbe\u7f6eHUB\u76d1\u542c\u7aef\u53e3,\u9ed8\u8ba4\u662f4444: --port 4444\n- \u6307\u5b9ajava.exe\u8def\u5f84,\u9ed8\u8ba4(\u5df2\u914d\u7f6ejava\u73af\u5883\u53d8\u91cf): --java-path java\n\n```\n# start hub A: 192.168.0.1\nwrhub c:\\selenium-server-standalone-3.14.0.jar --port 4444 --java-path C:\\tmp\\Java\\jdk1.8.0_161\\bin\\java.exe\n```\n\n#### \u5f00\u542fnode\n\u7b80\u5355\u7406\u89e3\u4e0bnode, \u6e38\u620f\u4e3b\u673a\u521b\u5efa\u597d\uff0c\u73a9\u5bb6\u9700\u8981\u52a0\u5165\uff0c\u90a3\u4e48node\u53ef\u4ee5\u7406\u89e3\u4e3a\u52a0\u5165\u4e3b\u673a\u7684\u73a9\u5bb6\n\n![wrnode-command.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/wrnode-command.png)\n\n\u67e5\u770b\u5e2e\u52a9: wrnode -h\n\u9009\u586b\uff1a\n- \u8bbe\u7f6eNODE\u76d1\u542c\u7aef\u53e3,\u9ed8\u8ba4\u662f5555: --port 5555\n- \u6267\u884c\u8fde\u63a5hub\u7684ip,\u9ed8\u8ba4\u662flocalhost: --hub-ip 127.0.0.1\n- \u6267\u884c\u8fde\u63a5hub\u7684,\u9ed8\u8ba4\u662f4444: --hub-port 4444\n- \u6307\u5b9ajava.exe\u8def\u5f84,\u9ed8\u8ba4(\u5df2\u914d\u7f6ejava\u73af\u5883\u53d8\u91cf): --java-path java\n\n```\n# start node B: 192.168.0.1 \u8fd9\u4e2anode\u673a\u5668\u7684ip\u8ddfhub A\u4e00\u6837\uff0c\u4e3b\u673a\u4e5f\u53ef\u4ee5\u662f\u73a9\u5bb6\nwrnode c:\\selenium-server-standalone-3.14.0.jar --port 5555 --hub-ip 192.168.0.1 --hub-port 4444 --java-path C:\\tmp\\Java\\jdk1.8.0_161\\bin\\java.exe\n\n# start node C: 192.168.0.2\nwrnode c:\\selenium-server-standalone-3.14.0.jar --port 5555 --hub-ip 192.168.0.1 --hub-port 4444 --java-path C:\\tmp\\Java\\jdk1.8.0_161\\bin\\java.exe\n```\n\n#### \u6267\u884c\u5206\u5e03\u5f0f\u6d4b\u8bd5\n\u8fdc\u7a0b\u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\uff0c\u4e5f\u5c31\u662fselnium grid\u5206\u5e03\u5f0f\u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\uff0c\u662f\u6307\u4f7f\u7528webdriver.Remote\u9a71\u52a8\u5404\u4e2a\u6d4f\u89c8\u5668\u8fdb\u884c\u6d4b\u8bd5\n\n\u7b80\u5355\u7406\u89e3\u4e0b\uff0c\u521b\u5efa\u4e86\u4e3b\u673a\uff0c\u73a9\u5bb6\u4e5f\u4e0a\u7ebf\u4e86\uff0cwrdriver\u5c06\u6307\u5b9a\u7684\u6e38\u620f\u5f02\u6b65\u53d1\u9001\u7ed9\u8fd9\u4e9b\u73a9\u5bb6\n\n![wrdriver-command.png](https://github.com/RockFeng0/img-folder/blob/master/rtsf-web-img/wrdriver-command.png)\n\n\u67e5\u770b\u5e2e\u52a9: wrdriver -h\n\u9009\u586b\uff1a\n- \u8bbe\u7f6e\u6d4f\u89c8\u5668(chrome\u3001firefox),\u9ed8\u8ba4\u662f\u8c37\u6b4c\u6d4f\u89c8\u5668: --browser chrome\n- \u8bbe\u7f6e\u6d4f\u89c8\u5668\u4e0b\u8f7d\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u9ed8\u8ba4\u503c\u662f\u6d4f\u89c8\u5668\u7684\u8bbe\u7f6e: --download-path c:\\downloads\n- \u8bbe\u7f6e\u706b\u72d0\u662f\u5426\u4f7f\u7528geckodriver.exe,\u9ed8\u8ba4\u503c\u662fFalse: --marionette False\n- \u8bbe\u7f6eHUB IP,\u9ed8\u8ba4\u662flocalhost: --ip 127.0.0.1\n- \u8bbe\u7f6eHUB PORT,\u9ed8\u8ba4\u662f4444: --port 4444\n\n```\n# run web remote case. \u7b80\u5355\u7406\u89e3\uff0c \u5df2\u8fde\u63a5\u4e0a\u4e3b\u673a\u7684\u73a9\u5bb6\uff0c\u4f1a\u63a5\u6536\u5230test_case\u6e38\u620f\nwrdriver C:\\f_disk\\BaiduNetdiskDownload\\rtsf-web\\tests\\data\\test_case.yaml --browser chrome --ip 192.168.0.1 --port 4444\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## \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### \u6d4f\u89c8\u5668\u76f8\u5173\u64cd\u4f5c\n\nWeb functions | \u53c2\u6570\u4ecb\u7ecd | \u63cf\u8ff0\n--------------|----------|-----\nAlertAccept() | |\u70b9\u51fbalert\u5f39\u7a97\u7684Accept(\u786e\u5b9a)\nAlertDismiss() | |\u70b9\u51fbalert\u5f39\u7a97\u7684Dismiss(\u53d6\u6d88)\nAlertSendKeys(value) | |\u5411alert\u5f39\u7a97\u4e2d\u8f93\u5165\u4fe1\u606f\nBack() | |\u6d4f\u89c8\u5668\u540e\u9000\nForward() | |\u6d4f\u89c8\u5668\u524d\u8fdb\nIESkipCertError() | |IE Skip SSL Cert Error\nJs(script) | |\u6d4f\u89c8\u5668\u6267\u884cjs\u811a\u672c\nMaximize() | |\u6d4f\u89c8\u5668\u6700\u5927\u5316\nNavigateTo(url) | |\u6d4f\u89c8\u5668\u6253\u5f00url\nNewTab() | |\u6d4f\u89c8\u5668\u65b0\u5f00\u6807\u7b7e\u9875\uff0c\u5e76\u5c06\u6240\u6709\u7126\u70b9\u6307\u5411\u8be5\u6807\u7b7e\u9875\nPageSource() | |\u5f53\u524d\u9875\u9762\u6e90\u7801\nRefresh() | |\u6d4f\u89c8\u5668\u5237\u65b0\u5f53\u524d\u9875\u9762\nScreenShoot(pic_path)| |\u622a\u56fe\u5f53\u524d\u9875\u9762\uff0c\u5e76\u4e3apic_path\nScrollTo(x,y) | |\u79fb\u52a8\u6eda\u52a8\u6761\u81f3(x,y),\u5982\u4e0b\uff0cX-Y-top : ScrollTo(\u3001,\"0\"); X-bottom: ScrollTo(\"10000\",\"0\");Y-bottom: ScrollTo(\"0\",\"10000\")\nSetWindowSize(width, height)| |\u8bbe\u7f6e\u6d4f\u89c8\u5668\u7a97\u53e3\u5927\u5c0f\nSwitchToAlert() | |\u5207\u6362\u6d4f\u89c8\u5668\u7126\u70b9\u81f3alert\u5f39\u7a97\nSwitchToDefaultFrame() | |\u5207\u6362\u6d4f\u89c8\u5668\u7126\u70b9\u81f3\u9ed8\u8ba4frame\u6846, \u6bd4\u5982\u6253\u5f00\u7684\u9875\u9762\u6709\u591a\u4e2aiframe\u7684\u60c5\u51b5\nSwitchToDefaultWindow() | |\u5207\u6362\u6d4f\u89c8\u5668\u7126\u70b9\u81f3\u9ed8\u8ba4window\u7a97,\u6bd4\u5982\u591a\u4e2a\u6807\u7b7e\u9875\u7a97\u7684\u60c5\u51b5\nSwitchToNewFrame(frame_name)| |\u5207\u6362\u6d4f\u89c8\u5668\u7126\u70b9\u81f3frame_name\u6846\nSwitchToNewWindow() | |\u5207\u6362\u6d4f\u89c8\u5668\u7126\u70b9\u81f3\u65b0window\u7a97\nWebClose() | |\u5173\u95ed\u6d4f\u89c8\u5668\u5f53\u524d\u7a97\u53e3\nWebQuit() | |Quits the driver and closes every associated window.\n\n### \u5143\u7d20\u5b9a\u4f4d\u76f8\u5173\u64cd\u4f5c\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
WebElement methods\u53c2\u6570\u4ecb\u7ecd\u63cf\u8ff0
GetControl() \u83b7\u53d6element controls,\u8fd4\u56de\u5b57\u5178\uff0c\u5982\uff1a{\"by\":None,\"value\":None,\"index\":0,\"timeout\":10}
SetControl(by,value,index,timeout)by: \u6307selenium\u7684\u5bfb\u627e\u5143\u7d20\u7684\u65b9\u5f0f(\"id\", \"xpath\", \"link text\",\"partial link text\",\"name\", \"tag name\", \"class name\", \"css selector\")\uff0c\u9ed8\u8ba4\u4e3aNone\u8bbe\u7f6e\u53d6element controls
value: \u4e0eby\u914d\u5bf9\u4f7f\u7528\uff0c\u76f8\u5e94by\u7684\u503c
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
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\n\n### WebContext methods --> \u7528\u4e8e\u4e0a\u4e0b\u6587\u7ba1\u7406\n```\nDyAttrData(name,attr) # -> \u5c5e\u6027-\u52a8\u6001\u5b58\u50a8\u53d8\u91cf\uff0c\u9002\u7528\u4e8e\uff0c\u4fdd\u5b58UI\u5143\u7d20\u5c5e\u6027\u503c\u3002name-\u53d8\u91cf\u540d\u79f0\uff0cattr\u4e3aUI\u5143\u7d20\u7684\u5c5e\u6027\u540d\u79f0\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nDyJsonData(name,sequence) # -> json-\u52a8\u6001\u5b58\u50a8\u53d8\u91cf\uff0c\u9002\u7528\u4e8e\uff0c\u4fdd\u5b58\u9875\u9762\u8fd4\u56dejson\u4e2d\u7684\u6307\u5b9a\u503c\u3002 name-\u53d8\u91cf\u540d\u79f0\uff0csequence\u662f\u6307\u8bbf\u95eejson\u7684\u5e8f\u5217\u4e32\n \u793a\u4f8b,\u9875\u9762\u8fd4\u56de {\"a\":1,\n \"b\":[1,2,3,4],\n \"c\":{\"d\":5,\"e\":6},\n \"f\":{\"g\":[7,8,9]},\n \"h\":[{\"i\":10,\"j\":11},{\"k\":12}]\n }\n DyJsonData(\"var1\",\"a\") #var1\u503c\u4e3a 1\n DyJsonData(\"var2\",\"b.3\") #var2\u503c\u4e3a 4\n DyJsonData(\"var3\",\"f.g.2\") #var3\u503c\u4e3a 9\n DyJsonData(\"var4\",\"h.0.j\") #var4\u503c\u4e3a 11\nDyStrData(name, regx, index) # -> \u5b57\u7b26\u4e32-\u52a8\u6001\u5b58\u50a8\u53d8\u91cf\uff0c\u9002\u7528\u4e8e\uff0c\u4fdd\u5b58\u9875\u9762html\u4e2d\u6307\u5b9a\u7684\u503c\u3002 name-\u53d8\u91cf\u540d\u79f0\uff0cregx\u5df2\u7f16\u8bd1\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\uff0cindex\u6307\u5b9a\u7d22\u5f15\uff0c\u9ed8\u8ba40\nGetAttribute(attr) # -> \u83b7\u53d6\u5143\u7d20\u6307\u5b9a\u5c5e\u6027\u7684\u503c\uff0c **\u914d\u5408SetControl\u4f7f\u7528**\nGetText() # -> \u83b7\u53d6\u5143\u7d20text\u503c\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nGetVar(name) # -> \u83b7\u53d6\u6307\u5b9a\u53d8\u91cf\u7684\u503c\nSetVar(name,value) # -> \u8bbe\u7f6e\u6307\u5b9a\u53d8\u91cf\u7684\u503c\n```\n\n### WebWait methods --> \u7528\u4e8e\u65f6\u95f4\u7684\u63a7\u5236\n```\nTimeSleep(seconds) # -> \u6307\u5b9a\u7b49\u5f85\u65f6\u95f4(\u79d2\u949f)\nWaitForAppearing() # -> \u7b49\u5f85\u5143\u7d20\u51fa\u73b0(\u53ef\u80fd\u662f\u9690\u85cf\uff0c\u4e0d\u53ef\u89c1\u7684)\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nWaitForDisappearing() # -> \u7b49\u5f85\u5143\u7d20\u6d88\u5931\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nWaitForVisible() # -> \u7b49\u5f85\u5143\u7d20\u53ef\u89c1\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\n```\n\n### WebVerify methods --> \u7528\u4e8e\u9a8c\u8bc1\n```\nVerifyAlertText(text) # -> \u9a8c\u8bc1alert\u5f39\u7a97\uff0c\u5305\u542b\u6587\u672ctext\nVerifyElemAttr(attr_name,expect_value) # -> \u9a8c\u8bc1\u5143\u7d20\u5c5e\u6027attr_name\u7684\u503c\uff0c\u5305\u542b\u503cexpect_value,**\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemCounts(num) # -> \u9a8c\u8bc1\u5143\u7d20\u6570\u91cf\u4e3anum,**\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemEnabled() # -> \u9a8c\u8bc1\u5143\u7d20\u662fenabled\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemInnerHtml(expect_text) # -> \u9a8c\u8bc1\u5143\u7d20innerHtml\u4e2d\uff0c\u5305\u542b\u671f\u671b\u6587\u672c\uff0c **\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemNotEnabled() # -> \u9a8c\u8bc1\u5143\u7d20\u662fNot Enabled, **\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemNotVisible() # -> \u9a8c\u8bc1\u5143\u7d20\u662f\u4e0d\u53ef\u89c1\u7684\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nVerifyElemVisible() # -> \u9a8c\u8bc1\u5143\u7d20\u662f\u53ef\u89c1\u7684\uff0c **\u914d\u5408SetControl\u4f7f\u7528**\nVerifyTitle(title) # -> \u9a8c\u8bc1\u6d4f\u89c8\u5668\u6807\u9898\u4e3atitle\nVerifyURL(url) # -> \u9a8c\u8bc1\u6d4f\u89c8\u5668\u5f53\u524durl\u4e3a\u671f\u671b\u503c\n```\n\n### WebActions methods --> \u7528\u4e8e\u6d4f\u89c8\u5668\u64cd\u4f5c\n```\nAlt(key) # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\u6267\u884calt\u7ec4\u5408\u4e8b\u4ef6\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nBackspace() # -> \u5728\u6307\u5b9a\u8f93\u5165\u6846\u53d1\u9001\u56de\u9000\u952e\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nClick() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\uff0c\u5de6\u952e\u70b9\u51fb 1\u6b21\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nClickAndHold() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\uff0c \u6309\u538bpress\u4f4f\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nCtrl(key) # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\u6267\u884cctrl\u7ec4\u5408\u952e\u4e8b\u4ef6\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nDeSelectByIndex(index) # -> \u901a\u8fc7\u7d22\u5f15\uff0c\u53d6\u6d88\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nDeSelectByText(text) # -> \u901a\u8fc7\u6587\u672c\u503c\uff0c\u53d6\u6d88\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nDeSelectByValue(value) # -> \u901a\u8fc7value\u503c\uff0c\u53d6\u6d88\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nDoubleClick() # -> \u9f20\u6807\u5de6\u952e\u70b9\u51fb2\u6b21\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nEnter() # -> \u5728\u6307\u5b9a\u8f93\u5165\u6846\u53d1\u9001\u56de\u56de\u8f66\u952e,**\u914d\u5408SetControl\u4f7f\u7528**\nEscape() # -> \u5728\u6307\u5b9a\u8f93\u5165\u6846\u53d1\u9001\u56de\u9000\u51fa\u952e,**\u914d\u5408SetControl\u4f7f\u7528**\nFocus() # -> \u5728\u6307\u5b9a\u8f93\u5165\u6846\u53d1\u9001 Null,\u7528\u4e8e\u8bbe\u7f6e\u7126\u70b9\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nMouseOver() # -> \u6307\u5b9a\u5143\u7d20\u4e0a\uff0c\u9f20\u6807\u60ac\u6d6e\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nMoveAndDropTo() # -> \u6682\u4e0d\u652f\u6301\nReleaseClick() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\uff0c\u91ca\u653e\u6309\u538b\u64cd\u4f5c\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nRightClick() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\uff0c\u9f20\u6807\u53f3\u952e\u70b9\u51fb1\u6b21\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nSelectByIndex(index) # -> \u901a\u8fc7\u7d22\u5f15\uff0c\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nSelectByText(text) # -> \u901a\u8fc7\u6587\u672c\u503c\uff0c\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nSelectByValue(value) # -> \u901a\u8fc7value\u503c\uff0c\u9009\u62e9\u4e0b\u62c9\u6846\u9009\u9879\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nSendKeys(value) # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a\uff0c\u8f93\u5165\u6587\u672c\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nSpace() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a,\u53d1\u9001\u7a7a\u683c\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nTab() # -> \u5728\u6307\u5b9a\u5143\u7d20\u4e0a,\u53d1\u9001\u56de\u5236\u8868\u952e\uff0c**\u914d\u5408SetControl\u4f7f\u7528**\nUpload(filename) # -> \u6682\u4e0d\u652f\u6301\u3002\u975e\u539f\u751f\uff0c\u9700\u8981\u7b2c\u4e09\u65b9\u5de5\u5177\nUploadType(file_path) # -> \u4e0a\u4f20\u6587\u4ef6\uff0c\u4ec5\u539f\u751ffile\u6587\u4ef6\u6846, \u5982\uff1a , **\u914d\u5408SetControl\u4f7f\u7528**\n```\n\n\n## \u81ea\u5b9a\u4e49\uff0c\u5173\u952e\u5b57(\u51fd\u6570\u3001\u53d8\u91cf)\n> \u5728case\u540c\u7ea7\u76ee\u5f55\u4e2d\uff0c\u521b\u5efa preference.py, \u8be5\u6587\u4ef6\u6240\u5b9a\u4e49\u7684 \u53d8\u91cf\u3001\u51fd\u6570\uff0c\u53ef\u4ee5\u88ab\u52a8\u6001\u52a0\u8f7d\u548c\u5f15\u7528\n\n\u6267\u884c\u7528\u4f8b\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u4f7f\u7528 \u53d8\u91cf\u5f15\u7528 \u6216\u8005\u5173\u952e\u5b57\u5f15\u7528\u7684\u65b9\u6cd5\uff0c\u8c03\u7528\uff0c\u81ea\u5b9a\u4e49\u7684\u51fd\u6570\u548c\u53d8\u91cf\n\n```\n# preference.py \u793a\u4f8b\n\ntest_var = \"hello rtsf.\"\ndef test_func():\n return \"nihao rtsf.\"\n\n```\n\n\n\n\n\n\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/RockFeng0/rtsf-web", "keywords": "test web ui", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "rtsf-web", "package_url": "https://pypi.org/project/rtsf-web/", "platform": "", "project_url": "https://pypi.org/project/rtsf-web/", "project_urls": { "Homepage": "https://github.com/RockFeng0/rtsf-web" }, "release_url": "https://pypi.org/project/rtsf-web/1.2.1/", "requires_dist": [ "selenium", "requests", "rtsf" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "summary": "only for web ui test, base on rtsf", "version": "1.2.1" }, "last_serial": 4448711, "releases": { "1.1": [ { "comment_text": "", "digests": { "md5": "d6a0f1e9bd576659840ecb4850c8b3e5", "sha256": "c573874b07edbc05c5edb82477e6e04e8e50c0b2c32ba5f861c77699ab7b010c" }, "downloads": -1, "filename": "rtsf_web-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d6a0f1e9bd576659840ecb4850c8b3e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 14455, "upload_time": "2018-10-14T12:05:54", "url": "https://files.pythonhosted.org/packages/f7/cf/ae51a881e8f1acb89c7874ba6e5e885095a785765cea8f960a7d0150c49d/rtsf_web-1.1-py3-none-any.whl" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "a24c46231c23ddffcb959893d29cb546", "sha256": "24e7c0812ac01129b7d33bd5d26d5cf45207fefd4a4bbd60e21acecc28cb5295" }, "downloads": -1, "filename": "rtsf_web-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a24c46231c23ddffcb959893d29cb546", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 20627, "upload_time": "2018-11-04T02:24:34", "url": "https://files.pythonhosted.org/packages/a4/c0/44503984bf10dde6533a67b0b19613516ba436ae2c8200b65d02c65367ec/rtsf_web-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0d86c7edd432f52c052c589395a6d67", "sha256": "f6e2dd76b917e6bc346b77f1ec3bfbeb5fbc59e61c01dec3d3ecda677cc059a6" }, "downloads": -1, "filename": "rtsf-web-1.2.1.tar.gz", "has_sig": false, "md5_digest": "e0d86c7edd432f52c052c589395a6d67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 20547, "upload_time": "2018-11-04T02:24:36", "url": "https://files.pythonhosted.org/packages/4d/f3/4e1b3e72163e2038af32ebc9b475c270a7f0b36b81dcb8b187036c2b77f2/rtsf-web-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a24c46231c23ddffcb959893d29cb546", "sha256": "24e7c0812ac01129b7d33bd5d26d5cf45207fefd4a4bbd60e21acecc28cb5295" }, "downloads": -1, "filename": "rtsf_web-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a24c46231c23ddffcb959893d29cb546", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 20627, "upload_time": "2018-11-04T02:24:34", "url": "https://files.pythonhosted.org/packages/a4/c0/44503984bf10dde6533a67b0b19613516ba436ae2c8200b65d02c65367ec/rtsf_web-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0d86c7edd432f52c052c589395a6d67", "sha256": "f6e2dd76b917e6bc346b77f1ec3bfbeb5fbc59e61c01dec3d3ecda677cc059a6" }, "downloads": -1, "filename": "rtsf-web-1.2.1.tar.gz", "has_sig": false, "md5_digest": "e0d86c7edd432f52c052c589395a6d67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 20547, "upload_time": "2018-11-04T02:24:36", "url": "https://files.pythonhosted.org/packages/4d/f3/4e1b3e72163e2038af32ebc9b475c270a7f0b36b81dcb8b187036c2b77f2/rtsf-web-1.2.1.tar.gz" } ] }