当前位置: 首页 > news >正文

appium包含文本定位的5种方法

# appium定位,以text包含部分文字定位示例# 方法1: 使用XPath的contains函数进行text部分匹配
from appium.webdriver.common.appiumby import AppiumBydef locate_element_by_partial_text(driver, partial_text):"""通过text包含部分文字定位元素的多种方法"""# 方法1: XPath - contains函数匹配text属性# 最常用的方法,适用于大多数情况element1 = driver.find_element(AppiumBy.XPATH,f"//*[contains(@text, '{partial_text}')]")print(f"方法1 - XPath contains: 找到元素 {element1.text}")# 方法2: XPath - contains函数匹配content-desc属性# 有时text内容可能在content-desc中try:element2 = driver.find_element(AppiumBy.XPATH,f"//*[contains(@content-desc, '{partial_text}')]")print(f"方法2 - XPath contains (content-desc): 找到元素")except Exception as e:print(f"方法2 - 未找到匹配元素: {str(e)}")# 方法3: 使用UiAutomator2的textContains方法# 更高效,Android专用try:element3 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,f'new UiSelector().textContains("{partial_text}")')print(f"方法3 - UiAutomator textContains: 找到元素 {element3.text}")except Exception as e:print(f"方法3 - 未找到匹配元素: {str(e)}")# 方法4: 先获取所有可能的元素,再过滤# 适用于复杂场景try:all_elements = driver.find_elements(AppiumBy.CLASS_NAME, 'android.widget.TextView')filtered_elements = [e for e in all_elements if partial_text in e.text]if filtered_elements:print(f"方法4 - 过滤匹配: 找到 {len(filtered_elements)} 个匹配元素")for i, elem in enumerate(filtered_elements):print(f"  第{i+1}个元素: {elem.text}")except Exception as e:print(f"方法4 - 过滤出错: {str(e)}")# 方法5: 匹配多个属性# 更精确的定位try:element5 = driver.find_element(AppiumBy.XPATH,f"//android.widget.TextView[contains(@text, '{partial_text}') and @clickable='true']")print(f"方法5 - 多属性匹配: 找到可点击元素 {element5.text}")except Exception as e:print(f"方法5 - 未找到匹配元素: {str(e)}")# 返回第一个找到的元素return element1# 使用示例(需要在实际driver环境中运行)
"""
# 假设driver已经初始化
# driver = webdriver.Remote(...)  
# 
# # 查找text中包含"登录"的元素
# login_element = locate_element_by_partial_text(driver, "登录")
# login_element.click()
# 
# # 查找text中包含"确认"的按钮
# confirm_button = locate_element_by_partial_text(driver, "确认")
# confirm_button.click()
"""# 注意事项:
# 1. 当partial_text包含引号时,需要特殊处理以避免XPath语法错误
# 2. 方法3在Android上性能更好,特别是页面元素较多时
# 3. 优先使用方法1和方法3,它们是最常用且稳定的方式
# 4. 如果元素在屏幕外,可能需要先滚动页面再查找
# 5. 对于iOS,可以使用predicate string: '-ios predicate string', 'label CONTAINS[c] "部分文字"'
http://www.zskr.cn/news/48850.html

相关文章:

  • 20251112周三日记
  • 学习笔记:AC 自动机
  • 重组蛋白技术基础概述
  • 2025-11-13
  • 字典树小记
  • 搜维尔科技:Xsens Link为精准而生,为创意而设计,为动作捕捉性能树立了新的标准
  • 2025 年 11 月粮库空调厂家最新推荐,聚焦资质、案例、售后的实力品牌深度解析!
  • 题解:P3813 [FJOI2017] 矩阵填数
  • 25.11.13随笔联考总结
  • 完整教程:Verilog和FPGA的自学笔记6——计数器(D触发器同步+异步方案)
  • NOIP 考前做题计划
  • Docker部署Code-Server,实现远程写代码
  • 2025 年 11 月铁附件厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读!
  • Day37(7)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-web-01
  • 深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践
  • 题解:ABC232G Modulo Shortest Path
  • 如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)
  • 基于Ai元人文构想的关系图
  • 题解:P10360 [PA 2024] Desant 3
  • 软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira
  • 题解:AT_abc232_g [ABC232G] Modulo Shortest Path
  • QF-Lib:用一个库搞定Python量化回测和策略开发
  • 软件工程学习日志2025.11.13
  • 完整教程:数值计算-线性方程组的迭代解法
  • 深入解析:三维旋转矩阵的左乘与右乘
  • HEVC视频扩展免费下载
  • 序列化概念及Jackson注解实现动态JSON响应
  • 2025热门学宠物美容师榜:黑龙江学宠物美容师/宠物美容师培训学校毛孩精致变美秘籍!
  • react-window API完全手册:参数、方法与事件全解析 - 指南
  • IOS抓包------Stream