- 安装 Appium
- 安装 Appium 本体
- 安装附加功能
- 真机调试驱动
- ios-deploy
- 准备测试配置信息
- 使用 Appium 进行测试(真机)
- 准备测试用 app
- 手动 Build WebDriverAgent
- 测试是否正常
- 进行测试
- Java 项目实战
- 普通 Maven 项目
- 搭配 TestNg 使用
安装 Appium
安装 Appium 本体
- 安装 node.js,并确保 npm 可用。这里使用 homebrew,做开发的应该都装了。
- 安装检查工具
- 然后运行 iOS 测试的环境检查
- 先看这个 Error running xcrun simctl。结合下面的描述,应该是没检查到我安装的 xcode。执行下面的命令
- 然后再看这个 Carthage was NOT found!。缺了这个软件,那就用 brew 直接安装。
- 最后再运行一次检查,没有问题了。一些 additional 软件包我就不装了。
- 最后直接从这里下载 Appium 即可
brew install node
npm install -g appium-doctor
appium-doctor --ios
我这边的话,是有几个问题需要解决
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
检查一下,没有问题
brew install Carthage
安装附加功能
真机调试驱动
新版本中已经不需要额外安装 libimobiledevice 了,此项可以忽略。具体文档可以看下面的链接
ios-deploy
虽然 libimobiledevice 和 ios-deploy 说是都不用自己装了,但还是需要这个工具查看下手机里安装的 App 的包名,后面需要。
brew install ios-deploy
准备测试配置信息
后续测试中,需要我们准备三个信息:设备udid、xcodeOrgId和xcodeSigningId
- udid 可以在这里找到
- 按照下面的文档,还需要添加 xcodeOrgId 和 xcodeSigningId
可以在证书信息里找到
这个 组织单位
使用 Appium 进行测试(真机)
准备测试用 app
这里推荐 Apple 官方提供的 UIKitCatalog
- 在下面这个链接里下载项目文件
- 编译并运行
- 在 Products 里找到 .app 文件,留作备用
手动 Build WebDriverAgent
如果使用免费开发者账号,由于证书7天过期,所以这一步的部分步骤每周要做一次,具体看下面的步骤
- 找到项目路径,我这边是在这里 Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
- 进入该目录,分别执行下面两条命令更新依赖
- 双击项目文件打开项目
- 更改 WebDriverAgentLib 的包名,随便起,改个不一样的
- 类似的,更改 DriverAgentRunner 的包名,随便起,改个不一样的
- Product - Build
mkdir -p Resources/WebDriverAgent.bundle
如果 Appium 版本低于 1.21.0,还需要执行下面的这条命令
./Scripts/bootstrap.sh -d
然后选择一个签名的 Team
然后选择一个签名的 Team
显示 Build Success 即可
如果出现错误,就把IntegrationApp 也进行相同的操作
测试是否正常
- 插上手机后,在 Xcode 里选择目标设备
- 然后在终端执行下面的命令,注意替换 udid 为手机的
- 如果出现类似下面的错误,执行
- 如果出现下面的错误,WebDriverAgent 可能已经安装到手机上了,但是开发者尚未被信任
- 然后第一次可能会卡住,重启手机,重启 xcode,重来一次就行
- 手机上安装了 WebDriverAgentRunner 即可
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test -allowProvisioningUpdates
找到 App,点开,出现如下提示
在设置 - 通用 - 描述文件与设备管理 里信任开发者
进行测试
以上环境弄好后,就可以使用 Appium 调试了
- 首先打开 Appium,启动服务后点击右上角的放大镜打开配置界面
- 从这里可以获取一个模板,然后改一下设备名和系统版本
- 配置好后,点击 Start Session。在这个页面里就可以看到画面的元素信息,比如当前选中的这个 View 按钮的 xpath 就能看到,后面写 Java 代码控制的时候用得上。
然后就可以看到这个测试实际上是依赖 json 配置信息运行的
这里放一个我用的
{
"platformName": "iOS",
"platformVersion": "14.3",
"deviceName": "iPhone SE (2nd generation)",
"automationName": "XCUITest",
"udid": "xxxxx",
"app": "/Users/flintylemming/Downloads/Appium Test/UIKitCatalog.app",
"xcodeOrgId": "xxxxxx",
"xcodeSigningId": "iPhone Developer"
}
根据自己实际情况修改即可
注意,Apple Silicon 设备可能无法在这个画面里正常显示手机内容
控制台提示如下错误
[HTTP] <-- GET /wd/hub/session/e74f430d-b956-43f6-be15-8cd2a65e666f/screenshot 500 1033 ms - 273
[HTTP]
[iProxy@00008030:8100] The connection has been closed
Java 项目实战
普通 Maven 项目
实际项目中建议准备一个简易的 Maven 项目,这样在遇到问题是可以快速排查是否是环境上出了问题。具体是怎么写的可以看这个视频
基本上就是一个配置 capability 的 base class
和一个进行操作的 class
这边有按照 AccessibilityId 找元素的,有按照 XPath 找元素的,都可以在刚才 Appium 那里面通过监视元素插到对应的值。
搭配 TestNg 使用
可以参考这个视频
简单来说就是 TestNg 有 @BeforeSuite、@BeforeTest、@Test、@AfterTest 和 @AfterSuite。他会按照这个顺序执行你写到里面的代码,然后返回执行结果。你可以再拿这个结果返回给前台什么的。