Appium报错:AttributeError 'NoneType'对象无'to_capabilities'属性
原测试代码
from appium import webdriver desired_capabilities = { 'uuid':'emulator-5554', 'platformName': 'Android', 'deviceName': 'LDPlayer', 'appPackage': 'com.ldmnq.launcher3', 'appActivity': 'com.android.launcher3.Launcher', 'automationName': 'UiAutomator2', } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities) driver.quit()
触发的报错信息
错误:Exception has occurred: AttributeError 'NoneType' object has no
attribute 'to_capabilities'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'to_capabilities'Exception has occurred: AttributeError 'NoneType' object has no
attribute 'to_capabilities' File "", line 13, in
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'to_capabilities'
解决方法
这个报错是因为你使用的Appium Python Client版本为2.x及以上,该版本不再支持直接将字典格式的desired_capabilities传给webdriver.Remote,必须用对应平台的Options类封装配置。具体修正步骤如下:
- 导入Android平台对应的
UiAutomator2Options类 - 用
load_capabilities方法加载原有的配置字典 - 将封装好的options对象传给
webdriver.Remote
修正后的代码
from appium import webdriver from appium.options.android import UiAutomator2Options desired_capabilities = { 'uuid':'emulator-5554', 'platformName': 'Android', 'deviceName': 'LDPlayer', 'appPackage': 'com.ldmnq.launcher3', 'appActivity': 'com.android.launcher3.Launcher', 'automationName': 'UiAutomator2', } # 用UiAutomator2Options封装配置 options = UiAutomator2Options().load_capabilities(desired_capabilities) # 传递options参数给Remote driver = webdriver.Remote('http://localhost:4723/wd/hub', options=options) driver.quit()
如果坚持要用旧版写法,可以将Appium Python Client降级到1.x版本,执行命令:
pip install Appium-Python-Client==1.3.0
但更推荐使用2.x版本的标准写法,适配后续Appium生态的更新。
内容的提问来源于stack exchange,提问作者khangdz

