IOS开发-基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建

iOS自动化测试实践
本文介绍了一种基于WebDriverAgent服务的iOS自动化测试方案。该方案利用WebDriverAgent作为远程控制iOS设备的server,支持真机和模拟器,实现了启动应用、元素定位及操作等功能,并通过测试脚本实现自动化测试。

导引

iOS自动化测试一直使用的appium,iOS系统升级至10.0 Xcode8.0之后,改用WebDriverAgent代理服务作为server,编写了一套基于WebDriverAgent服务 app客户端自动化框架。并实现了自动化测试app的demo。


一:整体框架设计

首先是WebDriverAgent服务原理以及WDAClient以及ruby测试脚本调用框架图如下:
这里写图片描述

二:WebDriverAgent

WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。

它有如下特性:
  • 真机和模拟器都支持
  • 实现了大部分的 WebDriver spec
  • USB support for devices,所谓的usb支持,指的是设备不需要上网,目前client binding 还没有。
  • 提供了一个 Inspector
  • Easy development cycle as it can be launched & debugged directly via Xcode
  • Unsupported yet, but works with tvOS & OSX
运行和使用:

WebDriverAgent Facebook发布的,这里有详细介绍:https://github.com/facebook/WebDriverAgent/

直接下载下来,Xcode8中调试一下;连接真机运行test 手机端就会安装好server-WebDriverAgent

(具体教程test而Home上有的:https://toutiao.io/posts/404649/app_preview)

Demo运行后的界面显示:

主界面:

这里写图片描述

Alerts界面:
这里写图片描述

Attributes界面:
这里写图片描述

Scrolling界面:
这里写图片描述

三 :WDAClient

WDAClient是基于WebDriverAgent实现的WDA的客户端。至目前完成了被测app的启动,根据不同属性定位元素 以及元素的点击 输入等基本操作。

具体实现:

 1. 首先:启动webdriveragent;

 2. app启动:

   向WebdriverAgent发送post请求 ,请求参考WDA项目中 FBSessionCommands.m 

   请求地址:url=http://#{ip}:8100/session,WevDriverAgent会响应启动app,并返回session数据;

 3.启动app后,定位元素以及操作元素

    定位元素 post请求:url+/session/element, 请求参数是定位元素标签以及值 参考 FBFindElementCommands.m;响应会返回elementId

    操作*元素post请求:url+/session/element/id/*  参考项目中文件:/Commands/FBElementCommands.m  里面介绍了很多元素操作的方法 进行相应的转换即可。

在WebDriverAgentLib/Commands/中有很多方法,目前只实现这么多,后续将模块补充完整;

四:Testing Script

WDAClient封装完成之后,就是自动化测试脚本实现。


安装WebDriverAgent笔记注意点

在安装WebDriverAgent时遇到了不少坑,小小的记录下。最初参考的是这个地址来安装,很详细;

1、WebDriverAgent教程在github上时有的在xcode打包之前一定记得要先执行 ./scripts/bootstrap.sh,至于证书什么的,使用自己个人账号就好了

2、ios10后就不能直接访问http://127.0.0.1:8100/inspector了,需要通过usb与手机通讯好才能使用;即使用iproxy来转发端口;

转发方法:iproxy <本地端口> <手机端口> [udid];一台机子时可以不写udid;执行转发方法后控制台显示:waiting for connection

3、执行好2后,在浏览器中执行http://localhost:8100/inspector;就可以获取到元素信息了

<think>好的,我现在要回答用户关于如何使用Python和XCUITest进行iOS自动化测试的问题。首先,我需要回顾一下用户提供的引用内容,看看是否有相关的信息可以利用。 用户提供的引用[1]提到使用facebook-wda(WebDriverAgent)和Python进行iOS自动化测试,这可能是关键。引用[3]提到了使用xcodebuild命令行工具构建WebDriverAgent到真机,而引用[4]则讨论了Appium的设计哲学,这可能与XCUITest有关联,因为Appium底层可能使用XCUITest框架。 接下来,我需要确定XCUITest和Python结合的方法。XCUITest本身是苹果的UI测试框架,通常与Xcode和Swift/ObjC配合使用。但用户想用Python,所以可能需要通过WebDriverAgent这个中间层来实现,因为WebDriverAgent允许通过HTTP协议发送命令,这样可以用Python发送HTTP请求来控制iOS应用。 引用[1]中的解决方案正是使用了Python和WebDriverAgent,而WebDriverAgent底层可能依赖XCUITest。因此,步骤可能包括搭建WebDriverAgent环境,安装Python库如facebook-wda,然后编测试脚本。 需要详细步骤:环境准备(Xcode、Homebrew、Carthage、node.js、Appium等),配置WebDriverAgent项目,启动服务,然后用Python库连接设备并执行测试。 同时要注意,引用[2]提到iOS测试只能在MacOS执行,所以必须确保用户有Mac环境。此外,引用[3]的命令行构建可能需要用到,比如启动WebDriverAgent服务。 可能需要示例代码展示如何用Python调用WDA的API,比如启动应用、查找元素、点击等操作。同时,引用中的信息需要正确标注,比如引用[1]和[3]关于环境配置和命令行启动的部分。 最后,生成相关问题,可能涉及其他框架对比、真机测试注意事项、常见问题解决等。</think>### 使用Python和XCUITest实现iOS自动化测试的方法 #### 核心原理 通过**WebDriverAgent(WDA)**作为中间服务层,将XCUITest的能力暴露为HTTP接口,Python通过调用这些接口实现自动化操作[^1][^3]。 --- ### 具体步骤 #### 1. 环境准备 - **MacOS系统**(iOS自动化测试必须运行在Mac环境中)[^2] - **Xcode**:安装最新版本并配置开发者账号 - **Homebrew**:安装依赖管理工具 ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` - **Carthage**:用于构建WebDriverAgent ```bash brew install carthage ``` #### 2. 配置WebDriverAgent 1. 克隆仓库 ```bash git clone https://github.com/facebook/WebDriverAgent.git ``` 2. 使用Xcode打开项目文件`WebDriverAgent.xcodeproj` 3. 配置签名: - 选择`WebDriverAgentRunner` Target - 设置**Team**为开发者账号 - 修改Bundle Identifier(需唯一) #### 3. 启动WDA服务 通过命令行启动服务到真机[^3]: ```bash xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=设备UUID' test ``` 服务启动后,访问`http://localhost:8100/status`验证是否成功。 #### 4. Python环境配置 安装`facebook-wda`库(Python封装WDA接口的工具): ```bash pip3 install facebook-wda ``` #### 5. 编测试脚本 ```python import wda # 连接设备 client = wda.Client('http://localhost:8100') # 启动App(以Safari为例) session = client.session('com.apple.mobilesafari') # 定位元素并操作 search_field = session(text='搜索或输入网址') search_field.click() session.send_keys("https://www.example.com") # 截图保存 session.screenshot('screen.png') # 关闭会话 session.close() ``` --- ### 关键注意事项 1. **设备授权**:首次连接真机需在设备上信任开发者证书 2. **端口转发**:若通过WiFi连接设备,需使用`iproxy`转发端口 ```bash iproxy 8100 8100 设备UUID ``` 3. **元素定位**:使用Xcode的`Accessibility Inspector`获取元素标识 --- ### 对比其他方案 | 方案 | 优势 | 局限性 | |------|------|--------| | **XCUITest+Python** | 直接调用系统级API,性能高 | 依赖Mac环境,需源码签名权限 | | **Appium** | 跨平台支持,生态完善 | 需额外服务层,性能较低[^4] | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值