mac上安装的是较新的Appium版本,在跑之前写的Android UI 自动化代码时报错:AttributeError: 'dict' object has no attribute 'to_capabilities'。
查了一下资料,这是因为较新的 Selenium 和 Appium 版本要求使用 Options 类来定义能力,而不是直接使用字典。
【解决方法】
需要将字典形式的 android_opts 转换为 Options 实例。修改方法:
1、引入正确的 Options 类
确保导入了 Appium 提供的 UiAutomator2Options 的 Options 类:
from appium.options.android import UiAutomator2Options
2、转换字典为 Options
在创建驱动的函数中,将 android_opts 转换为 UiAutomator2Options 实例:
def create_android_driver(android_opts=None):
# 创建对象
options = UiAutomator2Options()
if custom_opts is not None:
options.load_capabilities(android_opts)
return webdriver.Remote(f'http://{APPIUM_HOST}:{APPIUM_PORT}', options=options)
这样不在报错,驱动创建成功。
【总结】
在新的 Appium 客户端库中(appium-python-client),caps 参数由 Options 类来管理,不在直接传递字典。如果使用的是较旧的方式,就可能出现这个错误,AttributeError: 'dict' object has no attribute 'to_capabilities'。