You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Appium Python脚本时出现AttributeError: 'NoneType'无to_capabilities属性

Appium脚本执行报错:AttributeError: 'NoneType' object has no attribute 'to_capabilities'

问题详情

使用Appium官网提供的示例Python脚本,已安装所有依赖且Appium服务器正常运行,但执行时触发如下错误:

C:\Users\syeda\Desktop>python test.py
E
======================================================================
ERROR: test_find_battery (__main__.TestAppium.test_find_battery)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\syeda\Desktop\test.py", line 19, in setUp
    self.driver = webdriver.Remote(appium_server_url, capabilities)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\syeda\AppData\Local\Programs\Python\Python311\Lib\site-packages\appium\webdriver\webdriver.py", line 229, in __init__
    super().__init__(
  File "C:\Users\syeda\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 185, in __init__
    capabilities = options.to_capabilities()
                   ^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'to_capabilities'

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

报错原因

这个错误是因为新版本的Appium Python客户端(v3.x及以上)与Selenium 4.x的API兼容要求变化:不再支持直接将capabilities字典作为第二个参数传给webdriver.Remote,需要使用对应自动化引擎的Options类来配置能力。

解决办法

1. 确保依赖版本兼容(可选但推荐)

先检查当前安装的包版本,确保Appium Python客户端和Selenium版本匹配:

pip list | findstr /i "appium-python-client selenium"

如果版本较低,执行升级命令:

pip install --upgrade appium-python-client selenium

2. 修改脚本代码,使用Options类配置Capabilities

将原来的capabilities字典替换为UiAutomator2Options实例,调整后的完整代码如下:

import unittest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.options.android import UiAutomator2Options

# 用Options类加载capabilities
capabilities = dict(
    platformName='Android',
    automationName='uiautomator2',
    deviceName='Samsung S9',
    appPackage='com.android.settings',
    appActivity='.Settings',
    language='en',
    locale='US'
)

options = UiAutomator2Options().load_capabilities(capabilities)
appium_server_url = 'http://localhost:4723'

class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        # 把options传给Remote,而不是直接传capabilities字典
        self.driver = webdriver.Remote(appium_server_url, options=options)

    def tearDown(self) -> None:
        if self.driver:
            self.driver.quit()

    def test_find_battery(self) -> None:
        el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
        el.click()

if __name__ == '__main__':
    unittest.main()

修改说明

  • 新增导入UiAutomator2Options类,对应Android平台的uiautomator2自动化引擎
  • 通过load_capabilities()方法将原有的capabilities字典加载到Options实例中
  • 调用webdriver.Remote时,通过options参数传入配置好的Options实例,而非直接传capabilities字典

内容的提问来源于stack exchange,提问作者Syed Aawaiz Ashraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:31