Selenium中已弃用find_element_by_android_uiautomator()的替代方案
问题结论
存在可直接使用的合规替代方案,迁移成本为0,不需要修改原有UIAutomator定位表达式即可完成替换。
具体替换方案
Selenium及配套Appium安卓自动化框架废弃各独立的find_element_by_xxx系列方法后,统一采用通用find_element()/find_elements()方法传入定位类型+定位表达式的形式实现元素查找,针对原安卓UIAutomator定位场景的替换规则如下:
- 定位类型使用
AppiumBy.ANDROID_UIAUTOMATOR(新版Appium客户端推荐),旧版本客户端可使用MobileBy.ANDROID_UIAUTOMATOR - 定位表达式和旧方法入参完全一致,原有写好的UiSelector等语句不需要做任何调整
代码示例
已弃用的旧写法
# 该方法已被标记弃用,不建议继续使用 element = driver.find_element_by_android_uiautomator('new UiSelector().text("登录")') elements = driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.Button")')
合规新写法
# 先导入新版定位类 from appium.webdriver.common.appiumby import AppiumBy # 单元素查找,和旧方法逻辑完全一致 element = driver.find_element(by=AppiumBy.ANDROID_UIAUTOMATOR, value='new UiSelector().text("登录")') # 多元素查找 elements = driver.find_elements(by=AppiumBy.ANDROID_UIAUTOMATOR, value='new UiSelector().className("android.widget.Button")')
注意事项
- 如果你使用的是2.0版本之前的旧版Appium Python客户端,可暂时使用
MobileBy类,导入路径为from appium.webdriver.common.mobileby import MobileBy,参数传入MobileBy.ANDROID_UIAUTOMATOR即可,但长期维护建议升级客户端版本使用AppiumBy - 该替换仅调整方法调用形式,底层定位逻辑、元素匹配规则和旧弃用方法完全一致,不存在兼容性差异
内容的提问来源于stack exchange,提问作者Hubert
相关产品推荐
相关产品推荐

