Appium 3.x实战:批量定位元素新写法详解
Appium 3.x 实战笔记定位一组元素find_elements新版写法与示例适配Python Client 5.x前言本文为Appium移动端自动化学习笔记针对Appium 3.x Appium-Python-Client 5.x版本梳理如何一次性定位多个元素的标准写法。在自动化测试中经常需要获取某一类元素如列表项、同一ID的控件集合并批量操作。老版本客户端中driver.find_elements_by_id()等写法已被彻底移除新版统一使用driver.find_elements(By.XXX, 定位值)。本文以系统设置APP为例演示三种常用定位方式ID、CLASS、XPATH获取一组元素并打印其文字所有代码均基于雷电9安卓9环境实操验证适合新手快速掌握。本文为个人原创学习笔记发布于CSDN仅作技术交流Appium遵循Apache 2.0开源协议。一、定位一组元素的核心语法功能说明find_elements返回所有符合条件的元素列表类型为list。与find_element不同的是find_element找不到元素会直接抛出NoSuchElementException异常。find_elements找不到匹配元素时返回空列表不会报错程序可安全继续执行。新版正确写法fromappium.webdriver.common.appiumbyimportBy# 统一格式注意是 find_elements多了个 s元素列表driver.find_elements(By.XXX,定位值)常用定位方式速查定位方式By 常量示例通过ID批量定位By.IDdriver.find_elements(By.ID, com.android.settings:id/title)通过CLASS批量定位By.CLASS_NAMEdriver.find_elements(By.CLASS_NAME, android.widget.TextView)通过XPATH批量定位By.XPATHdriver.find_elements(By.XPATH, //*[contains(text,设)])二、完整示例代码批量获取文字以下代码打开系统设置分别使用ID、CLASS、XPATH三种方式定位一组元素并将每个元素的文字内容打印出来最后关闭APP。importtimefromappiumimportwebdriverfromappium.options.commonimportAppiumOptionsfromappium.webdriver.common.appiumbyimportBy# 配置参数caps{platformName:Android,appium:platformVersion:9,appium:deviceName:25102RKBEC,appium:automationName:UiAutomator2,appium:appPackage:com.android.settings,appium:appActivity:com.android.settings.Settings,appium:noReset:True,}# 创建驱动连接AppiumoptionsAppiumOptions()options.load_capabilities(caps)driverwebdriver.Remote(http://127.0.0.1:4723,optionsoptions)# ① 使用ID定位获取所有 resource-id 为 android:id/title 的元素并打印其文字forelemindriver.find_elements(By.ID,android:id/title):print(elem.text)print(_______*_______)# ② 使用CLASS定位获取所有 class 为 android.widget.TextView 的元素并打印其文字forelemindriver.find_elements(By.CLASS_NAME,android.widget.TextView):print(elem.text)print(_______*_______)# ③ 使用XPATH定位获取所有 text 包含 设 的元素并打印其文字forelemindriver.find_elements(By.XPATH,//*[contains(text,设)]):print(elem.text)print(_______*_______)# ④ 等待3秒关闭APPtime.sleep(3)driver.execute_script(mobile: terminateApp,{appId:com.android.settings})driver.quit()输出结果示例雷电9系统设置首页网络和互联网 已连接的设备 应用和通知 电池 显示 声音 存储 ... _______*_______ 设置 在设置中搜索 网络和互联网 WLAN、移动网络、流量使用 已连接的设备 蓝牙 应用和通知 权限、默认应用 电池 100% 显示 壁纸、休眠、字体大小 声音 音量、振动、勿扰 存储 已使用 27% - 还剩 23.32 GB _______*_______ 设置 在设置中搜索观察输出可知ID定位到的通常是主要菜单项标题CLASS定位出的范围更广包含所有TextViewXPATH定位出所有包含“设”字的元素如“设置”“在设置中搜索”。三、新旧API对照表复习速查老版本直接写法已失效新版标准写法备注driver.find_elements_by_id(xxx)driver.find_elements(By.ID, xxx)批量ID定位driver.find_elements_by_accessibility_id(xxx)driver.find_elements(By.ACCESSIBILITY_ID, xxx)批量无障碍描述定位driver.find_elements_by_class_name(xxx)driver.find_elements(By.CLASS_NAME, xxx)批量类名定位driver.find_elements_by_xpath(xxx)driver.find_elements(By.XPATH, xxx)批量XPath定位核心变化所有find_elements_by_前缀的方法已被移除必须改为find_elements(By.XXX, 值)注意find_elements后面的s不可省略。四、新手避坑总结区分 find_element 与 find_elements找单个元素用find_element返回单个元素对象找不到则直接报错。找一组元素用find_elements返回列表找不到返回空列表不会报错。千万不要把find_element当成返回多个元素用否则只会返回第一个。列表为空时的处理遍历前最好判断长度避免对空列表做无用操作elemsdriver.find_elements(By.ID,某个ID)ifelems:foreinelems:print(e.text)else:print(未找到任何元素)text属性可能为空某些元素虽然定位到了但若没有显示文字例如图片、容器text属性会返回空字符串。打印时不会报错但结果可能不是你想要的需在逻辑中加以区分。ID定位注意资源前缀安卓系统元素的ID通常以android:id/开头应用自身元素则带包名如com.android.settings:id/。使用find_elements(By.ID, android:id/title)可以跨应用抓取系统标题但要注意作用域。建议优先使用完整的resource-id以提升精确度。XPath contains 是批量匹配的利器当元素 text 并不完全固定时可以用contains(text, 关键字)模糊匹配这在多语言或动态文本场景中非常实用。五、练习与扩展掌握了单个元素与一组元素的定位后可以尝试以下练习获取当前页面所有可点击元素的 text并存到列表。批量点击某一类按钮如所有开关控件实现批量设置。结合WebDriverWait等待一组元素出现后再进行操作。版权与参考说明本文为个人原创学习笔记所有代码与案例均为实操整理发布于CSDN仅作技术交流Appium 为开源自动化测试框架遵循 Apache 2.0 开源协议引用其官方规范仅作学习说明参考资料Appium 官方文档。

相关新闻

latex行间距+列宽

latex行间距+列宽

2026/7/23 13:13:21 阅读更多 →
2026大庆GEO优化服务商盘点:10家优质机构优势与适配解析

2026大庆GEO优化服务商盘点:10家优质机构优势与适配解析

随着AI技术全面普及,生成式搜索彻底颠覆了传统网络营销逻辑。GEO(生成式引擎优化)凭借权威信源搭建、语义结构化优化、多AI模型适配等核心能力,成为企业解决品牌AI隐身、信息失真、曝光不足等痛点,提升品牌知名度、获取…

2026/7/20 21:05:37 阅读更多 →
Perforce IPLM 对比 Cliosoft:IP 生命周期管理工具选型指南与核心差异解析

Perforce IPLM 对比 Cliosoft:IP 生命周期管理工具选型指南与核心差异解析

随着半导体与 SoC 设计复杂度的指数级增长,传统的单服务器数据管理(DM)与 IP 生命周期工具在应对跨地域的大规模协同以及千万级文件的工作区构建时,逐渐暴露出性能瓶颈与 IP 资产合规盲区。 本文由龙智(Dragonsoft&…

2026/7/22 19:32:40 阅读更多 →

最新新闻

Channel Link II SerDes实战:如何用自动去斜与预加重提升高速串行链路鲁棒性

Channel Link II SerDes实战:如何用自动去斜与预加重提升高速串行链路鲁棒性

1. 项目概述与核心价值在工业成像、机器视觉或者高端显示系统的硬件设计里,我们工程师最头疼的问题之一,就是如何把海量的并行数据(比如24位、32位甚至更宽的图像数据流)稳定、可靠地传输到几米甚至十几米开外的处理单元。早年大家…

2026/7/23 13:13:24 阅读更多 →
重点研发计划项目答辩PPT设计美化润色|逻辑梳理+视觉美化一站式设计

重点研发计划项目答辩PPT设计美化润色|逻辑梳理+视觉美化一站式设计

重点研发计划申报冲刺阶段❗ 答辩 PPT 作为项目展示核心载体 逻辑混乱、画面杂乱、重点不突出 极易错失评审好感 我们专注重点研发计划答辩 PPT 定制设计 ✅梳理项目整体逻辑框架,贴合申报指南要求 ✅突出创新点、研究方案、预期成果、可行性分析 ✅科研风可视化图表…

2026/7/23 13:13:24 阅读更多 →
TM4C123BH6ZRB引脚复用实战:从AFSEL/PCTL到ADC/PWM配置

TM4C123BH6ZRB引脚复用实战:从AFSEL/PCTL到ADC/PWM配置

1. 项目概述:从引脚表到设计蓝图 对于任何一位嵌入式开发者而言,拿到一款新的微控制器(MCU)后,第一件事往往不是急着写代码,而是翻开那本厚厚的数据手册,找到引脚定义章节。面对动辄上百页的引脚…

2026/7/23 13:13:24 阅读更多 →
AI论文写作工具评测与使用策略

AI论文写作工具评测与使用策略

1. 为什么我们需要AI论文写作工具?作为一名在学术圈摸爬滚打多年的研究者,我深知论文写作的痛苦。从选题构思到文献综述,从数据分析到结论撰写,每个环节都充满挑战。特别是当deadline临近时,那种"写不出来"的…

2026/7/23 13:13:24 阅读更多 →
SolidWorks高低版本文件转换的4种实用方案

SolidWorks高低版本文件转换的4种实用方案

1. SolidWorks高低版本文件转换的痛点解析 作为一名使用SolidWorks超过8年的机械设计师,我深刻理解高低版本文件转换这个问题的普遍性。上周团队新来的实习生就遇到了这个典型场景:客户发来的2024版装配体文件,而他电脑上安装的是2022版软件&…

2026/7/23 13:13:24 阅读更多 →
DDoS攻击也在用AI了?聊聊我们遇到的“智能攻击”和应对思路

DDoS攻击也在用AI了?聊聊我们遇到的“智能攻击”和应对思路

DDoS攻击也在用AI了?聊聊我们遇到的“智能攻击”和应对思路 今年上半年,我们一个客户的API服务频繁出现间歇性卡顿。监控上看带宽正常、CPU正常、数据库连接也正常,但业务就是时不时超时。 查了大半个月,最后发现是被打了——一种…

2026/7/23 13:12:24 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻