[facebook-wda]搭建iOS App自动化环境

news/2024/11/17 9:42:03/

搭建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设备进行通信的库。

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

二、准备环境

工具及系统版本信息描述
macOS12.4macOS系统
Xcode13.4macOS开发工具
iOS设备iPhone 6 12.1iOS测试设备
WebdriverAgentv3.14.0iOS通信服务
tidevice0.7.14Windows逆向通信iOS工具
facebook-wda1.4.6iOS测试框架
weditor0.6.5查看UI元素工具
iTunes12.12.4Windows连接苹果设备工具

下载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安装的还是有问题吧,如果有知道的也可以告诉我一声


http://www.ppmy.cn/news/586275.html

相关文章

Windows上实现iOS APP自动化测试:tidevice + WDA + airtest

在Windows上实现iOS APP自动化测试:tidevice WDA facebook-wda / appium中介绍了使用阿里开源的tidevice 和 facebook-wda实现在Windows上进行iOS APP自动化测试。本文介绍如何使用tidevice WDA airtest进行iOS APP自动化测试。 目录 环境准备airtest iOS 自动化…

AWD攻防技巧(水文)

1.数据备份 比赛开始第一时间备份,备份网站目录及数据库,一般在 /var/www/html 目录。 一是为了dump下来,用D盾查杀存在的后门;安装sublime全文搜索关键字 二是为了比赛出现异常或恶意破坏进行还原,避免靶机宕机被扣…

WDS服务

二:WDS服务 预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存…

WDA 学习笔记(四) layout

WDA的页面布局一般通过各种component layout来控制的.WDA提出MVC的概念还是比较超前的,但是受限于庞大而复杂的底层架构,UI的设计不发做到元素级别的CSS控制,基本上整体样式比较单一,对于行间距、列间距、字体、边框、线条、按钮等…

Windows上实现iOS APP自动化测试:tidevice + WDA + facebook-wda / appium

本文介绍如何在Windows下构建iOS APP自动化测试环境,采用的主要工具为tidevice,WebDriverAgent,facebook-wda或者appium。 目录 测试架构介绍 WebDriverAgent原理分析tidevice原理分析iOS 设备安装 wda 1、安装Xcode2、下载WebDriverAgent3、…

Origin如何绘制三维离散点并拟合曲面?

文章目录 0.引言1.准备数据2.三维离散点参数设置并绘图3.拟合曲面参数设置并绘图 0.引言 在数据统计分析中,有时希望知道一个因变量在两个自变量变化情况下的变化情况,这时可以绘制散点图,观察基础情况,进一步可以拟合散点&#x…

一文详解如何用GPU来运行Python代码/基于Python自制一个文件解压缩小工具

前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐,感兴趣的小伙伴快跟随小编一起了解一下吧 简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用…

【算法题】剪绳子、计算二进制中1的个数、数值的整数次方

剪绳子、计算二进制中1的个数、数值的整数次方 一、剪绳子1.1、题目描述1.2、思路1.3、代码实现:1.4、华丽的快速幂取余1.5、小结 二、数值的整数次方2.1、题目描述2.2、思路2.3、代码实现2.4、小结 三、计算二进制中1的个数3.1、题目描述3.2、思路3.3、代码实现3.4…