WDA

facebook wda

2015年Facebook 开源了一款 iOS 移动测试框架WebDriverAgent,WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。它通过链接 XCTest.framework 并调用苹果的 API 直接在设备上执行命令。这使得它成为应用程序端到端测试或通用设备自动化的完美工具

wda作为任何UITest的捆绑软件启动,WebDriverAgentRunner作为一个后台应用运行在iOS手机上,

ServerURLHere->http://[SOME_IP]:8100<-ServerURLHere即在手机上8100端口启动一个HTTP server,内部就是一个死循环,监听网络传输过来的webdriver协议的数据,解析并处理点击事件

但该项目已经存档(archived),不再维护。2019年5月,Facebook开源了IDB,即“ iOS Development Bridge”,这是一个用于使iOS模拟器和设备自动化的命令行界面。他们正在将自己的内部项目从WDA迁移到IDB,并建议将其检查出来作为替代方案

appium wda

由于facebook wda已经停止维护,现在一般推荐使用fork自 facebook wda的appuim wda

airtest wda

iOS-Tagent也是基于 facebook 的 WebDriverAgent 项目上进行开发的 , 目的是为了对 Airtest Project 提供iOS平台的测试支持,该项目在原项目的基础上进行了定制化的优化和功能调整

XCTestWD

XCTestWD是WebDriver server的Swift版本实现,主要用于Macaca自动化项目,这里不做过多介绍,更多可参考官方文档Macaca面向多端的自动化测试

wda的安装和启动

usbmux、libimobiledevice、usbmuxd及libusbmuxd

  • usbmux是苹果的私有协议,苹果设计该协议的原因是为了自家的macOS APP能够和iDevice进行通信,从而实现诸如iTunes备份iPhone、Xcode真机调试等功能
  • libimobiledevice 是一个使用原生协议与苹果iOS设备进行通信的库,可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了
  • libimobiledevice底层使用的是usbmuxd,usbmuxd(USB multiplexing daemon)是跨平台的与iOS设备多路复用连接的scoket守护进程,该进程的作用是建立本地端口和远程端口的转发,实现usb到tcp的转换服务,根据相关usb协议,客户端将请求包发送到usbmuxd进程,通过usbmuxd转发到对方设备,实现tcp连接。而更底层用的是libusbmuxd,更详细的可点击查看项目中的介绍

安装libimobiledevice

brew install libimobiledevice --HEAD

libimobiledevice常用命令

  • 端口转发:iproxy xxxx yyyy(本地xxxx端口到设备的yyyy端口)

    如将本地8100端口映射到设备端口8100即iproxy 8100 8100,这样就可以通过访问电脑的端口访问到手机的端口了
  • 查看设备系统日志idevicesyslog
  • 查看连接设备信息ideviceinfo

更多参看libimobiledevice Usage

iOS自动化

综上,WDA会在iOS 端实现了一个 WebDriver server,并监听网络传输过来的webdriver协议的数据,通过电脑与手机端口的映射,我们就可以通过电脑发送网络请求到手机上的server,server就能解析并处理点击事件了

tidevice

因此我们需要做的是安装并启动WDA,设置端口转发。在tidevice出现之前,WDA只能通过xcodebuild来启动,而运行xcodebuild则必须有一台Mac才行。tidevice没有通过xcodebuild,而是通过usbmuxd直接跟手机上的服务进行直接通信完成手机上WDA的启动。usbmux在不同的平台都有开源的实现,所以tidevice不仅能在Mac上运行,也能在Linux、Windows上运行

  • 安装WDA

    方法1:(必须mac)将iOS设备与一台Mac连接,然后使用xcode编译源码安装,成功安装WebDriverAgent即可脱离Mac

    方法2:使用tidevice的安装命令,将开发者证书重签名的WebDriverAgent.ipa安装到iOS设备上

  • 运行WDA

  1. tidevice relay,转发请求到手机,类似于iproxy如tidevice relay 8100 8100
  2. tidevice xctest,运行xctest
# 运行XCTEST
$ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner
[I 210127 11:40:23 _device:909] BundleID: com.facebook.wda.WebDriverAgent.Runner
[I 210127 11:40:23 _device:911] DeviceIdentifier: 12345678901234567890abcdefg
[I 210127 11:40:23 _device:773] SignIdentity: 'Apple Development: -Your-Developer-Name-'
[I 210127 11:40:23 _device:840] Launch 'com.facebook.wda.WebDriverAgent.Runner' pid: 239
[I 210127 11:40:23 _device:1003] ProductVersion: 12.4
[I 210127 11:40:24 _device:952] Start execute test plan with IDE version: 29
[I 210127 11:40:24 _device:875] WebDriverAgent start successfully # 修改监听端口为8200, 并显示调试日志
$ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner -e USB_PORT:8200 --debug
  1. tidevice wdaproxy命令,wdaproxy这个命令会同时调用xctest和relay命令,另外当wda退出时,会自动重新启动xctest
# 可通过tidevice applist来获取wda的BundleID
# 运行 XCTest 并在PC上监听8200端口转发到手机8100服务
# facebook-wda
$ tidevice wdaproxy -B com.facebook.wda.WebDriverAgent.Runner --port 8200
# appium的wda
$ tidevice wdaproxy -B com.gameappium.WebDriverAgentRunner.xctrunner --port 8200

可通过在浏览器中访问http://localhost:8200/status来查看WDA是否启动成功

Linux和Windows因为默认没有usbmux这个服务,提前安装一下就可以。可以参考这个issue

启动后你就可以使用Appium 或者 facebook-wda 来运行iOS自动化了

更多关于tidevice可参看tidevice

参考及扩展阅读

更多知识可关注公号:CodeMonkeyJerry

做iOS自动化测试必须知道的一些知识的更多相关文章

  1. 如何使用UIAutomation进行iOS 自动化测试(Part I)

    转自:http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html 写在前面 研究iOS的自动化测试也有些日子了,刚开始的时候,一直苦于找不 ...

  2. mac上搭建appium+IOS自动化测试环境(一)

    阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...

  3. 【Mac + Appium + Python3.6学习(三)】之IOS自动化测试环境配置

    在做这一节之前先配置我的另一篇文章所需要安装的前提准备条件:<[Mac + Appium学习(一)]之安装Appium环境前提准备> 一.安装IOS自动化测试环境 配置环境: Appium ...

  4. iOS自动化测试的那些干货

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

  5. appiumstudio工具-----实现windows上安卓、IOS自动化测试

    博主用的是win10,用python+appium做完安卓的自动化第一个版本后,大量地搜索windows上做IOS自动化的解决办法,有的建议用虚拟机,安装苹果的系统,没有实践过,据说效果不很好.然后, ...

  6. 谈一谈做iOS播放器库开发所涉及的知识点

    在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了. 在那家iOS游戏渠道没做上一年 ...

  7. Airtest结合tidevice实现IOS自动化测试

    这篇博文内容,是基于之前的配置而来的.我们可以先回顾一下之前博文,Windows搭建mac黑苹果系统:WebDriverAgent重签名爬坑记 . 今天来分享下如何通过 tidevice实现IOS自动 ...

  8. 零成本实现Android/iOS自动化测试:基于Appium和Test Perfect

    https://item.taobao.com/item.htm?spm=a230r.1.14.14.42KJ3L&id=527677900735&ns=1&abbucket= ...

  9. Appium Studio 初体验(windows做ios自动化,录制appium脚本)

    偶然的机会遇到了这个工具——Appium Studio, 在官网是这么解释的 Get your Appium testing projects going within minutesInstall ...

随机推荐

  1. leetcode第157场周赛5213

    当时居然没想到,我真菜,就当记录一下了. 思路分析: 分为两种: 第一种:走两步的,无论是奇或偶的位置,只要走两步,代价为0: 第二种:走一步的,就是偶数到奇数,或者奇数到偶数,代价为1: 那么实际上 ...

  2. mongodb常用查询语句(转)

    1.查询所有记录 db.userInfo.find();相当于:select* from userInfo; 2.查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(& ...

  3. CDN相关知识及CDN绕过

    #什么是CDN? 内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.CDN应用广泛,支持多种行业 ...

  4. Linux磁盘管理与文件系统

    文章目录一.硬盘结构二.MBR与磁盘分区表示三.磁盘分区结构四.文件系统类型●1.XFS文件系统●2.SWAP,交换文件系统●3.Linux支持的其他文件系统类型五.命令部分--检测并确认新硬盘●1. ...

  5. 【Tips】IDEA中自己常用的快捷键

    在idea中自己常用的一些快捷键 alt + i; //向上: alt + k; //向下: alt + j; //向左: alt + l; //向右: alt + o; //移至行首: alt + ...

  6. 【LeetCode】203.移除链表元素

    203.移除链表元素 知识点:链表:双指针 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 ...

  7. jquery性能优化建议-上篇

    一.注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading = $('#loading'); / ...

  8. 在线体验 Windows 11「GitHub 热点速览 v.21.30」

    作者:HelloGitHub-小鱼干 有什么比无需安装系统,检测硬件兼容度,只要打开一个浏览器,输入某个神秘的地址回车,即可体验 Windows 11 更棒的呢?windows11 就是这么一个小工具 ...

  9. jenkins资源下载地址(软件、插件等)

    jenkins资源下载地址(软件.插件等) 1. 镜像1:清华镜像 2 .镜像2:http://mirrors.jenkins-ci.org/ 3. 官方下载地址:https://jenkins.io ...

  10. 第四篇--Beyond Compare4 试用期30天后

    30天后删除BCUnrar.dll这个文件,继续使用30天.还有就是注册表中regedit-->HEKY_CURRENT_USER-->Software-->Scooter Soft ...