iOS 真机部署 Appium,没那么简单

关于 Appium 在 Android 设备上的环境部署,请参考我之前写的姊妹篇《Android 部署 Appium,竟如此简单》

相比于 Android,iOS 真机配置真的是太繁琐了,大家做好心理准备

今天的内容,基于 appium v1.15.1,并在 iOS 9.3 及以上版本进行的测试,更低版本的 iOS 不在本文讨论范围中。

硬件环境

  • Mac OS X 系统(Windows 系统本身跑不了 iOS 的 Driver,需要依赖 Mac 上的环境)
  • iPhone(iOS 9.3 及以上,当然其他的 iOS 设备也可以,这里用手机做演示)
  • iPhone USB 数据线

所以连接图示如下:

在这里插入图片描述

软件环境

  • Appium (1.15.1)
  • OS X (10.15.1 Catalina)
  • Xcode(11.2.1 Build 11B500,建议通过 App Store 去安装,自行安装可能遇到不兼容的情况)
  • Homebrew (最新)
  • npm (我这里用到的是 5.3.0,高版本可能会在安装时遇到一些问题)
  • apple id(可以不是开发者账号,我使用的是个人普通账号)

以下工具借鉴了其他安装教程,我在配置初期安装了,不知道是否有起作用,appium-xcuitest-driver 官方文档里没提到,建议安装

  • ios-deploy
  • libimobiledevice

关键的安装步骤

  • Appium
// 此步骤会把 WebDriverAgent 也下载下来
sudo npm install -g appium

如果下载过程出现权限问题,按照如下方式赋权再下载

sudo chmod -R 777 /var/root
sudo npm install -g appium --unsafe-perm
  • Appium doctor(用于检查安装项目是否齐全)
sudo npm install -g appium-doctor

检查命令

$ appium-doctor --ios
  • libimobiledevice
// 此步骤依赖 Xcode,需要先安装 Xcode
brew install libimobiledevice --HEAD
  • ios-deploy
sudo npm install -g ios-deploy  
  • 以下的安装跟 WebDriverAgent 下载的依赖项有关
brew install carthage

gem install xcpretty
  • 下载 WebDriverAgent 依赖项
cd ~/node_modules/appium-webdriveragent

./Script/bootstrap.sh

配置 WebDriverAgent

  • WebDriverAgentLib

我的配置如下,看图作业

在这里插入图片描述

上述,如果是第一次操作,勾选 Automatically 后,Team 处需要先 Add an Account

扫描二维码关注公众号,回复: 10713636 查看本文章

把你个人的 apple id 填进去

在这里插入图片描述

之后界面大致如下

在这里插入图片描述

管理认证

在这里插入图片描述
在这里插入图片描述

  • WebDriverAgentRunner

先修改 Bundle id 为任意的其他值,不能跟原来的 facebook 的一致,否则加签会失败

在这里插入图片描述

签名设置为自动加签

在这里插入图片描述

安装 WebDriverAgent 到 iOS 端

  • 这里先贴一张 Java 客户端的测试代码
DesiredCapabilities desiredCapabilities;
desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("deviceName", "iPhone 6s Plus" );
desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,"iOS");
desiredCapabilities.setCapability("platformVersion", "13.2");
desiredCapabilities.setCapability("udid", "你设备的 udid");
desiredCapabilities.setCapability("bundleId", "com.xunmeng.pinduoduo");
desiredCapabilities.setCapability("app", "/Users/mac/Documents/my_job/appium_test/pdd.ipa");
desiredCapabilities.setCapability("automationName", "XCUITest");

URL url;
try {
    url = new URL("http://192.168.1.251:4723/wd/hub");
} catch (MalformedURLException e) {
    e.printStackTrace();
    return;
}

iosdriver = new IOSDriver(url, desiredCapabilities);
sessionId = iosdriver.getSessionId().toString();

WebElement we = iosdriver.findElementByAccessibilityId("搜索");
if (we != null) {
    we.click();
}

Maven 项目,pom 的依赖包

<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>7.2.0</version>
</dependency>

其中,

platformVersion 跟 Mac 端的 SDK 有关,我的 iPhone 版本号是 13.1.4,当我填写这个值时报错了,提示我本地的 SDK 只有某些值(会列出这些值),我从中选取了一个比较接近的填入(13.2),依然是可以正确执行

udid,不是设备的序列号,可以通过 iTunes 获取,但是 Mac Catalina 版本去掉了 iTunes,可以在 windows 上安装 iTunes 来读取,或者安装一个 iTools 工具(iTools 依赖 iTunes,所以都要安装,但 iTools 下面还有其他用途)

app,我这里使用的是 ipa 包,我的获取方法是,通过在 windows 上安装 iTools 工具,在读取 iPhone 后,通过应用备份的方式,将其导出到 pc 端,得到的就是 ipa 文件。注意这个 ipa 需要放到 Mac 上

bundleId,就是 Android 中的 packageName,我读取 ipa 中该内容的方法是,压缩工具打开 ipa 包,定位到 Payload/xxx.app/Info.plist, 文本工具打开,找到 CFBundleIdentifier,对应的 string 值就是了

在这里插入图片描述

  • Xcode 可视化界面编译并运行 WebDriverAgent

编译 WebDriverAgentRunner

点击 1,下拉框里选择 WebDriverAgentRunner

点击 2,执行编译

在这里插入图片描述

编译成功会提示:Build Succeeded

接下来选择 iOS 设备,通过 USB 连接 Mac 和 iPhone 后,Xcode 中点击 1,下拉框里选择你的设备

在这里插入图片描述

将手机解锁。然后选择 Product-Test

在这里插入图片描述

查看控制台输出,点击下图按钮弹出控制台窗口。

在这里插入图片描述

当出现红框内容时,WDA 已处于等待测试状态。并且手机上会出现一个 WebDriverAge… 的应用图标

在这里插入图片描述

在这里插入图片描述

  • 执行测试代码

命令行里先启动 appium

$ appium
[Appium] Welcome to Appium v1.15.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

运行 Java 测试代码,会执行测试内容,至此,真机上已经可以跑起来了

截取一段 Xcode 上的控制台输出
在这里插入图片描述

实际上,appium 可以自行安装 WDA,但是我在安装过程中,始终遇到签名报错,尝试了各种办法还是无法解决,于是采取手动安装方式。

但是,自动化测试中,每次都手动启 WDA 是不可接受的,于是有了下面的另一种不依赖 appium 的启动方法(当然如果你的机器上可以通过 appium 来安装成功的话,就直接用 appium)

  • 命令行方式编译并启动 WebDriverAgent

在终端里执行命令

cd ~/node_modules/appium-webdriveragent

xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=填写设备的 udid' test

出现类似这样的信息,也表示 WDA 准备就绪
在这里插入图片描述

发布了27 篇原创文章 · 获赞 3 · 访问量 5653

猜你喜欢

转载自blog.csdn.net/candyngwh/article/details/103242480
今日推荐