使用Selenium 4.10与Appium时遇TypeError:WebDriver含意外参数desired_capabilities
问题分析与解决
错误本质
这是Appium Python客户端与Selenium 4.10+版本不兼容引发的问题,不属于原生Python语法错误。
错误信息:
HOOK-ERROR in before_scenario: TypeError: WebDriver.__init__() got an unexpected keyword argument 'desired_capabilities'
原因
Selenium 4.10.0对webdriver.Remote的初始化参数做了重大调整:不再支持直接传入desired_capabilities参数,转而要求使用options参数传递配置。而你当前使用的Appium-Python-Client 2.10.1版本,内部仍在沿用旧的Selenium调用逻辑,导致参数不匹配报错。
解决方案
1. 升级Appium Python客户端
将Appium-Python-Client升级到支持Selenium 4.10+的版本(最低要求2.11.0,建议直接安装最新稳定版):
pip install --upgrade Appium-Python-Client
2. 调整Driver初始化代码(推荐规范写法)
改用AppiumOptions来封装capabilities,适配Selenium新的参数要求:
from appium.options.android import UiAutomator2Options capabilities = { "platformName": "Android", "appium:platformVersion": "11.0", "appium:deviceName": "emulator-5554", "appium:app": "/Users/faithberroya/Downloads/test.apk", "appium:automationName": "UiAutomator2", "appium:appPackage": "com.test.school.assignment.rc", "appium:appActivity": "com.test.school.assignment.ui.SplashActivity" } # 用AppiumOptions封装capabilities options = UiAutomator2Options().load_capabilities(capabilities) # 初始化driver context.driver = webdriver.Remote("http://0.0.0.0:4723/wd/hub", options=options) context.driver.implicitly_wait(20) context.app = Application(context.driver)
补充说明
你代码中targetOS = self.driver.capabilities['platformName']的写法本身没有问题,只要Driver正常初始化,就能正确获取到platformName参数。
内容的提问来源于stack exchange,提问作者Faith Berroya
相关产品推荐
相关产品推荐

