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真是坑~~

posted on 2018-01-22 15:07  _Noodles  阅读(459)  评论(0编辑  收藏  举报