本篇文章是关于如何使用Appium + WDA + Python在真实iOS设备上进行自动化测试的系列教程的下篇。

如果您已经阅读了本教程第一部分,并按照其中的配置设置好环境。那么现在让我们来继续学习如何编写Appium脚本并运行在iOS设备上。

Appium在iOS设备上运行原理

在任何设备界面层进行自动化测试,都应该关注如何启动该测试程序、同时还要考虑如何让另一个程序可检查到被测应用程序界面上显示的内容并与之交互。

对于iOS测试而言,操作系统上有非常严格的安全要求,其目的就是为了防止一个应用程序查看另一个应用程序中的情况。但为了能给被测应用提供可被测试的功能,苹果官方提供了XCUITest框架。

它的工作原理是,Xcode可以构建一个名为”XCUITest Runner”的特殊应用程序。XCUITest Runner应用程序可以访问一组特殊的系统功能API,这些功能可以查看另一个应用程序的UI元素并与之交互。这些特殊函数被称为XCUITEST API,但是官方值提供了较少的API文档介绍。

运行测试时,Xcode将在测试设备上安装AUT(被测程序)和Runner应用程序。Runner应用程序是一个特殊的软件包,其中包括我们编写的实际测试脚本,以及AUT的名称。Xcode告诉设备启动Runner应用程序,Runner应用程序启动AUT。Runner应用程序和AUT都在设备上处于活动状态。Runner应用程序不可见,在后台工作,而AUT显示在屏幕上。

AUT启动后,Runner应用程序会查看其测试列表并运行每个测试脚本,查看AUT的UI,并调用特殊的XCUITest API函数进行点击、滑动和输入等测试操作。

Appium测试框架,希望能提供一种动态发送命令并让Runner执行测试的能力,而不是像XCUITest需要每次将被测应用编译并嵌入到测试程序内部,不能对测试脚本进行动态编辑。Appium需要能够控制设备,而不是遵循预定的脚本。Facebook团队解决了这一问题,并发布了一个名为WebDriverAgent(WDA)的特殊测试框架。从本质上说,WDA是一个Runner同时也是一个等待接收数据的服务器,它打开与外部世界的连接,等待向其发送命令,并将命令转换为现有的XCUIEST API方法。此外,WDA的服务设计遵循WebDriver协议来设置这些命令的格式,这样可以保证与Selenium、Appium的测试命令的协议相同。

这意味着当Appium测试运行时,他们使用Appium客户端向Appium服务器发送WebDriver命令。Appium服务器将在iOS设备上安装AUT和WDA,等待WDA启动,然后将测试命令转发给WDA。WDA在设备上执行XCUITest API函数,实现测试脚本与iOS设备的UI交互。

Appium Capabilities

现在我们知道了Appium的工作原理,上一篇文章我们已经让被测应用可以在设备上运行,下面需要做的就是配置正确的Appium capabilities:

Copy to Clipboard

对应的capabilities 用法:

  • platformName: iOS
  • platformVersion: iOS系统版本
  • deviceName:  设备名称
  • udid: 设备的唯一ID
  • bundleId: 测试应用的唯一ID

更多的capabilities 参数及应用,请参考:link

编写并运行脚本

编写脚本时,只需要实例化一个Appium驱动,并使用Appium对象提供的API完成测试脚本、测试流程的组装,你可以参考下面的步骤来运行测试脚本:

  1. 启动Appium服务器,并配置capabilities
  2. 确保设备已解锁,如果需要“信任计算机”,请点击按钮信任电脑。
  3. 运行你编写的Python代码,并指向Appium服务器
Copy to Clipboard