fastlane是一套ruby脚本工具, 用于实现iOS或Android的持续集成及自动化发布. fastlane的安装及更多相关介绍参见其Github:fastlane)).
本文使用的fastlane版本为2.35.0. 配置fastlane时最好先翻墙,原因你懂的.
本文介绍fastlane的自动截图工具 - snapshot
.
初始化snapshot
创建一个包含UITests的工程, 或者在已有工程中新添加一个UITests Target.
命令行cd到工程目录下, 执行fastlane snapshot init
.
此时工程目录下会自动生成Snapfile
和SnapshotHelper.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目录找到.