03 APP 自动化-定位元素工具元素定位

article/2025/8/4 7:29:56

文章目录

      • 一、Appium常用元素定位工具
        • 1、U IAutomator View Android SDK 自带的定位工具
        • 2、Appium Desktop Inspector
        • 3、Weditor
          • 安装:
          • Weditor工具的使用
        • 4、uiautodev
        • 通过定位工具获取app页面元素有哪些属性
      • 二、app 元素定位方法

一、Appium常用元素定位工具

1、U IAutomator View Android SDK 自带的定位工具
  • 工具所在的位置 Android SDK安装路径/tools/bin
  • 双击 uiautomatorviewer.bat 文件打开即可:
2、Appium Desktop Inspector

Appium Desktop Inspector 是 appium server工具自带的定位工具

  • 下载:
    前往 Appium Inspector 的官方 GitHub 发布页面 ,根据你的操作系统(Windows、macOS 或 Linux)下载对应的安装包。
  • 安装:
    Windows:下载后得到 .exe 文件,双击运行安装程序,按照提示完成安装。
    macOS:下载 .dmg 文件,打开后将 Appium Inspector 图标拖到 “应用程序” 文件夹。
    Linux:如果下载的是.deb 或.rpm 包,可使用相应的包管理器(如dpkg 或rpm )进行安装。
  • 启动与配置
    • 启动 Appium 服务:在命令行输入appium ,启动 Appium 服务器,它会开始监听默认端口 4723(可通过参数修改)。
    • 启动 Appium Inspector:打开安装好的 Appium Inspector 应用程序。在启动会话前,需要配置相关参数,包括:
      • Remote Host:通常为127.0.0.1 (如果 Appium 服务器在本地运行)。
      • Remote Port:默认是 4723,与 Appium 服务监听端口一致。
      • Desired Capabilities:根据要测试的应用和设备情况,填写相关能力参数,如platformName (指定平台为Android 或iOS )、platformVersion (设备系统版本)、deviceName (设备名称或模拟器名称)、appPackage (安卓应用包名)、appActivity (安卓应用启动 Activity)等 。
        在这里插入图片描述

完成以上步骤后,点击 “启动会话”,Appium Inspector 就能连接到 Appium 服务器,进行 App 的 UI 元素检查和测试了。

3、Weditor

Uiautomator2 Python第三方库 appUI自动化测试框架

安装:
  • 命令01: dos命令窗口 ----- pip install Uiautomator2
  • 命令02:dos命令窗口 ----- python -m uiautomator2 init
  • 命令03: dos命令窗口 ----- pip install weditor
  • 确认工具是否安装成功:weditor --help
Weditor工具的使用
  • 1、启动weditor工具
    dos命令窗口-----命令:weditor
  • 2、选择操作系统,填写设置设备名称,点击连接
  • 3、开始定位元素,获取元素信息
  • 4、退出工具 ctrl c
4、uiautodev

uiautodev 官方文档

  • 安装环境:Python 3.8+
  • 安装命令:pip3 install -U uiautodev
通过定位工具获取app页面元素有哪些属性
  • 1、 resourceid
  • 2、class 属性 /classname 元素标签名
  • 3、text 文本内容
  • 4、description 属性(content-desc)
  • 5、元素定位方式 ( weditor 提供 xpath 定位语句)
  • 6、appPackage
  • 7、appActivity (weditor)

二、app 元素定位方法

1、元素定位方式一: 基于 text 属性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 专用); AppiumBy.IOS_PREDICATE(iOS 专用)

  • 这种定位方式利用系统自带框架(Uiautomator1/Uiautomator2)实现元素定位,基于java 代码编写
  • 通过这些框架实现元素定位==实质就是调用这些框架里面的方法(UiSelector 类实现元素定位)
    UiSelector - Android 中文版 - API 参考文档 (apiref.com)

2、元素定位方式二:通过元素的类名进行定位,AppiumBy.CLASS_NAME

3、元素定位方式三: resourceId 属性定位元素,AppiumBy.ID
4、元素定位方式四:多个属性组合定位 new UiSelector().方法1().方法2().方法3();UiSelector类里面的方法,如果参数是字符串类型,必须是双引号
5、元素定位方式五:基于 content‐desc/description 属性定位:AppiumBy.ACCESSIBILITY_ID
6、元素定位方式六:选择 xpath 定位 等同于 web 自动化测试 xpath 定位的方法一致

# -*- coding=utf-8 -*-
from time import sleep
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec# 设置操作终端的配置参数
desired_caps = dict(platformName='Android', # 指定操作系统platformVersion='12',# 指定操作系统版本automationName='Uiautomator2',# 默认框架deviceName='127.0.0.1:62001',# 指定设备名称appPackage='com.tal.kaoyan',# 被操作的应用程序包名appActivity='com.tal.kaoyan.ui.activity.SplashActivity',# 启动页面noReset='false',# true--不重置  false--重置app='F:\Pycharm\AppAuto\kaoyan_v4.5.3.apk'  # apk文件所在路径
)
# 发送命令给 appium server
driver = webdriver.Remote('http://127.0.0.1:4723', options=UiAutomator2Options().load_capabilities(desired_caps))
#-------------首次启动后弹窗处理----------------
try:# 等待用户协议弹窗元素出现(最多5秒)user_protocal = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tip_commit')))user_protocal.click()  # 关闭弹窗print("用户协议弹窗已关闭")
except Exception:print("未发现用户协议弹窗,继续执行")pass  # 未出现弹窗,继续执行后续代码
try:# 等待权限弹窗元素出现(最多5秒)confirm_permission = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tv_ok')))confirm_permission.click()  # 关闭弹窗print("权限弹窗已关闭")
except Exception:print("未发现用户协议弹窗,继续执行")pass  # 未出现弹窗,继续执行后续代码
#-------------登录----------------
# 1、元素定位方式一: 基于 text 属性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 专用);AppiumBy.IOS_PREDICATE(iOS 专用)
phone_input = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.tal.kaoyan:id/kylogin_phone_input_phonelayout")')))
# 点击手机号输入框,保证输入框是可输入状态
phone_input.click()
# 通过模拟人为的点击响应的数字按钮,对应到手机键盘的字母/数字键从而完成文本的输入,以下是输入手机号 18710846693
driver.press_keycode(8)
driver.press_keycode(15)
driver.press_keycode(14)
driver.press_keycode(8)
driver.press_keycode(7)
driver.press_keycode(15)
driver.press_keycode(11)
driver.press_keycode(13)
driver.press_keycode(13)
driver.press_keycode(16)
driver.press_keycode(10)# 2、元素定位方式二:通过元素的类名进行定位,AppiumBy.CLASS_NAME
checkbox_btn = driver.find_element(AppiumBy.CLASS_NAME, 'android.widget.CheckBox')
checkbox_btn.click()# 3、元素定位方式三: resourceId 属性定位元素,AppiumBy.ID
verify_code_btn = driver.find_element(AppiumBy.ID, "com.tal.kaoyan:id/kylogin_phone_input_codeget")
verify_code_btn.click()
# AppiumBy.ANDROID_UIAUTOMATOR支持多个属性组合定位:className resourceId
# 等待用户输入
code_value = input("请输入手机验证码")
# 4、元素定位方式四:多个属性组合定位 new UiSelector().方法1().方法2().方法3();UiSelector类里面的方法,如果参数是字符串类型,必须是双引号
code_input = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("请输入验证码").resourceId("com.tal.kaoyan:id/kylogin_phone_input_code") ')
code_input.send_keys(code_value)
# 5、元素定位方式五:基于 content‐desc/description 属性定位:AppiumBy.ACCESSIBILITY_ID
# 6、元素定位方式六:选择 xpath 定位 等同于 web 自动化测试xpath定位的方法一致
login_btn = driver.find_element(AppiumBy.XPATH, '//*[@resource-id="com.tal.kaoyan:id/loginCodeLoginBtn"]')
login_btn.click()
sleep(5)

http://www.hkcw.cn/article/iVTxxIMGII.shtml

相关文章

数学分析——一致性(均匀性)和收敛

目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…

并发执行问题 (上)

S3和S4 没法区别 i存在 父进程数据区 子进程存在数据区 所以返回值不一样 通过返回值运行不一样的代码 原来的进程镜像作废,运行的执行新的elf文件

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot_table() - 透视表 (长 -> 宽,支持聚合)

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili pivot_table() 是 pandas 中最强大的数据透视工具,它不仅能重塑数据,还能进行复杂的数据聚合…

郑钦文抢七险胜萨姆索诺娃 首次闯进法网八强

6月1日,在2025年法国网球公开赛女单第四轮比赛中,赛会8号种子、中国选手郑钦文以2:1战胜俄罗斯选手萨姆索诺娃,首次闯进法网女单八强。这场比赛耗时2小时47分钟,双方在场上展开了激烈的争夺。首盘比赛双方陷入苦战,郑钦文通过更深的落点限制对手进攻,并且在多拍回合中展现…

robot_lab学习笔记【MDP综述】

文章目录 整体介绍第一部分第二部分第三部分总结 整体介绍 在robot_lab中的mdp文件夹下面包含6个文件:[init.py , commands.py , curiculums.py, events.py , observations.py , rewards.py ] 对每个部分的详细讲解在总结中会指向子链接 init.py文件的代码如下 …

Leetcode 2093. 前往目标城市的最小费用

1.题目基本信息 1.1.题目描述 一组公路连接 n 个城市,城市编号为从 0 到 n - 1 。 输入包含一个二维数组 highways ,其中 highways[i] [city1i, city2i, tolli] 表示有一条连接城市 city1i 和 city2i 的双向公路,允许汽车缴纳值为 tolli 的…

【C++】模板与特化技术全面教程(claude sonnet 4)

第一章:模板的基础概念 (Template Fundamentals) 1.1 什么是模板? 模板 (Template) 是C中的一种泛型编程 (Generic Programming) 机制,它允许我们编写与类型无关的代码。想象一下,如果我们要为不同的数据类型编写相同逻辑的函数&a…

VBA数据库解决方案二十:Select表达式From区域Where条件Order by

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…

结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?

Redis 内存回收 1. 过期 key 处理 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存: 当内存使用达到上限时&#…

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)

在自然语言处理(NLP)的浩瀚宇宙中,TF-IDF(词频-逆文档频率) 犹如一颗恒星,虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时,TF-IDF作为传统方法的代表,其简洁性、高效性与可解…

C++11(上)

历史: 在C98版本后,C11是一次大版本的更新。在C11中新增了许多有用的东西。接下来将由小编来带领大家介绍C11中新增的内容。 列表初始化: 在C中,列表初始化(也称为统一初始化或花括号初始化)是一种使用花括号 {} 来初…

从TCO角度分析IBM Cognos Analytics

一、总拥有成本(TCO)分析 像 Cognos Analytics 这样成熟的企业级 BI 平台,在与新兴的敏捷 BI 工具竞争中,依然能够保持其独特价值和竞争力的关键所在,尤其从企业和组织的长远发展、团队协作以及总拥有成本&#xff08…

使用西门子博图V16时遇到了搜索功能报错的问题,提示缺少SIMATIC Visualization Architect组件怎么办,全网首发

先上解决方案,这个太简单了,直接上官网下载,这个安装包40M,很快就下载完了,然后直接安装就可以了。 官网链接SIMATIC Visualization Architect V16 TRIAL Download - ID: 109772966 - Industry Support Siemens 今天我…

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

目录 一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇(三&…

12 Java GUI

Java 在图形开发中的占比并不是特别突出,尤其在传统的客户端图形界面开发方面。不是现代 UI 设计的首选 C#的WinForms(传统)、WPF(现代)是Windows 桌面开发的王者 跨平台(Windows/macOS/Linux)&…

当AI遇见千年古韵:解密“古韵智绘”,让传统纹样焕发新生机

目录: 引言:当千年古韵遇上AI,一场跨越时空的对话“古韵智绘”:不止于复刻,更是创新的引擎核心技术揭秘:AI如何“理解”并“创作”传统纹样? 基石:海量纹样数据库与智能特征提取神笔:基于GANs的AI纹样生成器魔术:风格迁移与融合的艺术桥梁:交互式编辑与开放API接口系…

[AD] Reaper NBNS+LLMNR+Logon 4624+Logon ID

QA QAForela-Wkstn001 的 IP 位址是什麼?172.17.79.129Forela-Wkstn002 的 IP 位址是什麼?172.17.79.136被攻擊者竊取雜湊值的帳戶的使用者名稱是什麼?arthur.kyle攻擊者用來攔截憑證的未知設備的 IP 位址是什麼?172.17.79.135受…

RAG入门之数据导入

LangChain 是什么 LangChain 是一个用于构建基于大语言模型(LLM)应用的开源框架。它提供了一套工具和抽象,让开发者能够轻松构建复杂的AI应用。 LangChain 的核心功能 文档加载和处理:支持多种格式(PDF、文本、网页…

科研学习|科研软件——激活后的Origin导出图时突然出现了demo水印

问题:画完图在导出图形时,导出的图有demo水印,如下图。 解决方法1:右击选择以管理员身份运行。 解决方法2:找到该软件的保存路径,双击Origin64.exe