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

news2025/7/27 12:41:57

文章目录

      • 一、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.coloradmin.cn/o/2397277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PABD 2025:大数据与智慧城市管理的融合之道

会议简介 2025年公共管理与大数据国际会议(ICPMBD 2025)确实在海口举办。本次会议将围绕公共管理与大数据的深度融合、数据分析在公共管理中的应用、大数据驱动的政策制定与优化等议题展开深入研讨。参会者将有机会聆听前沿学术报告,分享研究…

Golang持续集成与自动化测试和部署

概述 Golang是一门性能优异的静态类型语言,但因其奇快的编译速度,结合DevOps, 使得它也非常适合快速开发和迭代。 本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术: dep: 进行包的依赖管理gin…

mysql离线安装教程

1.下载地址: https://downloads.mysql.com/archives/community/ 2.上传安装包到系统目录,并解压 tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar3.检查系统中是否存在mariadb的rpm包 rpm -qa|grep mariadb存在则删除 rpm -e xxx4.解压完后执行如下命令安装 sudo rpm -iv…

基于FPGA的VGA显示文字和动态数字基础例程,进而动态显示数据,类似温湿度等

基于FPGA的VGA显示文字和数字 前言一、VGA显示参数二、字模生成三、代码分析1.vga_char顶层2.vga_ctrl驱动文件3.vga_pic数据准备文件 总结 前言 结合正点原子以及野火的基础例程,理解了VGA本身基本协议,VGA本身显示像素为640*480,因此注意生…

力扣刷题Day 68:搜索插入位置(35)

1.题目描述 2.思路 方法1:回溯的二分查找。 方法2:看到了一个佬很简洁的写法,代码贴在下面了。 3.代码(Python3) 方法1: class Solution:def searchInsert(self, nums: List[int], target: int) ->…

使用Python绘制节日祝福——以端午节和儿童节为例

端午节 端午节总算是回家了,感觉时间过得真快,马上就毕业了,用Python弄了一个端午节元素的界面,虽然有点不像,祝大家端午安康。端午节粽子(python)_python画粽子-CSDN博客https://blog.csdn.net…

C#项目07-二维数组的随机创建

实现需求 创建二维数组,数组的列和宽为随机,数组内的数也是随机 知识点 1、Random类 Public Random rd new Random(); int Num_Int rd.Next(1, 100);2、数组上下限。 //定义数组 int[] G_Array new int[1,2,3,4];//一维数组 int[,] G_Array_T …

光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和数据)

光伏功率预测 | MATLAB实现基于LSTM长短期记忆神经网络的光伏功率预测 目录 光伏功率预测 | MATLAB实现基于LSTM长短期记忆神经网络的光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和…

一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——3. 服务器软件更新,以及常用软件安装

前言 前面,我们已经 安装好了 Ubuntu 服务器系统,并且 配置好了 ssh 免密登录服务器 ,现在,我们要来进一步的设置服务器。 那么,本文,就是进行服务器的系统更新,以及常用软件的安装 调整 Ubu…

PyTorch 入门学习笔记

一、简介 PyTorch 是由 Meta(原 Facebook) 开源的深度学习框架。其前身 Torch 是一个基于 LuaJIT 的科学计算框架,核心功能是提供高效的张量(Tensor)操作和神经网络支持。由于 Lua 语言的生态限制,Torch 逐…

pycharm生成图片

文章目录 图片例子生成图片并储存,设置中文字体支持两条线绘制散点图和直方图绘制条形图(bar)绘制条形图(横着的)(plt.barh)分组的条形图 颜色和线条风格1. **颜色字符 (color)**其他颜色指定方…

Android 云手机横屏模式下真机键盘遮挡输入框问题处理

一、背景 打开横屏应用,点击云机EditText输入框,输入框被键盘遮挡,如下图: 未打开键盘状态: 点击第二个输入框,键盘遮挡了输入框: 二、解决方案(推荐第三中方案,博主采用的也是第三种方案) 博主这里整理了三种方案:…

Axure设计案例——科技感对比柱状图

想让数据对比展示摆脱平淡无奇,瞬间抓住观众的眼球吗?那就来看看这个Axure设计的科技感对比柱状图案例!科技感设计风格运用独特元素打破传统对比柱状图的常规,营造出一种极具冲击力的视觉氛围。每一组柱状体都仿佛是科技战场上的士…

FPGA仿真中阻塞赋值(=)和非阻塞赋值(<=)区别

FPGA仿真中阻塞赋值和非阻塞赋值的区别 单独仿真小模块对但将小模块加入整个工程仿真不对就有可能是没有注意到仿真中阻塞赋值和非阻塞赋值的区别 目录 前言 一、简介 二、设计实例 三、仿真实例 1、仿真用非阻塞赋值 2、仿真用阻塞赋值 总结 前言 网上很多人介绍verilo…

LabVIEW轴角编码器自动检测

LabVIEW 开发轴角编码器自动检测系统,针对指控系统中高故障率的轴角编码器性能检测需求,通过模块化硬件架构与软件设计,实现编码器运转状态模拟、扭矩 / 转速实时监测、19 位并行编码采集译码、数据自动分析及报告生成等功能,解决…

MySQL数据库从0到1

目录 数据库概述 基本命令 查询命令 函数 表的操作 增删改数据和表结构 约束 事务 索引 视图 触发器 存储过程和函数 三范式 数据库概述 SQL语句的分类: DQL:查询语句,凡是select语句都是DQL。 DML:insert,delete,up…

WiFi万能钥匙鲲鹏服务器部署 TiDB 集群实战指南

作者: TiDBer_yangxi 原文来源: https://tidb.net/blog/15a234d0 一、环境准备 1. 硬件要求 服务器架构 :鲲鹏服务器(ARM架构),TiDB 官方明确支持 ARM 架构服务器部署 推荐配置 (生产环…

Vue 核心技术与实战智慧商城项目Day08-10

温馨提示:这个黑马的视频在b占可以找到,里面有完整的教学过程 然后这个项目有完整的代码,我已经上传了,如果审核成功大家就可以看了,但是需要审核多久我也不是很确定 1.项目演示 2. 项目收获 3. 创建项目 4. 调整初始化…

TCP/IP协议精华总结pdf分享

hi ,大家好,应小伙伴们的要求,上次分享了个人的一些学习和职场经验,其中网络协议PDF文档是我之前学习协议的时候总结一些精华知识,网络属于基本功,是互联网必备知识,我深信掌握好核心20%知识&am…

⚡️ Linux grep 命令参数详解

⚡️ Linux grep 用法及参数详解 📘 1. grep 简介 grep 是 Linux/Unix 系统中用于文本搜索的命令,其全称为 Global Regular Expression Print,意为全局正则表达式打印器。 它根据给定的 模式(pattern) 对文件或标准…