当前位置: 首页 > 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.jsqmd.com/news/39687/

相关文章:

  • 11.13 程序员的修炼之道:从小工到专家 第五章 弯曲或折断 - GENGAR
  • 20251112周三日记
  • 力扣 第 475 场周赛(A~C)
  • 学习笔记:AC 自动机
  • 详细介绍:Web爬虫指南
  • 搜维尔科技:具身人工智能中的 MANUS:从人类运动到机器人灵巧性
  • 重组蛋白技术基础概述
  • 升鲜宝分拣系统 具体实现(一)
  • 2025-11-13
  • 字典树小记
  • 搜维尔科技:Xsens Link为精准而生,为创意而设计,为动作捕捉性能树立了新的标准
  • 一个好题2
  • 实用指南:百分点科技发布中国首个AI原生GEO产品Generforce,助力品牌决胜AI搜索新时代
  • 考前复习
  • 2025 年 11 月粮库空调厂家最新推荐,聚焦资质、案例、售后的实力品牌深度解析!
  • 题解:P3813 [FJOI2017] 矩阵填数
  • 第三章博文
  • Spring BeanPostProcessor接口
  • 25.11.13随笔联考总结
  • 完整教程:Verilog和FPGA的自学笔记6——计数器(D触发器同步+异步方案)
  • LucaOne架构
  • 实用指南:Windows安装MongoDB保姆级教程(图文详解)
  • linux USB --- 监听 USB 角色
  • 温州工友自动包装设备有限公司:专注螺丝五金智能包装,助力企业降本增效
  • 25.11.09
  • NOI2025 游记
  • NOIP 考前做题计划
  • 网络攻防实战 lab06 靶机 VulnHub hard-socnet2
  • [豪の学习笔记] Spring框架学习碎碎念#5
  • Docker部署Code-Server,实现远程写代码