0%

fastlane入门之snapshot

fastlane是一套ruby脚本工具, 用于实现iOS或Android的持续集成及自动化发布. fastlane的安装及更多相关介绍参见其Github:fastlane)).
本文使用的fastlane版本为2.35.0. 配置fastlane时最好先翻墙,原因你懂的.

本文介绍fastlane的自动截图工具 - snapshot.

初始化snapshot

创建一个包含UITests的工程, 或者在已有工程中新添加一个UITests Target.

命令行cd到工程目录下, 执行fastlane snapshot init.

此时工程目录下会自动生成SnapfileSnapshotHelper.swift两个文件.

Snapfile文件介绍

Snapfile文件用于设置截图时模拟器所使用的型号及系统语言, 比如下面的设置表明分别在iPhone 6和iPhone 6 Plus上使用简体中文进行自动截图:

devices([
   "iPhone 6",
   "iPhone 6 Plus"
])

languages([
  "zh-Hans"
])

SnapshotHelper.swift使用

首先, 将SnapshotHelper.swift文件添加到UITest target中, 如果是objc项目, 则需要使用桥接头文件.

在UITest类的setup方法中添加如下代码:

let app = XCUIApplication()
setupSnapshot(app)
app.launch()

testExample中需要截图的位置添加截图代码:

Swift: snapshot("imageName")
Objective C: [Snapshot snapshot:@"imageName" waitForLoadingIndicator:YES];

例如下面的代码在点击屏幕中心的button后会在出现一个alert提示框, 使用snapshot自动截取alert提示框出现时的截图:

let app = XCUIApplication()
app.buttons["Button"].tap()
snapshot("btnOnClick")
app.alerts["Tips"].buttons["sure"].tap()
snapshot("tapSure")

这里需要注意的是, 由于snapshot是基于UITest的, 当UITest执行时如果界面中存在动画, 则会等待动画执行完毕后才能继续执行. 所以千万不要使用循环动画. 或者, 使用UIView.setAnimationsEnabled(false)关闭动画.

执行snapshot

在完成了上述步骤之后, 命令行执行命令:fastlane snapshot. 此时snapshot会自动加载模拟器完成截图操作. 截图执行完成后可以在项目目录下的snapshot目录找到.