Mac搭建Airtest iOS自动化测试环境

1.硬件准备

  • 一台Mac电脑

  • 一台iPhone手机

2.Mac电脑安装Xcode

在App store搜索Xcode,点击下载安装。
PS:连一个给力的WIFI,Xcode安装包大约11G左右。我安装的是Xcode12.3。

3.运行iOS-Tagent

iOS-Tagent 是基于 WebDriverAgent 项目上进行开发的,可以在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素。

3.1 下载iOS-Tagent到本地电脑

git clone https://github.com/AirtestProject/IOS-Tagent

注意:该项目存在github中,如果使用SSH方式clone,可能会提示权限不够,可以使用https方式下载。

3.2 使用Xcode 打开iOS-Tagent,用数据线连接iPhone至Mac

  • 连接iPhone后,在iPhone设备上会弹出“是否信任Mac设备”,选择信任

  • 使用Xcode 选择项目,打开WebDriverAgent.xcodeproj

  • 在菜单栏选择项目:product -> Scheme -> WebDriverAgentRunner

  • 在菜单栏选择设备:product -> Destination -> 选择你的真机

3.3 使用苹果账号或苹果开发者账号,登录Xcode,并注册真机设备

  • 左侧导航栏,选择 WebDriverAgentRunner -> TARGETS -> WebDriverAgentRunner -> Signing & Capabilities -> Team

  • 选择 Team -> Add an Account -> 登录苹果账号(个人免费或开发者账号)

    可以使用公司的开发者账号,需要管理员把自己的Apple ID加到group中。

  • 选择 TARGETS -> WebDriverAgentRunner -> Build Settings -> Basic

  • 双击 Product Bundle Identifier值,填写一个属于自己独一无二的字串(随便填,不重复就行)

    回到,上文提过的Signing & Capabilities界面,查看有无报错

  • 无报错,则继续;若有报错,查看 登陆开发者账号

3.4 启动Test

  • 在菜单栏 product -> Test,当你看到以下日志的时候,代表 iOS-Tagent 已经启动成功了

  • 过程中,Xcode可能会请求密码权限或其他权限 —> 全部允许 —> 不要拒绝,拒绝可能会带来奇妙的异常

日志如下:

  • 此时手机上生成一个WDA应用包:

4.设置代理

iproxy 可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了。

一般情况下,需要通过设置usb代理的方式访问手机上的Agent,直接通过wifi对手机进行访问可能会出现问题,具体的原因可以参考 Issues 和 detail。

4.1 通过 Homebrew 安装iproxy

$ brew install libimobiledevice --HEAD

如果未安装homebrew,可以通过以下命令安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

4.2 运行iproxy

$ iproxy 8100 8100

启动成功后,可以试着在浏览器访问 http://127.0.0.1:8100/status ,如果访问成功并且可以看到一些json格式的手机信息,即表示启动成功。

5.Airtest IDE

5.1 下载最新版本Airtest

5.2 使用Airtest连接iPhone

  • 在AirtestIDE的iOS地址栏填入地址 http://127.0.0.1:8100 ,点击 “connect” 连接设备,开始编写你的Airtest测试脚本

通过ip方式连接iPhone,实时刷新界面,可进行UI测试。

Q&A

1.Xcode与Mac OS版本不匹配,App store无法安装Xcode。

**原因:**目前Xcode最新版本是12.3,要求Mac OS系统至少是10.15。

**解决:**先升级Mac OS系统,再使用。

**注意:**如果不升级Mac OS,去网上下载Xcode安装包,可能会因为不是Mac系统应用而无法安装。如果有苹果开发者账号,可以参考这篇文章安装旧版本。

2.Xcode 12.3编译iOS-Tagent报错Building for iOS Simulator , was built for iOS+iOS Simulator

**问题:**运行iOS-Tagent构建失败

**原因:**引用的第三方库是 build for iOS +iOS Simulator 的,不是build for iOS Simulator

**解决方法:**修改当前工程的Workspaces Setting,可以将工程的Build System修改成Legacy Build System。编译可以编译成功。

3.Xcode12.3,iOS14 iPhone运行出错

**问题:**运行iOS-Tagent出错,报错信息:terminating with uncaught exception of type NSException,Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘+[XCTestDriver sharedTestDriver]: unrecognized selector sent to class 0x10131aed8’

**原因:**iOS14没有+[XCTestDriver sharedTestDriver]方法,WebDriverAgent 源代码中,在FBXCTestDaemonsProxytestRunnerProxy方法里面,初始化了proxy对象导致崩溃,因此改掉不需要的初始化判断。

**解决方法:**在原项目的基础上,新建2个文件,FBXCTestDaemonsProxy+Hook.h和FBXCTestDaemonsProxy+Hook.m,内容如下:

//
//  FBXCTestDaemonsProxy+Hook.h
//  WebDriverAgentRunner
//
//  Created by ek on 2021/1/9.
//  Copyright © 2021 Facebook. All rights reserved.
//#import <Foundation/Foundation.h>
#import <objc/runtime.h>@interface XCTRunnerDaemonSession : NSObject+ (instancetype)sharedSession;
@property(readonly) id daemonProxy;@end@interface FBXCTestDaemonsProxy : NSObject
+ (id)testRunnerProxy;
@end
//
//  FBXCTestDaemonsProxy+Hook.m
//  WebDriverAgentRunner
//
//  Created by ek on 2021/1/9.
//  Copyright © 2021 Facebook. All rights reserved.
//#import "FBXCTestDaemonsProxy+Hook.h"
#import <objc/runtime.h>@implementation FBXCTestDaemonsProxy (Hook)
+ (void)load {// load something[self swizzleClassMethod:objc_getClass("FBXCTestDaemonsProxy") orgSel:NSSelectorFromString(@"testRunnerProxy") swizzSel:NSSelectorFromString(@"hy_testRunnerProxy")];
}+ (id)hy_testRunnerProxy {static id proxy = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{Class runnerClass = objc_lookUpClass("XCTRunnerDaemonSession");proxy = ((XCTRunnerDaemonSession *)[runnerClass sharedSession]).daemonProxy;});NSAssert(proxy != NULL, @"Could not determin testRunnerProxy", proxy);return proxy;
}+ (BOOL)swizzleClassMethod:(Class)class orgSel:(SEL)origSel swizzSel:(SEL)altSel {Method origMethod = class_getClassMethod(class, origSel);Method altMethod = class_getClassMethod(class, altSel);if (!origMethod || !altMethod) {return NO;}BOOL didAddMethod = class_addMethod(object_getClass(class),origSel,method_getImplementation(altMethod),method_getTypeEncoding(altMethod));if (didAddMethod) {class_replaceMethod(class,altSel,method_getImplementation(origMethod),method_getTypeEncoding(origMethod));} else {method_exchangeImplementations(origMethod, altMethod);}return YES;
}
@end

文件位置如下:

**参考官方文档:**https://github.com/AirtestProject/iOS-Tagent/blob/master/Introduction/README_zh.md

Mac搭建Airtest iOS自动化测试环境相关推荐

  1. iOS自动化测试环境搭建总结

    1.关于iOS真机和模拟器自动化环境搭建 参考博文: Appium+Python3+iOS真机环境搭建 iOS自动化测试:mac下iOS10 appium测试环境的搭建 IOS + Appium自动化 ...

  2. 最新出炉--IOS自动化测试环境搭建(Python Java)

    一.前言 IOS的App自动化测试与Android的一样,也可以用appium来进行.但是IOS自动化依赖苹果的osx系统.Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机.Appium ...

  3. iOS自动化测试环境搭建

    1 环境准备 1.1 Mac os x 1.2 brew Mac os x的包管理工具,安装方法:终端输入: /usr/bin/ruby -e "$(curl -fsSL https://r ...

  4. mac 搭建python+selenium+chromedriver环境

    mac 搭建python+selenium+chromedriver环境 有关配置默认python3,请查看:https://blog.csdn.net/qq_35098526/article/det ...

  5. iOS自动化测试-环境搭建

    应用场景 想要进行iOS自动化测试,必须进行环境的搭建 需要的环境 macOS系统电脑 Xcode 待测试的iOS项目 appium Desktop python pycharm Download P ...

  6. Robot + Appium 搭建 iOS 自动化测试环境

    一.iOS安装条件  需要建立设定的移动平台运行APPium测试.如以下的平台信息:  Mac OS 10.12.6 Xcode 9 Apple开发工具(IPhone simulator SDK,co ...

  7. android和ios测试环境搭建,iOS自动化测试环境搭建

    macOS相关库安装 * libimobiledevice brew install libimobiledevice 使用本机与iOS设备的服务进行通信的库. * ideviceinstaller ...

  8. win10搭建android monkeyrunner自动化测试环境

    本文记录一下monkeyrunner环境搭建遇到的各种坑,以免以后再次踩坑.首先要提一下巨坑,务必要安装java 8(本文记录于2023.3),安装其他版本java,运行monneyrunner会有很 ...

  9. mac搭建大数据开发环境

    mac安装Hadoop/hbase/spark:https://blog.csdn.net/sunxiaoju/article/details/86183405 mac idea+sbt运行spark ...

  10. 全网最全appium工作原理以及appium自动化测试环境搭建教程

    目录:导读 一.前言 二.Appium简介 三.搭建Appium+Python自动化测试环境 1.安装JDK并配置JDK的环境变量. 2.安装SDK并配置SDK的环境变量. 3.安装夜神模拟器并在模拟 ...

最新文章

  1. 独家 | 综述:情感树库上语义组合的递归深层模型
  2. linux下使用rpm安装libxml2,gcc,gcc-c++等基本包
  3. [转]Linux awk 命令 说明
  4. Android --- Retrofit 之 Okhttp3 网络请求总是调用 onFailure 方法,而不调用 onResponse,报错 timeout。
  5. QML基础类型之vector3d
  6. 利用 fdisk进行分区
  7. oracle转成整型_Oracle中如何用SQL把字符串转换成整型
  8. python编程软件哪个好-python IDE有哪些?哪个好用?
  9. (十八)密度聚类DBSCAN
  10. 2020年互联网大厂中秋礼盒PK!看看你的礼盒怎么样
  11. OpenGL.Superbible.7th.Edition(openGL超级宝典第七版)随书例子运行
  12. Java菜鸟教程怎么用_菜鸟教程 Java 学习笔记 (基础教程)
  13. 各地少先队深入开展红领巾心向党主题教育-少先队-红领巾心向党-主题教育
  14. 优秀的项目经理都会用这60个项目管理工具模板,可直接编辑套用
  15. 对bootstrop中左右浮动设置
  16. 项目一众筹网01_00_项目简介_此项目是SSM过渡到分布式项目(SpringBoot、SpringCloud)、互联网的发展引领了技术的发展、瀑布模型、敏捷开发是什么意思
  17. 木马 + 流氓软件 + 垃圾软件 玩死 Win 2000 pro~
  18. Rokid Pebble若琪月石AI音响支持root
  19. PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION
  20. C++中常用函数总结(头文件)

热门文章

  1. 数据分析报告怎么写?这5个步骤你必须了解
  2. 北京“宇宙中心”二手房挂单6天11次看房破记录
  3. http的CA证书安装(也就是https)
  4. 3.25期货每日早盘操作建议
  5. sql-server(模式创建)
  6. java地铁线路规划_北京地铁线路规划
  7. 完整的ACSII编码表
  8. 关于fat32分区32g限制的问题
  9. php除数不能为零,0为什么不能做除数(为什么0不能作为除数)
  10. WIN7系统电脑关机后自动重启解决方法