Appium+python自动化(九)- 定位元素工具
简介
环境搭建好了,其他方面的知识也准备的差不多了,那么就开始下一步元素定位,元素定位主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. 此外在介绍另一款工具:Inspector。
uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。
那么先来介绍--uiautomatorviewer,再介绍--Inspector。
一、uiautomatorviewer
简介:
Android 4.1发布的,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。
功能性或者黑盒UI测试不需要测试人员了解程序如何实现的,只需要验证各种操作的结果是否符合预期即可。这样的测试可以分离团队的开发人员和测试人员。大家各干各的没有太多的交集。
常用的UI测试方式就是人工验证啦,就是测试人员拿着各种手机分别安装要测试的程序然后看看是否能正确完成各种预定的功能。但是这种验证方式是非常耗时间的,每次回归都要全部验证一边,并且还容易出现人为错误。比较高效和可靠的UI测试方式就是自动化测试。自动化UI测试创建测试代码来执行测试任务,各种测试任务分别覆盖不同的使用场景,然后使用测试框架来运行这些测试任务。而uiautomator 就是你的自动化UI测试工具。
Android SDK在4.1中提供了如下工具来支持UI自动化测试:
-
uiautomatorviewer – 一个图形界面工具来扫描和分析应用的UI控件。
-
uiautomator – 一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。
要大哥出山也就是使用该工具,需要满足如下条件:
-
Android SDK Tools, Revision 21 or higher
-
Android SDK Platform, API 16 or higher
一、启动uiautomatorviewer.bat
两种启动方法:
第一种方法:
1、打开目录D:\software\android-sdk-windows\tools
2、双击启动,启动之后出现如下界面
第二种方法:
1、如果不喜欢双击启动的话,也可以在cmd里面通过指令启动
先cd到tools目录下,然后输入uiautomatorviewer.bat回车后启动服务
二、连接手机
1、cmd打开输入adb devices,确认手机已连上(以夜神模拟器为例)
2、打开手机淘宝页面,让屏幕处于点亮状态
3、点左上角安卓机器人按钮Devices Screenshot按钮刷新页面
三、定位元素
1、移动鼠标到需要定位的元素上,如搜索输入框
2、右下角可以看到元素对应的属性
text:好沙发需要好坐垫resource-id:com.taobao.taobao:id/home_searcheditclass:android.widget.EditText
四、点搜索框
1、前面一篇启动app后,休眠五秒,等待页面加载完成
2、通过id来定位到搜索框,然后点击
五、参考代码
# coding=utf-8
from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android' #android的apk还是IOS的ipa
desired_caps['platformVersion'] = '8.0' #android系统的版本号
desired_caps['deviceName'] = '127.0.0.1:62001' #手机设备名称,通过adb devices 查看
desired_caps['appPackage'] = 'com.taobao.taobao' #apk的包名
desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome' #apk的launcherActivity
#desired_caps['unicodeKeyboard'] = True #使用unicodeKeyboard的编码方式来发送字符串
#desired_caps['resetKeyboard'] = True #将键盘给隐藏起来
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
# 休眠五秒等待页面加载完成
time.sleep(5)driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()# driver.quit()
六、元素定位
1、appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来
2、多的三种如下,在后面的会详细介绍
driver.find_element_by_accessibility_id()driver.find_element_by_android_uiautomator()driver.find_element_by_ios_uiautomation()
(第三个是ios的可以暂时不用管)
二、Inspector
Appium Inspector是appium自带的一个元素定位工具,前边介绍了如何使用uiautomatorviewer进行元素定位。这里就学习Appium Inspector是如何定位的。
Appium Inspector 对于测试的同学不得不说是一个神器,可以查询到我们需要定位的元素的 id 等各种信息 ,还可以 录制用户行为,翻译成脚本。逆天的是可以翻译成多种语言的脚本。这并不意味着测试的同学可以不用学习语言和编程了,因为机器翻译出的脚本一般很难一次执行成功,其中很可能还需要经过人工修改后才能顺利执行,但是这已经可以为测试脚本的编写带来很大的遍历,所以 Appium Inspector 还是值得我们去学习和使用。
一、设置appium
1、先不要启动appium,因为启动以后就不能操作appium设置界面,必须在未启动的时候进行操作
2、点开android setting界面(机器人图标)
3、勾选Application Path,添加被测app的路径
4、Devices name处添加设备名称(adb devices查看到的)
(注意:通过这种方法也可查看到apk的包名和Launch Activity)
二、开启appium
1、手机确保连接电脑(adb devices查看)(仍然以夜神模拟器为例)
2、点appium右上角三角形图标,会启动服务
3、这时候可以看到手机上安装淘宝应用,并会启动淘宝
4、点appium右上角的搜索图标
5、点Inspector Window界面的 Refresh 按钮刷新界面
三、Ispector Window
1、手机上打开需要单位元素的界面,然后点Refresh按钮刷新
2、左边菜单树,可以挨个点开
3、如果想单位界面上的“是”和“否”按钮,从菜单树就可以看到这两个元素的结构
四、查看属性
1、选中左侧菜单树对应的元素,在右下角查看对应属性
五、常见异常
1、在使用过程中,你会发现经常会报以下这个错误
2、每次启动都会给你手机上重新安装一次应用
3、并且不能用鼠标指定某个元素,没有uiautomatorviewer使用方便
(要是以上三种问题你都遇到了,怎么办???那就放弃吧!!!)
相信很多人在使用过程中,都会遇到中文无法输入问题,在后续文章里会手把手教大家如何输入中文。
三、小结
Android SDK中的UIAutomator中本身是不支持网页中的UI元素定位,下面介绍几种常用的定位app内部的网页的UI元素的方法。
一、使用chrome浏览器调试移动端网页
这是使用最多的一种方法。首页确保自己的手机已经跟电脑连接且处于开发者模式。
打开PC端的谷歌浏览器,输入chrome://inspect/#devices,会看到下图所示界面:
点击需要测试的网页下方的inspect,且保证手机界面停留在那个页面。
这样打开后是不是就熟悉了,点击上方红色标记的就可以操作进行定位了~~~
二、Android手机的铺助功能带有TalkBack
之前一直用的是谷歌的方法,但是最近发现使用talkback可以直接用UIAutomator定位元素。
Android系统一般自带一个TalkeBack功能。但这里千万要注意:打开之后整个系统的操作都变得不同了!!滑动界面需要两个手指,单击变成双击。打开之后用UiAutomatorViewer获取webview界面的内容,你就会发现原来webview里面获取不到的ui元素,现在已经可以可以获取到了。即使现在你关掉TalkBack,也能获取到,除非重启手机才会回到不能获取的状态,所以开启后我们可以立即关闭,以方便操作。有些手机没有talkBack的可以去应用市场下载。
功能路径:
原生系统:设置 – 辅助功能(Accessibility) – TalkBack
华为EMUI系统:设置 – 高级设置 – 辅助功能 – TalkBack
三、在哪里遇到的问题
查看appium日志的error发现没有设备名字报错
将夜神模拟器的名字加上就成功了
相关文章:

Appium+python自动化(九)- 定位元素工具
简介 环境搭建好了,其他方面的知识也准备的差不多了,那么就开始下一步元素定位,元素定位主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. 此外在介绍另一款工具:Insp…...

Unity 中实现可翻页的 PageView
之前已经实现过: Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次,点赞2次,收藏27次。源码已放入我的 github,地址:Unity-ListView前言实现一个列表组件,表现方面最核心的部分就是重写布局&…...
clickhouse常用语句汇总——持续更新中
一、查询判断是否包含指定列 1.根据数据库,表名查看表包含的列 SELECT name FROM system.columns WHERE table table_name AND database databasename;2.查找指定列target_column是否是表table_name的列 SELECT count() > 0 AS column_exists FROM system…...

云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】
云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】 目录 云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】1.RPM包的一般安装位置2.软件名和软件包名3.查询软件信息4.查询软件包5.导入红帽签名信息,解决查询软件包信息报错6.利用…...

LuaJIT2.1 和 Lua5.4.8 性能对比
说明 最近在学习 LuaJIT,想看看把它接入到项目中使用,会提高多大的性能。 今天抽时间,简单地测试了一下 LuaJIT 2.2 和 Lua5.4.8 的性能。 测试平台: 系统:Windows 10 WSLCPU:Intel Core™ i7-8700 CPU…...
深度学习姿态估计实战:基于ONNX Runtime的YOLOv8 Pose部署全解析
本文将详细介绍如何脱离YOLO官方环境,使用ONNX Runtime部署YOLOv8姿态估计模型。内容包括模型加载、图像预处理(Letterbox缩放和填充)、推理执行、输出解码(边界框和关键点处理)、非极大值抑制(NMS…...
深度探索:如何用DeepSeek重构你的工作流
前言:AI时代的工作革命 在人工智能浪潮席卷的今天,DeepSeek作为国产大模型的代表之一,正以其强大的自然语言处理能力、代码生成能力和多模态交互特性,重新定义着人类的工作方式。根据IDC报告显示,2024年企业级AI应用市场规模已突破800亿美元,其中智能办公场景占比达32%,…...

深入解析与解决方案:处理Elasticsearch中all found copies are either stale or corrupt未分配分片问题
目录 引言 1 问题诊断深入分析 1.1 错误含义深度解析 1.2 获取详细的诊断信息 2 解决方案选择与决策流程 2.1 可用选项全面对比 2.2 推荐处理流程与决策树 3 具体操作步骤详解 3.1 优先尝试 - 分配最新副本(最低风险) 3.2 中等风险方案 - 分配…...

【NLP 78、手搓Transformer模型结构】
你以为走不出的淤泥,也迟早会云淡风轻 —— 25.5.31 引言 ——《Attention is all you need》 《Attention is all you need》这篇论文可以说是自然语言处理领域的一座里程碑,它提出的 Transformer 结构带来了一场技术革命。 研究背景与目标 在 Transfo…...
yum更换阿里云的镜像源
步骤 1:备份原有源配置(重要!) sudo mkdir /etc/yum.repos.d/backup sudo mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/步骤 2:下载阿里云源配置 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https:…...

如何自定义WordPress主题(5个分步教程)
如果您已经安装了一个 WordPress 主题,但它不太适合您,您可能会感到沮丧。在定制 WordPress 主题方面,您有很多选择。 挑战在于找到正确的方法。 在本篇文章中,我将引导您了解自定义 WordPress 主题的各种选项,帮助您…...
ios版本的Tiktok二次安装不上,提示:Unable to Install “TikTok”
问题:Domain: IXUserPresentableErrorDomain Code: 1 Recovery Suggestion: Failed to load Info.plist from bundle at path /private/var/containers/Bundle/Application/E99D86D4-F96E-48F9-86C5-FE095A22E13A/DouyinDev.app/PlugIns/AwemeNotificationService.a…...

react实现markdown文件预览
文章目录 react实现markdown文件预览1、实现md文件预览2、解决图片不显示3、实现效果 react实现markdown文件预览 1、实现md文件预览 1️⃣第一步:安装依赖: npm install react-markdown remark-gfmreact-markdown:将 Markdown 渲染为 Rea…...
Neo4j 认证与授权:原理、技术与最佳实践深度解析
Neo4j 作为领先的图数据库,其安全机制——认证(Authentication)与授权(Authorization)——是保障数据资产的核心防线。本文将深入剖析其工作原理、关键技术、实用技巧及行业最佳实践,助您构建坚不可摧的图数据安全体系。 Neo4j 提供了强大且灵活的认证授权框架,涵盖从基…...
Android Studio 配置之gitignore
1.创建或编辑.gitignore文件 在项目根目录下检查是否已有.gitignore文件。如果没有,创建一个新文件,命名为.gitignore(注意文件名前有个点)。 添加忽略规则:在.gitignore中添加以下内容: 忽略整个 .idea …...

PDF处理控件Aspose.PDF教程:在 C# 中更改 PDF 页面大小
PDF 的页面大小决定了其内容的显示、打印或处理方式。我们通常在准备打印、转换格式或标准化布局时需要更改 PDF 页面大小。在本文中,您将学习如何使用 C# 更改任何 PDF 文件的页面大小。我们将通过完整的代码示例,逐步指导您完成操作。 Aspose.PDF最新…...
Perl One-liner 数据处理——基础语法篇【匠心】
Perl(Practical Extraction and Report Language)是一种功能强大且灵活的脚本语言,因其强大的文本处理能力和简洁的语法而广受开发者和系统管理员的喜爱。特别是在命令行环境下,Perl 的 one-liner(单行脚本)以其高效、简洁的特点,成为数据处理、文本转换和快速原型设计的…...
PHP 打印扩展开发:从易联云到小鹅通的多驱动集成实践
目前已有易联云WIFI打印机扩展 扩展入口文件 文件目录 crmeb\services\printer\Printer.php namespace crmeb\services\printer;use crmeb\basic\BaseManager; use think\facade\Config; use think\Container;/*** Class Printer* package crmeb\services\auth* mixin \crme…...

rust或tauri项目执行命令的时候,cmd窗口也会弹出显示解决方法
阻止 Tauri 执行命令时弹出 CMD 窗口 当你在 Tauri 中使用 tokio::process::Command 执行命令时弹出 CMD 窗口,这是因为 Windows 默认会为控制台程序创建可见窗口。以下是几种解决方法: 1. 使用 Windows 特有的创建标志 (推荐) #[tauri::command] pub…...
[软件工程] 文档 | 技术文档撰写全流程指南
技术文档撰写全流程指南 一份优秀的技术文档需平衡 “技术严谨性” 与 “用户友好性”,其本质是降低信息传递成本,让读者能快速获取所需信息,减少沟通与试错成本。在实际操作中,从明确目标、结构化内容、可视化表达,到…...

使用Python进行函数作画
前言 因为之前通过deepseek绘制一下卡通的人物根本就不像,又想起来之前又大佬通过函数绘制了一些图像,想着能不能用Python来实现,结果发现可以,不过一些细节还是需要自己调整,deepseek整体的框架是没有问题࿰…...
Python应用continue关键字初解
大家好!对于刚接触编程的初学者来说,理解循环控制语句是掌握编程语言的重要一步。在Python中,continue关键字是一个非常实用的循环控制工具,本文将通过简易示例帮助大家理解它的作用。 基本概念: continue关键字用于中断本次循环,…...

微型导轨在手术机器人领域中有哪些关键操作?
在微创手术领域,手术机器人凭借其高精度、高稳定性和远程操控能力,正逐步成为现代外科手术的重要工具。微型导轨作为一种专为高精度运动设计的线性导向系统,凭借其亚微米级定位精度、低摩擦运动特性及紧凑结构设计,已成为手术机器…...

FPGA 的硬件结构
FPGA 的基本结构分为5 部分:可编程逻辑块(CLB)、输入/输出块(IOB)、逻辑块之间的布线资源、内嵌RAM 和内嵌的功能单元。 (1)可编程逻辑块(CLB) 一个基本的可编程逻辑块由…...

EasyRTC音视频实时通话助力新一代WebP2P视频物联网应用解决方案
一、方案背景 物联网技术深刻变革各行业,视频物联在智慧城市、工业监控等场景广泛应用。传统方案依赖中心服务器中转,存在传输效率低、网络负载大的问题。新一代WebP2P视频物联技术实现设备直连,降低网络压力并提升传输效率,成…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善
一、完善上章的功能,形成一个小工具 QT开发技术【ffmpeg QAudioOutput】音乐播放器 二、增加歌曲保存类 #include "../Include/MusicListManager.h" #include "QtGui/Include/Conversion.h" #include <QFile> #include <QXmlStream…...

vscode 离线安装第三方库跳转库
我安装的是C/C的函数跳转 下载的离线库: 项目首页 - vscode代码自动补全跳转插件离线安装包:cpptools-win32.vsix是一款专为VSCode设计的离线安装插件,特别适合无法连接网络的电脑环境。通过安装此插件,您的VSCode将获得强大的代码自动跳转…...

DevExpress WinForms v24.2 - 新增日程组件、电子表格组件功能扩展
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...

基于机器学习的心脏病预测模型构建与可解释性分析
一、引言 心脏病是威胁人类健康的重要疾病之一,早期预测和诊断对防治心脏病具有重要意义。本文利用公开的心脏病数据集,通过机器学习算法构建预测模型,并使用 SHAP 值进行模型可解释性分析,旨在为心脏病的辅助诊断提供参考。 二、…...
VisDrone无人机视觉挑战赛观察解析2025.6.5
VisDrone无人机视觉挑战赛观察解析 历史沿革与发展进程 VisDrone无人机视觉挑战赛由天津大学联合国内外多所高校及科研机构发起,自2018年起依托ECCV、ICCV等顶级计算机视觉会议连续举办,已成为全球无人机视觉领域最具影响力的学术竞赛之一。赛事以推动无人机平台视觉算法创…...