python appium android_uiautomator 遇到的坑及其笔记

本文详细介绍了使用 Appium 1.8 版本进行移动应用自动化测试时,各种元素定位的方法及注意事项,特别是针对 uiautomator 的不同定位策略进行了深入探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记

升级到了1.8.0之后 一直在维护web(selenium) 搁浅了一段时间,差不多稳定了 现在开始写appium 现在因该好写 坑都被大佬们填完了,进入主题

appium 1.8 支持的格式如下图 就那么几个 导致不太兼容 经典版本appium的定位方式

所以现在用最快捷、最高效的定位方式来解决


首先要了解下 uiautomator 的查找元素的方式

# resourceId 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("%s")')
# text 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().text("%s")')
# description 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().description("%s")')
# className 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().className("%s")')
# index 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().index("%s")')
# className + index 方式
self.driver.find_element_by_android_uiautomator('new UiSelector().className("%s").childSelector(new UiSelector().index("%d"))')
# 伪xpath方法定位
self.driver.find_element_by_android_uiautomator('new UiSelector().text("Custom View").fromParent(new UiSelector().text("Accessibility Service"))').click()
self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.ListView").childSelector(new UiSelector().text("Custom View"))').click()



遇到的坑

1、双引号

get_element(driver, ('ANDROID_UIAUTOMATOR', 'new UiSelector().resourceId("com.zld.zld_face_rec_app:id/et_name")')).send_keys(username)

上面这个是正确的

get_element(driver, ('ANDROID_UIAUTOMATOR', "new UiSelector().resourceId('com.zld.zld_face_rec_app:id/et_name')")).send_keys(username)

这个就是错误的 

真特么的惊喜 双引号的位置不一致就会引起error


通过 `Appium-Python-Client` 的 `AppiumBy.ANDROID_UIAUTOMATOR` 定位方式,可以使用 Android 原生的 UI Automator 来查找元素。如果你希望通过 Accessibility 属性(例如 accessibility id 或者 content-desc)来定位某个控件,可以通过以下步骤实现。 以下是具体的说明: ### 步骤 1. **导入必要的模块** 确保已安装并引入了 Appium Python Client,并且在脚本中正确配置了驱动程序 (`webdriver`)。 2. **使用 ANDROID_UIAUTOMATOR 进行定位** 可以利用 `UiSelector` 提供的功能对页面元素进行筛选和匹配。对于 ACCESSIBILITY_ID (通常对应于 `content-desc`),你可以直接指定该值作为选择条件。 #### 示例代码 ```python from appium.webdriver.common.appiumby import AppiumBy # 根据内容描述(accessibility id / content-desc) element = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().description("目标AccessibilityID")') # 如果需要点击此元素,则可以直接调用 click() 方法: element.click() ``` 在这个例子中,“目标AccessibilityID”替换为你实际应用中的无障碍标识符字符串即可完成定位操作。 --- ### 注意事项 - 当前仅适用于Android平台; - 需要在设计UI界面的时候设置好每个控件对应的Content Description字段才能正常使用这种方法去访问特定组件; 如果希望更简便地基于可读性强的方式获取节点数据,也可以考虑直接采用 `AppiumBy.ACCESSIBILITY_ID`, 虽然两者最终效果类似但在语法上有所区别: 简化版示例(推荐): ```python from appium.webdriver.common.appiumby import AppiumBy element = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "目标AccessibilityID") element.click() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值