iOS 自动化——技术方案、环境配置

article/2025/8/21 16:17:06


移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实践。

Xcode 下载地址:https://developer.apple.com/download/
下载安装好的图标如下 :

先来看目前主流的 iOS 移动测试框架

  • Appium:目前最常用的 App 自动化测试框架,具备跨平台性
  • Calabash-IOS :BDD 模式,没有过多的了解使用
  • KIF:KIF 使用 XCTest 框架,需要对 Objective—C 、Swift 和 XCTest 掌握程度较高,这个对测试工程师来说学习成本太大
  • XCTest:苹果官方提供的 iOS 测试框架,要求同 KIF 一致
  • WebDriverAgent:由 Facebook 推出的一款 iOS 移动测试框架,也是 Appium 跨平台的底层驱动;WDA 本身也是一个完整的基于 webdriver 协议的框架
  • Uiautomation :在 Xcode8 后废弃

之前的 Android 自动化我们选择的是 Appium 框架作为底层的驱动框架,当时就介绍说 Appium 的优点之一就是跨平台性,其实也就是因为其底层封装了 WebDriverAgent,而我们期望的是:

  • 做一套可以跨平台支持的 App 测试方案,可以在公司的 Android 和 iOS 版本间自由切换测试
  • 并且在编程语言上要是测试工程师常用的 Java 或 Python,降低学习成本
    综上原因,那么最终的选择依然是 Appium。

Appium 官方提供了一个演练的 iOS App,以此为例进行演示。

Appium 演练 example 地址:
https://github.com/appium/ios-uicatalog

将项目 clone 到本地后用 Xcode 打开,注意打开 iOS 项目要打开以 .xcodeproj 结尾的文件 。

插入真机,Xcode 上选择真机,在Singing 中添加 AppleID 作为 account,生成一个本地的 Provisioning Profile 和设备上的证书

踩坑:你可能会遇到如下的错误信息


这是因为你的 bundle identifier 不唯一导致,将其修改自定义为一个唯一的 bundle identifier 再尝试即可

Xcode 中选中 Build,Success 后在手机中我们可以看到 UICatalog 已经被成功安装,尝试打开:

踩坑: 苹果对未在 AppStore 中上架的 App 做了限制,默认不受信任,所以我们需要手动将其设置为信任: 设置-通用-描述文件与设备管理

这个时候再打开 App,就可以正常操作运行了

上面介绍了这里是选中 Appium 作为移动测试框架,因此 Appium 相关环境的安装必不可少,具体安装细节可参考另一篇文章:Windows(Win10)、Mac下安装 Appium

另外还需要几个辅助测试工具和命令,依赖工具包安装:

查看模拟器列表:instruments -s devices 运行结果如下,可以看到最前面两行显示的其实是本机的 Mac 和连接的 iPhone 真机,剩下的是模拟器。

查看真机列表:idevice_id -l

安装 App:ideviceinstaller -i demo.app
命令行编译(在做持续集成时候可能会用到):

虽然 Appium 使用WDA作为底层的 iOS 自动化框架,但是由于版本的更新等原因,可能造成 Appium 本身自带的 WDA 会有 bug,因此为了保险起见,先手动下载 facebook 的 WebDriverAgent facebook WebDriverAgengithub

地址:https://github.com/facebookarchive/WebDriverAgent

然后我们进入 WebDriverAgent 进行编译,在 Scripts 下有一个 bootstrap.sh 脚本,执行它即可。

小技巧: 使用 bash -x 命令可以输出更详细的执行过程

踩坑: 安装最后我们可以看到部分依赖安装需要安装 Carthage 这个东西,如果没注意的话就会造成 RoutingHTTPServer 部分文件缺失,后面 build 就会报错 。

通过命令 brew install carthage 安装后再执行 ./Scripts/bootstrap.sh 即可。

根据 WebDriverAgent 官网提供的步骤,将参数替换为我们真机的参数后在真机上尝试build 。


踩坑: 执行完命令后可能会出现如下报错

从报错信息来看,缺少 development team,那么我们回到 Xcode,将 Automatically manage signing 进行勾选后选择一个 Team,注意要进入 WebDriverAgentRunner 中进行设置 。

设置好之后又会出现报错,如下:

这个报错信息就和我们之前提到的一样,bundle indentifler 不唯一,保险起见,这里将项目中所有的 Targets 都进行了修改

修改好之后我们再次 build,之前的问题解决了,不幸的是 build 又 fail 了,又出现了新的报错:

幸运的是在 Google 上一位外国友人轻描淡写的一句话解决了我的问题(感谢外国友人~)

没错,我们在报错出双击,进入到报错代码处,将 assign 改为 strong 后再次 build :

Build succeeded!!!老泪纵横…

最终,再执行

终于在 iOS 真机上看到了 WDA 的身影

上面是我所经历的各种坑,也都是我实测过一步步填平的,下面试我认识的小伙伴踩到的坑和填坑方法,作为补充供记录参考
1)执行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 报错



2)执行时候报 xcodebuild failed with code 65 错误


花了很大的功夫和篇幅,记录 iOS 自动化的准备工作,踩了很多坑,坑不能白踩,后面继续实现 iOS 的自动化测试落地,也欢迎小伙伴一起留言探讨。

更多技术文章


http://chatgpt.dhexx.cn/article/WwoWHVcd.shtml

相关文章

Appium + IOS 自动化环境搭建教程(实践+总结+踩坑)

文章目录 前言IOS 自动化相关框架介绍自动化测试类工具内测发布工具Appium驱动IOS测试原理关于 WebDriverAgent 基础环境搭建基础环境 安装内容前提环境通用环境iOS 环境iOS 真机调试环境配置IOS自动化-WebDriverAgent-APPIUM框架原理 利用Appium-Python-Client进行iOS的自动化…

基于Appium的ios自动化教程

Appium作为一个开源的、跨平台的自动化测试工具,适用于测试原生或混合型移动App,它使用WebDriver协议驱动IOS,Android和Windows应用程序,本篇文章介绍实现ios自动化测试 01、Appium实现iOS自动化测试 01、启动应用 填写 capabi…

从0开始的ios自动化测试

最近由于工作内容调整,需要开始弄ios自动化了。网上信息有点杂乱,这边我就按我的实际情况,顺便记录下来,看是否能帮到有需要的人。 环境准备 安装tidevice pip3 install -U “tidevice[openssl]” 它的作用是,帮你绕…

iOS自动化测试之基于模拟器的自动化测试

本文来自霍格沃兹测试开发学社 本文节选自霍格沃兹测试学院内部教材 本章节主要讲解 WebDriverAgent 环境搭建以及如何通过 iOS模拟器完成自动化。 WebDriverAgent简介 WebDriverAgent 是在 iOS 客户端启动了 WebDriver 的 Server,借助这个 server,可以…

【iOS自动化测试】第二章:环境安装

环境依赖 本文采用Win下搭建Appium环境调试iOS设备,Mac下结合jenkins运行出报告 Appium Desktop(提供元素定位,服务等) Appium Desktop 下载地址python3(代码脚本编写)Web DriverAgent Appium根据Facebookw…

iOS代码设计学习

组件设计 组件/模块,可以理解成【独立的业务或者功能单位】。至于这个单位的粒度大小,需要自己把握。当写一个类的时候,应该按照高内聚,低耦合的原则去设计该类,涉及多个类之间交互,运用SOLID原则,或其它已…

IOS 自动化

python airtest poco ios真机 case文件: ExecuteCodeIos.text 废话不多说直接上代码: # # -*- encodingutf8 -*- __author__ "UI自动化 ios 脚本"from airtest.core.api import * from poco.drivers.ios import iosPoco import os# 钉…

IOS自动化测试环境搭建(Python Java)

一、前言 IOS的App自动化测试与Android的一样,也可以用appium来进行。但是IOS自动化依赖苹果的osx系统、Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机。Appium的环境配置有点麻烦,可能大部分时间都在处理各种稀奇古怪的报错&am…

【iOS自动化测试】第三章:框架设计

框架总体 pytestallureappium 采用po分层设计集成到jenkins运行 框架结构 名称作用备注BasePage存放相应的封装方法基类层Pages页面层用于元素的定位封装页面层TestCases编写测试用例用例层Report存放报告报告层Public公共的调用方法公共层Log日志存放位置日志层Image用于存放…

iOS自动化测试的那些干货

前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改。 大多数的iOS App(没有持续集成)迭代流程是这样的 也就是说,测试是发布之前的最后一道关卡。如果bug不能在测试中发现,那么bug 就会抵达用户,所以测试的完整…

iOS自动化,知识点1

知识点1: 初始化连接手机 1.查找udid和包名 2,appium连接ios手机的条件 from appium import webdriver from selenium.webdriver.common.by import By import timedef test_01():desired_caps dict()desired_caps["platformName"]"iOS&…

2023主流技术 Appium+IOS 自动化测试环境搭建

关于Appium for IOS Appium是目前最主流的app自动化测试技术,能够同时支持IOS、Android平台上的移动应用自动化测试,能支持众多语言,包括:Java、Python、Ruby、JavaScript等;并且Appium是开源免费使用的。 目前网上的…

ios自动化-1阶段

使用pytestwda执行自动化 整体结构代码层级 #目前待改进的地方 1.执行速度慢,wda获取dom树的效率太低 2.稳定性差,经常会出现一些弹窗导致失败,可参考安卓弹窗处理 watcher() 优化 3.有部分元素定位不到,目前怀疑是层级问题&…

Visio 画流图 程序流图 斜线

如果直接在Visio中选择连接线来连接,会有直角出现,但是我们需要斜线: 解决方法: 选中直角连接线,右键,选择“直线连接线”: 这样我们就能画出想要的斜线了,也就可以画出程序流图了…

Visio设置跨线之间不避让

文章目录 设置方法1. 选中所需设置的直线;2. 菜单选中设计;3. 选中连接线;4. 选中显示跨线。 设置方法 1. 选中所需设置的直线; 2. 菜单选中设计; 3. 选中连接线; 4. 选中显示跨线。

Visio画ER图

建立数据库时我们需要考虑数据之间的关系,为了理清数据之间的关系我们需要对数据进行统一的整理。对于较复杂的数据库我们需要建立数据库模型,具体可分为两步:首先对数据库进行结构分析并使用树、表等描述数据,然后分析数据库的操…

visio 教程-绘图技巧、快捷键大全

visio 绘图技巧、快捷键大全,一键对齐 前言一、常用快捷键二、使用技巧对象移动对象复制绘制直线一键对齐 自动排列(非常好用)辅助线对齐图像边缘空白消除word中visio图编辑技巧去掉直线交叉点增加连接点 前言 Visio 是Office软件系列中的负…

visio画太极图

步骤一 添加两个圆,且大圆的半径是小圆的2倍。 步骤二 往小圆添加一条直线作为直径 步骤三 选中小圆和直径,依次点击开发工具–操作–连接,然后选中连接后的小圆,再依次点击开发工具–操作–修建,可以分离出如下所示的两个…

visio拉动线条总是保持直线状态

** 有时候在visio中画图想画直线,但是线条总是会弯折,为了解决和个问题,如下做:鼠标拖住线条的一个端点,按住ctrlshift,线条就只能在水平或垂直方向上移动:** 1、鼠标选择一个端点: 2、按住ctr…

Visio 2013画直线问题总结(折线变直,交叉时产生的交叉桥)

问题1:我们画直线时画出来的是折线,折线变直的方法:选中线条,点击鼠标右键,选择“直线连接线”如下图: 问题2:直线交叉时产生的交叉桥,影响整体美观,去掉交叉桥的方法&am…