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

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

文章目录

      • 一、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)

相关文章:

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

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

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

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

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

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

三套知识系统的实践比较:Notion、Confluence 与 Gitee Wiki

在过去几年中,我们团队先后使用过三套企业知识系统:Notion、Confluence 和 Gitee Wiki。每一套系统上线初期都带来一阵热情,但最终能真正融入研发流程、持续活跃的,只有最后一个。 我们不是要为某个平台背书,而是希望…...

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…...

OpenGL 3D 编程

OpenGL 是一个强大的跨平台图形 API,用于渲染 2D 和 3D 图形。以下是 OpenGL 3D 编程的入门基础。 一. 环境设置 安装必要的库 GLFW: 用于创建窗口和处理输入 GLEW 或 GLAD: 用于加载 OpenGL 函数 GLM: 数学库,用于 3D 变换 // 基本 OpenGL 程序结构示例 #include <GL/g…...

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

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

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

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

NodeJS全栈WEB3面试题——P4Node.js后端集成 服务端设计

4.1 如何在 Node.js 中管理钱包与私钥的安全性&#xff1f; 私钥管理原则&#xff1a;不暴露&#xff0c;不硬编码&#xff0c;不明文存储。 常见做法&#xff1a; 加密存储&#xff1a; 使用 crypto 或 ethers.Wallet.encrypt() 加密私钥&#xff0c;存储到数据库或文件系统…...

SQL进阶之旅 Day 12:分组聚合与HAVING高效应用

【SQL进阶之旅 Day 12】分组聚合与HAVING高效应用 在SQL的世界里&#xff0c;分组聚合&#xff08;Grouping and Aggregation&#xff09;是处理大规模数据集时最常用的技术之一。它允许我们将数据按照某些列进行分类&#xff0c;并对每个分类进行统计计算。而 HAVING 子句则是…...

深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制

导言 在面向对象编程中&#xff0c;理解对象构造过程至关重要。C#的构造函数执行遵循严格的顺序规则&#xff0c;尤其是涉及继承和成员初始化时。本文将深入解析构造函数的执行流程、初始化语句的妙用以及类访问修饰符的影响&#xff0c;助你写出更健壮、可维护的代码。 构造…...

Java 大数据处理:使用 Hadoop 和 Spark 进行大规模数据处理

Java 大数据处理:使用 Hadoop 和 Spark 进行大规模数据处理 在当今数字化时代,数据呈现出爆炸式增长,如何高效地处理大规模数据成为企业面临的重要挑战。Java 作为一门广泛使用的编程语言,在大数据处理领域同样发挥着关键作用。本文将深入探讨如何利用 Hadoop 和 Spark 这…...

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

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

探索大语言模型(LLM):参数量背后的“黄金公式”与Scaling Law的启示

引言 过去十年&#xff0c;人工智能领域最震撼的变革之一&#xff0c;是模型参数量从百万级飙升至万亿级。从GPT-3的1750亿参数到GPT-4的神秘规模&#xff0c;再到谷歌Gemini的“多模态巨兽”&#xff0c;参数量仿佛成了AI能力的代名词。但参数真的是越多越好吗&#xff1f;这…...

Excel to JSON 插件 2.4.0 版本更新

我们很高兴地宣布 Excel to JSON 插件已升级到 2.4.0 版本&#xff01;本次更新带来了两项重要功能&#xff0c;旨在为您提供更大的灵活性和更强大的数据处理能力。 主要更新内容&#xff1a; 1. 用户可以选择从行或列中选择标题 在之前的版本中&#xff0c;插件通常默认从第…...

黑马点评后端笔记

1.基于Session实现登录流程 发送验证码: 先前端校验,后端再校验(防小人),合法生成验证码(RandomUtil生成),后端保存&#xff0c;在通过短信去发送给用户 短信验证码登录和注册: 拿到验证码和手机号后&#xff0c;后端通过session(spring mvc注入)拿到验证码,进行校验,如果用户…...

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

实现需求 创建二维数组&#xff0c;数组的列和宽为随机&#xff0c;数组内的数也是随机 知识点 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多变量单步光伏功率预测&#xff08;Matlab完整源码和…...

解锁 AI 大语言模型的“知识宝藏”:知识库的奥秘与优化之道

1. 知识库在 AI 大语言模型中的作用 1.1 提供准确信息 知识库是 AI 大语言模型的重要组成部分&#xff0c;能够为模型提供准确的信息。在处理用户问题时&#xff0c;模型可以参考知识库中的数据&#xff0c;从而给出更准确的答案。例如&#xff0c;在医疗领域&#xff0c;知识…...

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

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

第四十天打卡

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代码…...

【请关注】ELK集群部署真实案例分享

ELK集群部署 1,准备es配置 es.yml: -------------------------------------------------------------- #集群名称 cluster.name: elasticsearch-cluster #节点名称 node.name: es-node1 #设置绑定的ip地址,可以使ipv4或者ipv6 #绑定这台机器的任何一个ip network.bind_hos…...

odoo17 windows server布署错误分析

odoo17 windows server布署错误分析 错误代码&#xff1a; File "C:\od172406\odoo\sql_db.py", line 681, in borrow result psycopg2.connect( ^^^^^^^^^^^^^^^^^ File "C:\od172406\venv\Lib\site-packages\psycopg2\__init__.py"…...

PyTorch 入门学习笔记

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

【 Samba】Windows 用户访问Docker服务器上当前A用户的 ~/aaa目录

要让 Windows 用户访问 ~/aaa目录&#xff0c;需要在 Linux 系统上配置 Samba 共享服务&#xff0c;并设置合适的权限。以下是具体步骤&#xff1a; 1. 安装 Samba bash sudo apt update sudo apt install samba 2. 创建 Samba 用户&#xff08;可选&#xff09; 如果你希望 …...

pycharm生成图片

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

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

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

Redis 中的 5 种数据类型和示例场景

Redis 作为一款高性能的键值对数据库&#xff0c;凭借其丰富的数据类型&#xff0c;在缓存、消息队列、排行榜等众多场景中发挥着重要作用。本文将详细介绍 Redis 的 5 种核心数据类型&#xff0c;并结合示例场景和代码&#xff0c;让你快速掌握它们的使用方法。 一、String&am…...

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

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

SpringBoot项目搭建指南

SpringBoot项目搭建指南 文章目录 SpringBoot项目搭建指南一、SpringBoot项目搭建1.1 SpringBoot 版本选择1.2 SpringBoot 框架引入方式1.2.1 继承 Starter Parent POM1.2.2 不使用 Parent POM 来使用 Spring Boot 1.3 SpringBoot 打包插件 二、日志框架引入2.1 引入SpringBoot…...