执行Appium测试脚本时出现AttributeError: can't set attribute错误求助
Appium脚本执行报错:AttributeError: can't set attribute
执行以下Appium自动化测试脚本时触发错误,已确认Appium Server已启动:
import time import ScrollUtil from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['deviceName'] = 'Android' desired_caps['appPackage'] = 'com.samsung.android.dialer' desired_caps['appActivity'] = 'com.samsung.android.dialer.DialtactsActivity' driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.implicitly_wait(10) ScrollUtil.swipeUp(4,driver) ScrollUtil.swipeDown(4,driver) # driver.find_element_by_android_uiautomator( # 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains("Akash").instance(0))').click() time.sleep(2) driver.quit()
报错信息
self.capabilities = response.get('value')
AttributeError: can't set attribute

解决方法
这个错误大多是Appium Python客户端与Selenium版本不兼容导致——新版Selenium将capabilities设为只读属性,旧版Appium客户端仍尝试修改该属性。
调整依赖版本:
要么降级Selenium到4.3.0及以下版本,要么升级Appium Python客户端至最新兼容版本,执行对应命令:# 降级Selenium pip uninstall selenium -y pip install selenium==4.3.0 # 或升级Appium客户端 pip install --upgrade Appium-Python-Client改用Options对象初始化Driver:
针对新版Selenium,推荐使用UiAutomator2Options替代传统desired_caps传参,示例代码如下:import time import ScrollUtil from appium import webdriver from appium.options.android import UiAutomator2Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = UiAutomator2Options() options.platform_name = 'Android' options.device_name = 'Android' options.app_package = 'com.samsung.android.dialer' options.app_activity = 'com.samsung.android.dialer.DialtactsActivity' driver = webdriver.Remote('http://localhost:4723/wd/hub', options=options) driver.implicitly_wait(10) ScrollUtil.swipeUp(4,driver) ScrollUtil.swipeDown(4,driver) time.sleep(2) driver.quit()检查ScrollUtil模块:
确保自定义的ScrollUtil模块未调用已废弃的Selenium/Appium属性或方法,避免引发额外兼容性问题。
内容的提问来源于stack exchange,提问作者pplhung
相关产品推荐
相关产品推荐

