搭建iOS App自动化环境

一、测试结构介绍

  1. 手机端的WDA Runner(WebDriverAgent)类似于appium测试框架中的 UIAutomator Server,将从客户端接收到的控制命令转换为XCUITest 相关API操作,实现对应用界面的控制。WebDriverAgent应用需要通过xcode编译安装。
  2. usbmuxd是苹果提供的一个服务,用于USB和TCP协议之间的转换,实现在没有网络的情况下也可以连接设备,iTunes和Xcode就使用到了这个服务,所以在环境安装中需要在windows上安装一个iTunes。
  3. WDA的启动使用阿里开源的tidevice工具。
  4. Language Bindings为不同语言的测试脚本,比如基于python语言的facebook-wda,基于go语言的gwda等。

WebDriverAgent原理分析

WebDriverAgent是Facebook 在2015年的 SeleniumConf 大会上推出了一款iOS移动测试框架。它在 iOS 端实现了一个 WebDriver server ,通过这个 server 来实现远程控制 iOS 设备。它主要通过连接XCTest.framework来调用Apple的API实现对设备的操作。

WebDriverAgent采用C/S架构,集成appium使用的WebDriver协议规范,通信协议使用Mobile JSON Wire Protocol。
WDAClient:WDA的客户端,测试库facebook-wda 就是 WDA 的 Python 客户端库,通过HTTP协议(Mobile JSON Wire Protocol)与WebDriverAgent进行通信。
WebDriverAgentRunner:运行在手机上的WDA server,默认监听端口为8100,主要功能包括①接收WDAClient的请求并将操作命令发送给XCTest.framework。②将响应发送给WDA Client

tidevice原理分析

前面介绍了iOS的自动化需要通过WebDriverAgent来实现,一种常见的解决方案是使用xcodebuild来启动WebDriverAgent,而xcode需要Mac系统,也就是必须在MAC上进行iOS自动化测试。
tidevice是阿里开源的一个基于Python的iOS自动化工具,通过逆向iOS通信协议,模拟xcodebuild与手机进行通信,向手机发送特定的指令,来启动WDA,从而可以脱离Mac电脑,能够在Linux、Windows上运行iOS自动化。tidevice基于python实现了libimobiledevice中的功能。
tidevice通过usbmuxd与手机通信来启动WDA,通过建立一个TCP连接到usbmuxd的/var/run/usbmuxd TCP端口,然后usbmuxd将请求发送到USB连接的iPhone上。上面提到的libimobiledevice就是一个跨平台的用于与iOS设备进行通信的库。

以上的测试框架介绍摘自这位老哥的内容: 测试开发小记

二、准备环境

工具及系统 版本信息 描述
macOS 12.4 macOS系统
Xcode 13.4 macOS开发工具
iOS设备 iPhone 6 12.1 iOS测试设备
WebdriverAgent v3.14.0 iOS通信服务
tidevice 0.7.14 Windows逆向通信iOS工具
facebook-wda 1.4.6 iOS测试框架
weditor 0.6.5 查看UI元素工具
iTunes 12.12.4 Windows连接苹果设备工具

下载WebDriverAgent

打开以下链接,下载WebdriverAgent,由于我们这里的测试设备和编译工具版本限制,这里 选择3.14版本
Download WebDriverAgent

安装Xcode

打开app store然后搜索Xcode进行安装

安装完成后给Xcode,添加开发者账户Xcode–>Preference–>Accounts,添加一个开发者账号

开打苹果官网开发网站苹果开发官网,登录该开发者账号->Certificates, Identifiers & Profiles->Devices,确保要测试的Device的IDENTIFIER已添加,如果没有需要添加

连接iOS测试设备

将iPhone连接到windows机器,这个时候虚拟机会弹出将当前的USB设备连接到主机还是虚拟机,这里我们选择虚拟机,然后点击确定

连接成功后会如下显示

编译WebDriverAgent

将下载好的WebDriverAgent拷贝到macOS后然后直接双击WebDriverAgent.xcodeproj文件

第一步选择WebDriverAgent->Info,设置iOS Development Target,由于测试iPhone系统是12.5.5,这里我们选择12.0即可

Build Settings->Deployment (unnamed domain)->iOS Deployment Target->iOS 12.0,此处可能不太准确

Build Settings->Packaging->Product Bundle Identifier->设置唯一的Bundle Identifier(后续都使用这个Bundle)

第二步选择WebDriverAgentLib->General, Bundle Identifier为刚刚设置唯一的Bundle,Deployment Info设置为iOS 12.0

WebDriverAgentLib->Signing&Capabilities,勾选Automatically manage signing, Team选择开发者账户,Bundle Identifier填写之前设置的唯一Bundle

WebDriverAgentLib->Build Settings,设置Deployment和Packaging


第三步设置WebDriverAgentRunner,首先打开Signing&Capabilities
然后同样设置Build Settings当中的Deployment和Packaging


WebDriverAgentRunner->Info->Bundle Identifier,继续填写保持一致的Bundle

第四步设置Build程序

第五步选择要build的设备


第六步,点击Build

Build成功后查看状态

Build成功后点击Test,这个时候测试设备上WebDriverAgentRunner-Runner已成功安装

设置WebDriverAgentRunner-Runner

打开iPhone设置->通用->设备管理->信任开发者App

Windows安装iTunes

访问官网下载iTunes: Download iTunes,选择Windows10 64位下载并安装
安装完成后点击左上角的手机图标,确认windows已连接成功

安装tidevice

该工具要求python环境3.6+
切换到你的项目目录,使用pip3命令来安装tidevice,安装成功后设置全局环境变量

pip3 install -U "tidevice"

使用以下命令查看tidevice是否安装成功

tidevice version
tidevice version 0.7.14

查看当前设备是否可以列举出

tidevice list
UDID                                      NAME     MarketName    ProductVersion    ConnType
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  iPhone6  iPhone 6      12.5.5            usb

查看安装应用

tidevice applist

使用tidevice启动WDA

tidevice -u [设备 udid] wdaproxy -B [wda BundleID通过tidevice applist读取] --port 8100


运行成功后打开浏览器访问: http://127.0.0.1:8100/status

这个时候可以测试一下tidevice功能 ,打开iOS的设置

tidevice launch com.apple.Preferences

运行以上命令如果可以打开设置则通信成功

获取UI元素

使用和Android一样的元素捕捉工具weditor,项目内安装weditor

pip3 install -U "weditor"

安装完成后,项目内直接运行weditor,如果未设置项目路径为全局环境变量,则无法在其他路径运行

facebook-wda自动化

facebook-wda基于python语言,没有像appium那样启动一个中间服务appium server,这也是appium支持多语言的原因。facebook-wda相比appium更加简洁,功能也比较多,appium有的功能基本都提供了。
安装

pip3 install -U facebook-wda

测试:

import wdac = wda.Client('http://localhost:8100') # 8100为启动WDA设置的端口号
c.session().app_activate("com.apple.Preferences")  # 打开设置

如果这两行代码运行完iPhone的设置被打开了,则成功

以上iOS的自动化测试环境搭建完成

PS:之前也试过使用Appium进行自动化,但是使用过程中发现Appium的捕捉UI工具Start Session始终连接不上,同时WDA is not response in 30 second, check again after 1s,折腾好久也没找到解决办法,也许是WDA安装的还是有问题吧,如果有知道的也可以告诉我一声

[facebook-wda]搭建iOS App自动化环境相关推荐

  1. Python+Appium APP自动化环境搭建

    Python+Appium之APP自动化环境搭建 1.安装node.js (1)一直点击下一步即可 (2)配置环境变量 (3)输入npm --version 安装成功 2.安装appium-docto ...

  2. App自动化环境配置及安装

    第一步 我们先确认你的python 是否是3.0以上的版本 然后我们进入pychar项目,下载外部库:Appium-Python-Client 在终端输入命令 pip install Appium-P ...

  3. Java自动化测试(app自动化环境搭建 31)

    Appium 官网:http://appium.io/ github:https://github.com/appium/appium Appium is an open source test au ...

  4. Appium搭建MacOS环境下的iOS App自动化测试环境(Windows搭个MacOS虚拟机就行,亦无须iPhone)

    前言 经过上篇文章<Windows上Appium自动化测试Android应用>的介绍,我们已经学习App自动化测试的基本知识,接下来我们来学习如何对iOS进行基于Appium的自动化测试. ...

  5. 【Python自动化测试32】App自动化环境搭建

    文章目录 一.前言 二.安装与环境搭建教学 2.1 环境依赖 2.2 appium程序安装 2.3 appium-python-client 2.4 模拟器安装 2.5 java jdk安装 2.6 ...

  6. python运维脚本部署jdk_基于Java/Python搭建Web UI自动化环境

    Java搭建UI自动化测试环境 下载JDK8 https://www.cnblogs.com/thloveyl/p/12378124.html 配置Java环境 1.解压Jdk压缩包 2.配置环境变量 ...

  7. Mac下搭建手机APP开发环境(HBuilder X ,HTML5plus Runtime,MUI,springboot)

    本文介绍Mac安装开发环境不包括创建springboot等代码相关,只涉及软件安装以及搭建APP测试环境(hbuilder连接nox). 第一步:下载 夜神手机模拟器 :http://www.pc6. ...

  8. python123app_Python实现iOS APP 自动化打包

    一 各种打包方法简介: Xcode 打包: XCode -- > Product --> Archive 常规打包方式,需要提前配置好签名信息. 2.提取工程目录Products下的.ap ...

  9. IOS app自动化

    无线客户端的发展很快,特别针对是android和ios两款无线操作系统的客户端应用,相应的测试工具也应运而生,这里主要给大家介绍一些针对 iPhone App的自动化测试工具. 首先,我们把这些测试框 ...

最新文章

  1. 你为世界杯而战,我为生活而战!
  2. 大型网站架构系列:电商网站架构案例(2)
  3. Vue学习笔记第一天--es6
  4. Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
  5. 【CodeVS】1083 Cantor表
  6. 疯子的算法总结10--最小生成树Kruscal
  7. 笔记本电脑频繁自动重启_电脑为何总是自动重启 电脑自动重启原因【解决方法】...
  8. 3个关键维度读懂 [社区团购产品设计]
  9. 20210319_23期_心跳检测_Task02_数据探索性分析
  10. day11_rabbitmq和redis
  11. 数字孪生|数字孪生装备-关键技术和发展阶段
  12. Google Play 应用上架流程(2020版)
  13. 对挣钱与财富等三个问题的思考
  14. 45-js操作DOM和bom操作
  15. 路由器温度测试软件,【美国网件 R8500 无线路由器产品测试】信号|速度|温度_摘要频道_什么值得买...
  16. 如何用C++开发STM32?
  17. CSS Grid 布局
  18. 十进制转化为16进制
  19. mysql 1075_mysql1075错误_1075报错怎么办_mysql主键冲突怎么办 - 树懒学堂
  20. Autodesk 3ds Max 2012 安装破解图文教程

热门文章

  1. mac tableau 安装mysql驱动
  2. 史上最佳十大游戏排名 魔兽世界位列第十
  3. CISCO PACKET TRACER 实验:以太网连接Internet
  4. 数据分析中常见的存储方式
  5. 操作系统春招面试复习之:设备管理
  6. CString彻底分析,很强悍的啊
  7. excel使用教程_汉字资料如何进行数据分析?Excel中医学汉字资料转化为数字资料视频教程——If/Iserror/Find函数的结合使用...
  8. windows防火墙设置_Windows防火墙:您应该知道的事情
  9. 如何TIA博途中更新HSP硬件目录?
  10. Unity Gate Fit