技术分享 | Appium 用例录制
下载及安装
下载地址:
github.com/appium/appi…
下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。
在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好 desirecapability 信息之后,点击“Start Session”启动会话就展示出下面的页面。Appium Inspector 元素定位页面:

左侧为屏幕快照:可以在左侧使用鼠标选择 UI 元素,会看到它们高亮显示。
中间为页面 DOM 树结构:在应用层次结构中会直接将元素的属性值标记在树上,这对于 Appium 定位元素很方便。
右侧为元素的详细信息:当元素被选中,右侧会展示出元素的详细属性信息列表。这些属性将决定 Appium 定位元素的策略。
另外 Appium Inspector 还提供了页面刷新,页面操作,录制,元素的点击、输入等功能。
Appium自动化用例录制
Appium Inspect 提供了定位元素与录制用例的功能,使用 Appium Inspect 可以查看移动设备的 UI 布局结构,方便脚本的编写和生成。下面以 Android 系统为例。在 Android 模拟器上安装 ApiDemos-debug.apk 应用。
测试应用下载地址:
github.com/appium/samp…
下载该 apk 并安装到测试设备,之后会基于该 app 进行自动化测试。
在录制脚本前启动测试设备,并且通过命令行查看该设备已连接成功。使用下面的命令查看设备是否连接,展示出下面的内容,即说明设备已连接。
$ adb devices List of devices attached emulator-5554 device
上面的结果中,“emulator-5554” 代表设备的名称,“device” 代表设备的状态,说明设备已连接。如果是其它状态,需要重新连接设备,或者在设备上检查是否开启开发者模式,以及打开 USB 调试模式。
获取应用包名和页面名称
移动端的包名(也就是 Package)作为每个 app 的唯一标识,每个 APP 都有自己的 Package Name,且每个设备上相同的包名的 APP,只允许安装一个。
页面(也就是 Activity)是 Android 组件中最基本,也是常见的四大组件之一,可以理解为一个页面就是一个 Activity,移动端打开一个 app 的页面,在操作页面的时候会发生页面的跳转,也就是 Activity 之间发生了切换。在编写测试脚本之前,首先要获取应用的包名以及启动页的 Activity 名字。
获取包名,终端进入 aapt 工具所在目录(Android SDK 的 build-tools 目录下),输入:
aapt dump badging [app名称].apk
运行结果:

图中“package:name”对应的结果是包名,“Lauchable-activity:name”对应的结果是“包名+页面名”。但是有些不符合规范的应用,通过 aapt 命令无法获取到 “Lauchable-activity:name” 这部分内容。
针对上面的问题,就需要在测试设备上启动 APP,然后在终端输入如下命令(Mac OS / Linux 系统):
adb logcat | grep ActivityManager
运行结果如下图:

Appium-desktop自动化用例录制
1. 启动 Appium Server
使用 Appium Inspector 录制测试脚本,首先需要启动 Appium-desktop,点击“Start Server”,如下图:

2. 打开 Appium Inspect 工具
点击右上角“Start inspector Session”按钮,打开 inspector 工具,图形页面如下:

Inspector 就是探测器,给它相应的参数,启动 app 帮你分析移动端 APP 的 UI 界面,还可以使用它录制脚本,支持导出多种语言的测试脚本。
3. 配置 Desired Capabilities 信息

-
platfromName:使用哪个移动操作系统平台,这里可以填 Android、iOS
-
deviceName:设备名称,可以随便填,但必须得有此项
-
appPackage:要启动的 android 应用程序包(“io.appium.android.apis”)
-
appActivity:App 启动的首页 Activity(“.ApiDemos”或者“io.appium.android.apis/.ApiDemos”)
4. 启动 Session
点击 “Start Session”,录制脚本。
对于 Appium 的初学者,可以通过录制功能,了解编写用例的时候需要使用哪些 API,有哪些编写规范等,可以作为一个很好的参考。
点击“开始录制”按钮(小眼睛图标):

左侧选择要操作的页面元素,在右侧选择要做的操作:

Tap 为点击元素 Send keys 为文本框录入 Clear 为清空文本框
利用上图 1,2 步组合,就可以实现对 app 的操作。比如在截取的页面中鼠标点击“Views”->点击 Tap,再点击“Buttons”->点击 Tap。每操作一步,都会自动生成脚本,如图:

默认生成的语言为 Java-unit,如果想生成其他语言,只要点击下拉栏选择相应选项即可,这里切换成 Python 语言。
把代码复制粘贴到编辑器中,就可以运行。代码如下:
from appium import webdrivercaps = {}
caps["platformName"] = "android"
caps["deviceName"] = "demo"
caps["appPackage"] = "io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"
caps["autoGrantPermissions"] = "true"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)el2 = driver.find_element_by_id("tv.danmaku.bili:id/expand_search")
el2.click()
el3 = driver.find_element_by_accessibility_id("搜索查询")
el3.send_keys("霍格沃兹测试学院")
driver.quit()
上面是录制出来的代码,录制生成的代码需要手动优化,添加需要的单元测试框架(比如 Pytest,Unittest)使代码更优雅。代码录制对刚入门的人来说还是比较实用的,它的缺点也是很明显:
-
所有的代码都会在一个文件里,显得代码非常的冗余
-
不能解决工作中大部分的场景
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
技术分享 | Appium 用例录制
下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…...
[蓝桥杯 2018 省 A] 付账问题
【蓝桥杯】付账问题 [蓝桥杯 2018 省 A] 付账问题 题目描述 几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。 现在有 n n n 个人出去吃饭,他们总共消费了 S S S 元。其中第 i i i 个人带了 a i a_i ai 元。幸运的是&#…...
设计模式|装饰器模式(Decorator Pattern)
文章目录 结构优缺点优点缺点适用场景示例装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原始对象的基础上,动态地给对象添加新的功能或责任。这种模式是通过创建一个包装对象,也就是装饰器,来包裹真实的对象,然后在装饰器中添加新的行为或功能。这…...
发作性睡病有性别差异吗?
发作性睡病是一种特殊的睡眠障碍,以不可控制的嗜睡、猝倒发作、睡眠瘫痪、入睡前幻觉以及夜间睡眠紊乱为主要临床特点。关于发作性睡病是否存在性别差异,不同的研究和报道给出了不同的结论。 一方面,从生理角度来看,男性和女性在…...
ppt从零基础到高手【办公】
第一章:文字排版篇01演示文稿内容基密02文字操作规范03文字排版处理04复习&作业解析第二章:图形图片图表篇05图形化表达06图片艺术化07轻松玩转图表08高效工具&母版统一管理09复习&作业解析10轻松一刻-文字图形小技巧速学第三章:…...
文件上传下载
文章目录 文件上传下载文件上传文件下载 文件上传下载 HTTP请求会包含一个请求头,其中"Content-Type"字段告诉服务器正在发送什么类型的数据。根据发送的数据类型,浏览器和服务器会采取适应的处理方式。 "multipart/form-data"是一…...
C++11 新特性:新增算法
C11 在标准库中引入了一系列新的算法,这些新增的算法使我们的代码写起来更简洁方便。 下面是 C11 中新增加的一些重要算法的简要描述和使用方法: 1、非修改序列操作 std::all_of:检查范围内的所有元素是否都满足指定的谓词。std::any_of&a…...
c/c++普通for循环学习
学习一下 for 循环的几种不同方式,了解一下原理及差异 完整的测试代码参考 GitHub :for 循环测试代码 1 常用形态 对于 for 循环来说,最常用的形态如下 for (表达式1; 表达式2; 表达式3) {// code }流程图如下: 编写测试代码…...
操作系统组成部分
从1946年诞生第一台电子计算机。 冯诺依曼结构 冯诺依曼是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。 常见的操作系统有三种类型 单用户单任务操作系统:只支持一个用户和一个任务的执行,如DOS;单用…...
深入理解DES算法:原理、实现与应用
title: 深入理解DES算法:原理、实现与应用 date: 2024/4/14 21:30:21 updated: 2024/4/14 21:30:21 tags: DES加密对称加密分组密码密钥管理S盒P盒安全性分析替代算法 DES算法简介 历史 DES(Data Encryption Standard)算法是由IBM研发&…...
# 达梦sql查询 Sql 优化
达梦sql查询 Sql 优化 文章目录 达梦sql查询 Sql 优化注意点测试数据单表查询 Sort 语句优化优化过程 多表关联SORT 优化函数索引的使用 注意点 关于优化过程中工具的选用,推荐使用自带的DM Manage,其它工具在查看执行计划等时候不明确在执行计划中命中…...
Linux下SPI驱动:SPI设备驱动简介
一. 简介 Linux下的SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是 SOC的 SPI 控制器接口,SPI设备驱动也就是所操作的SPI设备的驱动。 本文来学习一下Linux下SPI设备驱动。 二. Linux下SPI驱动:SP…...
【简明图文教程】Node.js的下载、安装、环境配置及测试
文章目录 前言下载Node.js安装Node.js配置Node.js配置环境变量测试后言 前言 本教程适用于小白第一次从零开始进行Node.js的下载、安装、环境配置及测试。 如果你之前已经安装过了Node.js或删除掉了Node.js想重新安装,需要先参考以下博客进行处理后,再根…...
共模电感饱和与哪些参数有关?这些参数是如何影响共模电感的?
在做一个变频器项目,遇到一个问题,在30Hz重载超过一定1小时,CE测试结果超出限制,查找原因最终发现EMI filter内的共模电感加热,fail现象可以复现。最终增大Y电容把问题解决了。由此问题引申出一个问题,到底…...
儿童护眼台灯怎么选?五款必选的高口碑护眼台灯推荐
儿童台灯,想必大家都不会陌生了,是一种学生频繁使用的小灯具,一般指放在桌面用的有底座的电灯。随着近年来儿童青少年的视力急速下滑,很多家长都会选择给孩子选择一款合适的护眼台灯,以便孩子夜晚学习能有个好的照明环…...
前端小技巧之轮播图
文章目录 功能htmlcssjavaScript图片 设置了一点小难度,不理解的话,是不能套用的哦!!! (下方的圆圈与图片数量不统一,而且宽度是固定的) 下次写一些直接套用的,不整这些麻…...
手动实现简易版RPC(上)
手动实现简易版RPC(上) 前言 什么是RPC?它的原理是什么?它有什么特点?如果让你实现一个RPC框架,你会如何是实现?带着这些问题,开始今天的学习。 本文主要介绍RPC概述以及一些关于RPC的知识,为…...
大语言模型总结整理(不定期更新)
《【快捷部署】016_Ollama(CPU only版)》 介绍了如何一键快捷部署Ollama,今天就来看一下受欢迎的模型。 模型简介gemmaGemma是由谷歌及其DeepMind团队开发的一个新的开放模型。参数:2B(1.6GB)、7Bÿ…...
关于npm和yarn的使用(自己的问题记录)
目录 一 npm 和 yarn 的区别 二 npm 和 yarn 常用命令对比 1. 初始化项目 2. 安装所有依赖包 3. 安装某个依赖包 4.安装某个版本的依赖包 5. 更新依赖包 5. 移除依赖包 三 package.json中 devDependencies 和 dependencies 的区别。 四 npm安装包时,…...
Web端Excel的导入导出Demo
📚目录 📚简介:✨代码的构建:💭Web端接口Excel操作🚀下载接口🚀导入读取数据接口 🏡本地Excel文件操作⚡导出数据🌈导入读取数据 📚简介: 使用阿里巴巴开源组件Easy Exce…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
一、研究背景与创新点 (一)现有方法的局限性 当前智驾系统面临两大核心挑战:一是长尾问题,即系统在遇到新场景时可能失效,例如突发交通状况或非常规道路环境;二是可解释性问题,传统方法无法解释智驾系统的决策过程,用户难以理解车辆行为的依据。传统语言模型(如 BERT…...


