cnpm安装appium失败,提示The capabilities argument was not valid for the following reason(s): "capabilities" must be a JSON object. Called deleteSession but bootstrap wasn't active
用appium启动chrome报错,先把报错信息贴出来吧。
IDE里报错:
Traceback (most recent call last): File "D:/code/python/H5Test/launch.py", line 21, in <module> launch() File "D:/code/python/H5Test/launch.py", line 15, in launch driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) File "C:\Python27\lib\site-packages\appium\webdriver\webdriver.py", line 36, in __init__ super(WebDriver, self).__init__(command_executor, desired_capabilities, browser_profile, proxy, keep_alive) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 151, in __init__ self.start_session(desired_capabilities, browser_profile) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 240, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute self.error_handler.check_response(response) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 165, in check_response raise exception_class(value) selenium.common.exceptions.WebDriverException: Message: The capabilities argument was not valid for the following reason(s): "capabilities" must be a JSON object.
appium服务器里报错:
[Appium] Welcome to Appium v1.6.5 [Appium] Appium REST http interface listener started on 0.0.0.0:4723 [HTTP] --> POST /wd/hub/session {"capabilities":{"alwaysMatch":{"browserName":"Chrome","platformName":"Android"},"firstMatch":[{}]},"desiredCapabilities":{"deviceName":"WOMN5SROTKQC9PKF","unicodeKeyboard":"True","browserName":"Chrome","resetKeyboard":"True","platformVersion":"7.1.1","platformName":"Android"}} [debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{"deviceName":"WOMN5SROTKQC9PKF","unicodeKeyboard":"True","browserName":"Chrome","resetKeyboard":"True","platformVersion":"7.1.1","platformName":"Android"},null,{"alwaysMatch":{"browserName":"Chrome","platformName":"Android"},"firstMatch":[{}]}] [debug] [BaseDriver] Event 'newSessionRequested' logged at 1516603722023 (14:48:42 GMT+0800 (中国标准时间)) [Appium] Creating new AndroidDriver (v1.37.2) session [Appium] Capabilities: [Appium] deviceName: 'WOMN5SROTKQC9PKF' [Appium] unicodeKeyboard: 'True' [Appium] browserName: 'Chrome' [Appium] resetKeyboard: 'True' [Appium] platformVersion: '7.1.1' [Appium] platformName: 'Android' [debug] [AndroidDriver] Shutting down Android driver [debug] [AndroidDriver] Called deleteSession but bootstrap wasn't active [HTTP] <-- POST /wd/hub/session 400 17 ms - 106
之前一篇写过appium1.6.5的安装文档,后面有些人说按照文档种无法安装成功,报错信息如上。
因为我之前一直都是用cnpm的方式安装的appium,且每次都能成功安装,所以一开始面对这个问题也是一头雾水。明明定义得字典,非要报错说不是一个json格式,真的有毛病。贴一下启动chrome的代码。
def launch(): desired_caps={} desired_caps['platformName']='Android' desired_caps['platformVersion']='7.1.1' desired_caps['deviceName'] = 'WOMN5SROTKQC9PKF' desired_caps['browserName'] = 'Chrome' desired_caps['unicodeKeyboard'] = 'True' desired_caps['resetKeyboard'] = 'True' driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) driver.get('https://m.baidu.com') sleep(10) driver.quit()
后来在本机多次尝试时发现现在用cnpm安装时会报错,但安装完成后运行appium-doctor和启动appium的时候都不会报错,所以不看着整个安装过程是无法发现这个问题的。问题的本质就是用的cnpm安装方式是通过taobao代理去下载的网络镜像。安装命令为:
npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm install -g appium@1.6.5
这种方式安装由于国内代理的不稳定会造成cnpm安装的是一个残缺版的appium,所以会报错。没找到原因时真的一头雾水啊。解决办法就是老老实实用FQvpn然后用npm官网去下载,或者去下载桌面版,才发现现在桌面版也更新很快了,而且用起也方便。给个下载链接:网络好的可以去下载,网络不好的就自己在网盘上找吧。https://github.com/appium/appium-desktop/releases/tag/v1.3.1
虽然是个很简单的问题,但是记录一下为解决时尝试的一些无用功。
1.更换手机,检查电脑硬件设备,重启电脑。
2.查看appium日志,查看appium源码。
3.用racaw抓本地包,用wireshark分析
总结:还是得盯着安装过程,cnpm真是坑~~