Macaca是一套面向用戶端軟件的測試解決方案,提供了自動化驅動,周邊工具,集成方案,旨在解決終端
上的測試、自動化、性能等方面的問題,不少人選擇它的緣由簡單:輕量化(相比於appium),跨平臺(windows,android,ios),持續集成的reliable(Reliable 是 Node.js 實現的分佈式持續集成服務) ,元素查看app-inspector,支持用例錄製的uirecorder;等等css
安裝完上面的命令,基本上Mcaca+python的環境已經搭建好了;若是是須要進行移動測試,安卓還須要安卓SDK;見我下面這張大圖;html
C:\Users\Administrator>macaca server --verbose >> index.js:17:12 [master] pid:7848 webdriver server start with config: { port: 3456, verbose: true, always: true, ip: '172.27.35.1', host: 'USER-6IG90K3098', loaded_time: '2017-02-08 15:43:03' } >> middlewares.js:17:10 [master] pid:7848 base middlewares attached >> router.js:127:10 [master] pid:7848 router set >> webdriver sdk launched
C:\Users\Administrator>d: D:\>cd D:\zsfile\macaca-test-sample-python-master\tests D:\zsfile\macaca-test-sample-python-master\tests>python baidu.py C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53248, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53251, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53252, 0, 0), raddr=('::1', 3 456, 0, 0)> .C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: ResourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, type=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53258, 0, 0), raddr=('::1', 3456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53259, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53265, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53266, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53284, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53285, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53286, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53287, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53292, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=292, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53293, 0, 0), raddr=('::1', 3 456, 0, 0)> C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: R esourceWarning: unclosed <socket.socket fd=180, family=AddressFamily.AF_INET6, t ype=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53294, 0, 0), raddr=('::1', 3 456, 0, 0)> .C:\Python35\lib\site-packages\wd-0.1.5-py3.5.egg\macaca\remote_invoker.py:110: ResourceWarning: unclosed <socket.socket fd=196, family=AddressFamily.AF_INET6, type=SocketKind.SOCK_STREAM, proto=0, laddr=('::1', 53295, 0, 0), raddr=('::1', 3456, 0, 0)> ---------------------------------------------------------------------- Ran 2 tests in 14.592s OK
執行成功如上圖;node
# coding=utf-8 import unittest import time from macaca import WebDriver from macaca import WebElement desired_caps = { 'platformName': 'desktop', 'browserName': 'electron' } server_url = { 'hostname': 'localhost', 'port': 3456 } class MacacaTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = WebDriver(desired_caps, server_url) cls.driver.init() @classmethod def tearDownClass(cls): cls.driver.quit() def test_get_url(self): self.driver.set_window_size(1280, 800) self.driver.get("https://www.baidu.com") def test_search_macaca(self): self.driver.element_by_id('kw').send_keys('macaca') self.driver.element_by_id('su').click() time.sleep(5) html = self.driver.source self.assertTrue('macaca'in html) self.assertTrue(self.driver.element_by_css_selector_if_exists( '#head>div.head_wrapper')) self.driver.element_by_xpath_or_none( '//*[@id="kw"]').send_keys('elementByXPath') self.driver.element_by_id('su').click() self.driver.take_screenshot() if __name__ == '__main__': unittest.main()
基本上桌面上的就是這樣了;android和ios後續再跟上;python