Appium如何支持ios真机测试
ios模拟器上UI自动化测试
以appium+webdriverio为例,详细介绍如何在模拟器上安装和测试app。在使用ios模拟器前,需要安装xcode,创建和启动一个simulator。simulator创建好后,就可以使用xcrun simctl命令安装被测应用并开始测试了。xcrun simctl常用命令,当然还可以使用xcrun simctl创建、关闭模拟器。
//显示所有的ios simulators,booted代表处于启动状态
xcrun simctl list devices// 删除模拟器
xcrun simctl delete <simualtor-udid>//启动模拟器
xcrun simctl boot <simulator-udid>//安装.app包到模拟器上
xcrun simctl install <simulator-udid> <app-path>
上面命令中,xcrun是xcode工具链中一个命令行工具调度器,他的作用是自动找到并调用对应版本的开发工具,例如调用对应版本的simctl或者xcodebuild等工具。通过xcrun保证了调用的工具版本与xcode版本一致。simctl是apple提供个一个命令行工具,用于管理和控制ios模拟器(simulator),它是xcode的一部分。
上面的初始化准备工作完成后,可以在webdriverio中下载ui自动化测试的sample代码。在sample代码中创建apps目录,并将被测app的zip文件拷贝到apps目录下。webdriverio分别准备了android和ios的被测应用包。修改配置文件,将配置文件中模拟器版本进行修改,修改完毕后,即可执行“npm run ios”开始UI自动化测试了,程序会自动执行sample代码已经写好的自动化测试代码。配置文件内容如下所示:
运行命令后,appium会自动安装WebDriverAgent,启动被测应用,并自动执行UI自动化测试。
WebDriverAgent
WebDriverAgent作用是什么呢?WebDriverAgent简称为WDA,WDA是由Facebook开源,现由Appium团队维护的一个IOS端测试服务App,这个App由Apple官方的XCTest测试框架编写,用于控制ios的UI。例如通过bundldID启动app,查找元素,执行点击、滑动等操作。当这个app被安装到真机或者模拟器后,会监听本地的HTTP接口,接受json请求来控制手机UI。当使用appium开展ios的自动化测试时,需要安装XCUITest Driver,Driver的作用又是什么呢?Driver负责编译和部署WDA到目标设备上,与WDA通过http请求进行通信,转化Appium客户端请求为WDA支持的请求。Appium客户端、Appium Server、Driver,WDA之间的交互如下图所示,这也是UI自动化测试在ios模拟器或者真机上的执行过程。
ios真机上UI自动化测试
通过appium在ios真机上执行UI自动化测试同样也需要安装WDA,iOS系统由强制的安全机制,所有App包括WDA必须签名才能在真机上运行。在appium官网中给出了创建Provisioning Profile的详细过程。什么是Provisioning Profile?Provisioning Profile是Apple的一种授权机制,它将一个或者多个Apple设备的UDID,一个Apple开发者证书,一个或者多个App的bundleId绑定在一起,告诉iOS系统“这个App可以被允许安装和运行在指定设备上。”所以,如果要在ios真机上运行UI自动化测试,首选需要申请一个Apple的付费账户。接着完成下面的配置。
1.在ios上开启开发者模式,不通的ios版本有所不同,可按版本查看如何开启正机上的开发者模式
2.开发者模式下开启“UI自动化测试”
3.信任这个设备,用USB连接IOS真机后,一般会跳出弹框,点击信任即可
4.Mac和IOS上登录付费的Apple ID账户
5.在xcode上打开WDA项目,安装驱动的时候,默认会安装WDA项目
WDA项目包含在appium-webdriveragent中,而appium-webdriveragent是XCUITest驱动程序的依赖项。因此,您可以在/path/to/xcuitest/driver/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj找到项目文件。默认情况下,驱动程序安装在~/.appium目录下,因此项目文件位于~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj。如果使用的是XCUITest驱动程序4.13.0或更高版本,您可以运行appium driver run xcuitest open-wda脚本,直接在Xcode中打开WebDriverAgent.xcodeproj。在xcode中打开该项目后,默认的bundleId是com.facebook.WebDriverAgentRunner,修改这个bundleID为一个新的bundleId,勾选“Automatically manage signing",修改bundleID后即可生成Provisioning Profile文件。
接着在Product-Scheme中选择WebDriverAgentRunner,Product-Destination中选择目标真机,进行编译运行,即可把WDA安装到目标真机上。
WDA安装好后,即可通过appium驱动完成真迹的自动化测试,当然也可以在Appium inspector中启动应用,查看应用页面所有元素的locator。在ios真机上能看到安装的WDA,如下图所示:
下面就是通过appium inspector启动ios真机,查看被测app的页面元素locator。
在使用ios真机进行UI自动化测试时,通常会使用ideviceinstaller工具。ideviceinstaller是一个开源工具,用于在iOS真机上安装、卸载、管理应用。常用命令如下所示
//安装ipa包到ios真机上
ideviceinstaller -i xx/path/xx.ipa//查看真机上安装的app信息,通常用于查看app的bundleID
ideviceinstaller -l
以上就是通过appium在iOS真机上进行UI自动化测试的配置过程。总结而言,就是需要为WDA项目生产Provisioning profile文件,再安装WDA到目标真机上,这样WDA才能在目标真机上控制任意需要被测试的APP UI。
相关文章:

Appium如何支持ios真机测试
ios模拟器上UI自动化测试 以appiumwebdriverio为例,详细介绍如何在模拟器上安装和测试app。在使用ios模拟器前,需要安装xcode,创建和启动一个simulator。simulator创建好后,就可以使用xcrun simctl命令安装被测应用并开始测试了。…...

JDK17 Http Request 异步处理 源码刨析
为什么可以异步? #调用起始源码 // 3. 发送异步请求并处理响应 CompletableFuture future client.sendAsync( request, HttpResponse.BodyHandlers.ofString() // 响应体转为字符串 ).thenApply(response -> { // 状态码检查(非200系列抛出异常&…...

【Zephyr 系列 8】构建完整 BLE 产品架构:状态机 + AT 命令 + 双通道通信实战
🧠关键词:Zephyr、BLE、状态机、双向透传、AT 命令、Buffer、主从共存、系统架构 📌适合人群:希望开发 BLE 产品(模块/标签/终端)具备可控、可测、可维护架构的开发者 🧭 引言:从“点功能”到“系统架构” 前面几篇我们已经逐步构建了 BLE 广播、连接、数据透传系统…...

【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示
文章目录 前言1. Docker 是什么?2. 为什么要使用 Docker? 安装 Docker1. 安装 Docker Desktop2. 安装 OrbStack3. Docker Desktop VS OrbStack5. 验证安装 使用 Docker 运行项目1. 克隆项目到本地2. 进入项目目录3. 启动容器: 查看运行效果1. OrbStack 中…...

2025-05-01-决策树算法及应用
决策树算法及应用 参考资料 GitHub - zhaoyichanghong/machine_learing_algo_python: implement the machine learning algorithms by p(机器学习相关的 github 仓库)决策树实现与应用决策树 概述 机器学习算法分类 决策树算法 决策树是一种以树状结构对数据进行划分的分类…...

Redis知识体系
1. 概述 本文总结了Redis基本的核心知识体系,在学习Redis的过程中,可以将其作为学习框架,以此更好的从整体的角度去理解和学习Redis的内容和设计思想。同时知识框架带来的好处是可以帮助我们更好的进行记忆,在大脑中形成相应的知识…...

mysql-MySQL体系结构和存储引擎
1. MySQL体系结构和存储引擎 MySQL被设计成一个单进程多线程架构的数据库,MySQL数据库实例在系统上的表现就是一个进 程当启动实例时,读取配置文件,根据配置文件的参数来启动数据库实例;若没有,按编译时的默认 参数设…...
Pycharm 函数注释
1 Docstring format File -> Settings -> Tools -> Python Integrated Tools -> Docstrings -> Docstring format,选择google File -> Settings -> Editor -> General -> Smart Keys -> Insert type placeholders in the documenta…...
如何使用 Redis 快速实现布隆过滤器?
以下是使用 Redis 实现布隆过滤器的两种方案,结合原理说明和操作步骤: 方案一:手动实现(基于 Redis Bitmap) 原理 利用 Redis 的 SETBIT 和 GETBIT 操作位数组,结合多个哈希函数计算位置。 步骤 确定参数…...

黑马Javaweb Request和Response
一.介绍 在 Web 开发中,HttpServletRequest 和 HttpServletResponse 是两个非常重要的类,它们分别用于处理客户端的请求和服务器的响应。以下是它们的详细说明和使用方法: 1. HttpServletRequest HttpServletRequest 是一个接口࿰…...
山东大学深度学习2025年期末考试
一、名词解释(24) 1.反向传播 2.激活函数 3.梯度裁剪 4.数据增强 5.迁移学习 6.过拟合 7.word2Vec 8.注意力机制 二、简答题(48) 1.池化的概念(作用)以及常见的两种池化操作 2.LSTM为什么能解决…...
添加按钮跳转页面并且根据网站的用户状态判断是否显示按钮
现在我们需要的是为页面添加一个按钮,这个按钮是动态的,需要根据网站用户登录过后是否是vip来判断是否显示,然后按钮的效果是跳转到某个页面。 首先我们需要在页面中找到我们需要添加按钮的位置,找到对应的文件,然后比…...

Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错
问题:创建一个本地分支TEST 来关联远程已有分支origin/TEST,直接执行repo sync可能会出现问题:比如,本地分支TES会错乱关联到origin/master,或者拉不下最新代码等问题。 // git checkout -b 新分支名 远程分支名字 git…...

豆瓣图书评论数据分析与可视化
【题目描述】豆瓣图书评论数据爬取。以《平凡的世界》、《都挺好》等为分析对象,编写程序爬取豆瓣读书上针对该图书的短评信息,要求: (1)对前3页短评信息进行跨页连续爬取; (2)爬取…...

Vue ④-组件通信 || 进阶语法
组件三大部分 template:只有能一个根元素 style:全局样式(默认):影响所有组件。局部样式:scoped 下样式,只作用于当前组件 script:el 根实例独有,data 是一个函数,其他配置项一致…...
0x-2-Oracle Linux 9上安装JDK配置环境变量
一、JDK选择和使用 安装完Oracle Linux9.6,同时使用rpm包安装Oracle 23 ai free后, 将面临sqlcl程序无法使用和java无法使用,需要相应进行变量配置问题。 1、java 环境运行不存在,Oracle 23ai free安装后默认安装JDK 11 /opt/…...
深入理解卷积神经网络:从原理到应用
在人工智能领域,卷积神经网络(Convolutional Neural Network, CNN)无疑是计算机视觉领域的璀璨明珠。从 1998 年 Yann LeCun 提出 LeNet-5 实现手写数字识别,到 2012 年 AlexNet 在 ImageNet 大赛上创造历史性突破,CNN…...

从入门到实战:AI学习路线全解析——避坑指南
分享一下阿里的人工智能学习路线,为感兴趣系统学习的小伙伴们探路。 一、谁适合学这门AI课程?五类人群的精准定位 无论你是零基础小白还是职场转型者,这套系统化课程都能为你量身定制成长路径: 零基础爱好者(无编程/数学背景) 课程提供Python和数学前置学习建议,先补基…...
Spring Boot + Thymeleaf 防重复提交
在 Spring Boot 与 Thymeleaf 结合的 Web 应用中,防止重复提交可以采用token 机制 客户端禁用按钮的方式实现,在高并发场景下,考虑使用 Redis 存储 token 而非 Session。 第一步:后端实现 Controller public class FormControl…...

uniapp实现的简约美观的星级评分组件
采用 uniapp 实现的一款简约美观的星级评分模板,提供丝滑动画效果,用户可根据自身需求进行自定义修改、扩展,纯CSS、HTML实现,支持web、H5、微信小程序(其他小程序请自行测试) 可到插件市场下载尝试&#x…...

AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
目标 需要使用AWS Elastic Beanstalk 部署一个Python的Flask Web应用,并且使用CodePipeline作为CI/CD工作流。 eb部署图 前提 假设你已经有一个能够正常运行的Python的Flask Web应用项目代码,而且需要对已有Flask工程做一些调整。由于AWS Elastic Bea…...

多线程语音识别工具
软件介绍 本文介绍一款支持大厂接口的语音转文字工具,具备免配置、免费使用的特点。 软件特性 该工具是一款完全免费的桌面端应用程序,部署于开源社区平台,其核心优势在于整合了多家技术供应商的接口资源。 操作方式 用户只需将音频…...
前端对WebSocket进行封装,并建立心跳监测
WebSocket的介绍: WebSocket 是一种在客户端和服务器之间进行全双工、双向通信的协议。它是基于 HTTP 协议,但通过升级(HTTP 升级请求)将连接转换为 WebSocket 协议,从而提供更高效的实时数据交换。 WebSocket 的特点…...

DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目
参赛成绩 项目介绍 去年参加完这个比赛之后,整理了项目文件和代码,虽然比赛没有获奖,但是参赛过程中自己也很有收获,自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩,现在把这个项目梳理成博客,…...

window安装docker\docker-compose
安装前配置 打开控制面板,参照下图打开“启动或关闭windows功能”,Hyper-V 和容器需要启用 程序和功能 启动或关闭windows功能 勾选Hyper-V 安装路径配置 Docker在Windows上的默认安装路径为C:\Program Files\Docker。 以管理员身份运行CMD在D盘,dev文件夹下创建Docker文…...

Jenkins的学习与使用(CI/CD)
文章目录 前言背景CI/CDJenkins简介Jenkins特性 安装Jenkins工作流程(仅供参考)安装maven和其他插件新建任务任务源码管理配置maven配置git(非必需) 尝试手动构建jar包可能遇到的错误 发布到远程服务器前置清理工作构建触发器git钩…...
vue-14(使用 ‘router.push‘ 和 ‘router.replace‘ 进行编程导航)
使用 ‘router.push’ 和 ‘router.replace’ 进行编程导航 编程导航是使用 Vue Router 构建动态和交互式 Web 应用程序的一个重要方面。它允许您根据应用程序逻辑、用户作或特定条件控制用户的导航流。您可以使用 router.push 和 router.replace 方法以编程方式导航到不同的路…...
使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
Nuget下载之后记得要先引用下面的 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" <!-- 鼠标事件 --> <i:EventTrigger EventName"MouseEnter"/> <!-- 鼠标进入 --> <i:EventTrigger EventName"MouseLeave"/&g…...
Elasticsearch中的监控(Monitoring)功能介绍
Elasticsearch 的 监控(Monitoring) 功能用于实时跟踪集群的运行状态、性能指标和资源使用情况,帮助管理员及时发现潜在问题、优化配置并确保集群稳定高效运行。它通过内置工具和集成方案,提供从节点到集群、从硬件到服务层的全方…...

Centos7.6图文安装mysql8.4详细步骤记录
1 前提条件 1.1 关闭数据库服务器的防火墙 # 关闭数据库服务器的防火墙 systemctl stop firewalld systemctl disable firewalld 1.2 关闭SELinux # 编辑 /etc/selinux/configvi /etc/selinux/config#内容更改为disabledSELINUXdisabled 1.3 卸载系统自身带的mysql&#…...