从零开发移动端自动化测试框架 理解和使用 WebDriverAgent

cmlanche · 2020年12月07日 · 最后由 难道 回复于 2022年02月11日 · 9780 次阅读

最近要做 iOS 的自动化框架,考察了很多相关 iOS 自动化技术,最终选定 WebDriverAgent,这个 agent 写的真的很亲民,不论接口协议规范和代码清晰度都很好,方便做二次开发。

WebDriverAgent 的由来

WebDriverAgent 也简称 WDA,是一种 iOS 自动化测试的方案,最初由 FaceBook 开发,现在由 Appium 社区团队维护。

熟悉 UI 自动化的同学都应该知道,UI 自动化的核心技术是在端建立一个基于 http 或 socket 的 agent,用于接收 pc 端传递过来的命令并执行命令,这些命令最终通过调用端的 api 来达到操控手机 UI 以及获取 UI 信息的目的。

毫无疑问,WebDriverAgent 也是一样的道理,只是这个名字让人很是疑惑,为啥前缀带了 WebDriver,而不是叫 iOSUIAgent 之类的名字?这是因为 WebDriverAgent 建立之初,它的 http 接口协议都是模仿的 Selenium 的 WebDriver,里面大量的接口都是一样的,当然也有很多是 iOS 特有的命令。

WebDriverAgent 的初步方式

使用方式就不再赘述了,TesterHome 社区有很多相关的讨论,这篇是写的最好的:https://testerhome.com/topics/7220

关键点:

  1. 用 xcode 打开 WebDriverAgent.xcodeproj

  2. 编译执行,如果是在模拟器,不需要收费的签名就可以直接跑,如果是真机,则需要使用付费签名,wda 才能安装到手机

  3. 启动测试:xcode 上菜单依次点击【Product】-【Test】,或者使用命令行:xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS Simulator,name=iPhone 11 Pro Max'

  4. 如果是模拟器,启动就可以使用 wda 了,如果是真机,则需要做一下手机到 PC 的端口映射,使用 iproxy 命令:iproxy 8100 8100,提示waiting for connection就表示映射成功了

  5. 修改 wda 包名和应用名,如下图所示:

image-20201207163543341

  1. 打包:注意当 build 构建成功后,就自动打包成功了(小白的我一直找不到打包的入口),找到包的方法如下
    1. 点击工程目录的 Products - WebDriverAgentRunner.xctest
    2. 在右侧 Identity and Type 复制一下 Full Path
  2. 同一个 wda 包能否跑在不同的手机?我记得是需要手机要做个注册的,TODO

怎么使用 WebDriverAgent

首先要了解 Appium 是怎么用 WDA 的,Appium 其实自己做了一个外部的 wrapper,就是 appium-xctest-driver,它本身对 wda 做了一层包装,其中的一个目的是为了让 appium 的协议都统一化,另外再写了 java-client、Python-client 等包来实现跨语言,这些包提供给用户,让他们能够更方便统一的掉 appium-xctest-driver 提供的接口。

appium 的这套方式不太适合我,封装的太深了,nodejs 框架一层套一层的,很复杂。

我准备自己做一套基于 WDA 的 iOS 自动化测试框架,wda 无非就是一个运行在手机端的 api 服务器,我调试了 99% 的接口,并生成了一个postman 文档,我自己直接实现一个 java-client 来调用这个接口服务就好。

UI 自动化测试框架,无非把握好几个点,首先就是能否获取 UI 控件树,其次能否找控件,再次能否操作 UI 元素,比如输入点击等,WDA 满足所有这些能力,利用这些能力,自己去实现一套 UI 自动化的录制回放逻辑、脚本规则之后,自定义的 UI 自动化测试框架就形成了。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 13 条回复 时间 点赞
fdeferf 回复

消灭了零回复 😂

facebook 官方已经停止维护 WDA 了,项目会被整合到 https://github.com/facebook/idb/ 。建议综合考虑下是否真的要基于原生的 WDA 做二次开发。

能学习下技术是好的,但是对从零开发移动端自动化测试框架这点存疑

陈恒捷 回复

appium 还在一直更新 wda, idb 在使用上问题挺多的,也不方便二次开发

cool 回复

没有相关基础和经验的确容易让人望而生畏

老兄,WebDriverAgent 执行超时,有优化嘛

回复

暂时还没遇到执行超时的情况,是哪个接口执行必现吗?

cmlanche 回复

我们这的产品,必现。那种大数据量的页面。分页下滑很多很多次的那种页面
比如金融产品的 全部 A 股 详细页面。

getpagesource 获取控件树就会卡主是吗

对,经常返回最外层的 xml 后里层是空的,可以试试babytree这款应用的首页就可复现

更想大佬分享下 appium-wda 的结构,以及二次开发的思路和经验

请问用的哪个模拟器

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册