我正在尝试用 fastlane 截屏。我现在不需要发送到 iTunes Connect。我只想截屏,但我得到“测试失败”。
这是我的快照文件:
# A list of devices you want to take the screenshots from
devices([
"iPhone 6",
"iPhone 6 Plus",
"iPhone 5s",
"iPhone 4s",
])
languages([
“pt”
])
# The name of the scheme which contains the UI Tests
scheme “Consultor”
# Where should the resulting screenshots be stored?
output_directory "./screenshots"
clear_previous_screenshots true # remove the '#' to clear all previously generated screenshots before creating new ones
# Choose which project/workspace to use
workspace “././Consultor.xcworkspace"
还有我的快速文件:
# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# can also be listed using the `fastlane actions` command
# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`
# If you want to automatically update fastlane if a new version is available:
# update_fastlane
# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "1.88.0"
default_platform :ios
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
cocoapods
end
desc "Runs all the tests"
lane :test do
scan
end
desc "Take screenshots"
lane :screenshot do
snapshot
end
desc "Submit a new Beta Build to Apple TestFlight"
desc "This will also make sure the profile is up to date"
lane :beta do
# match(type: "appstore") # more information: https://codesigning.guide
gym # Build your app - more options available
pilot
# sh "your_script.sh"
# You can also use other beta testing services here (run `fastlane actions`)
end
desc "Deploy a new version to the App Store"
lane :appstore do
# match(type: "appstore")
# snapshot
gym # Build your app - more options available
deliver(force: true)
# frameit
end
# You can define as many lanes as you want
after_all do |lane|
# This block is called, only if the executed lane was successful
# slack(
# message: "Successfully deployed new App Update."
# )
end
error do |lane, exception|
# slack(
# message: exception.message,
# success: false
# )
end
end
# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer
我的项目是用 swift 编写的,还有我的测试类:ConsultorUITests:
//
// SnapshotHelper.swift
// Example
//
// Created by Felix Krause on 10/8/15.
// Copyright © 2015 Felix Krause. All rights reserved.
//
import Foundation
import XCTest
var deviceLanguage = ""
var locale = ""
@available(*, deprecated, message="use setupSnapshot: instead")
func setLanguage(app: XCUIApplication) {
setupSnapshot(app)
}
func setupSnapshot(app: XCUIApplication) {
Snapshot.setupSnapshot(app)
}
func snapshot(name: String, waitForLoadingIndicator: Bool = true) {
Snapshot.snapshot(name, waitForLoadingIndicator: waitForLoadingIndicator)
}
public class Snapshot: NSObject {
public class func setupSnapshot(app: XCUIApplication) {
setLanguage(app)
setLocale(app)
setLaunchArguments(app)
}
class func setLanguage(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("language.txt")
do {
let trimCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
deviceLanguage = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding).stringByTrimmingCharactersInSet(trimCharacterSet) as String
app.launchArguments += ["-AppleLanguages", "(\(deviceLanguage))"]
} catch {
print("Couldn't detect/set language...")
}
}
class func setLocale(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("locale.txt")
do {
let trimCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
locale = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding).stringByTrimmingCharactersInSet(trimCharacterSet) as String
} catch {
print("Couldn't detect/set locale...")
}
if locale.isEmpty {
locale = NSLocale(localeIdentifier: deviceLanguage).localeIdentifier
}
app.launchArguments += ["-AppleLocale", "\"\(locale)\""]
}
class func setLaunchArguments(app: XCUIApplication) {
guard let prefix = pathPrefix() else {
return
}
let path = prefix.stringByAppendingPathComponent("snapshot-launch_arguments.txt")
app.launchArguments += ["-FASTLANE_SNAPSHOT", "YES", "-ui_testing"]
do {
let launchArguments = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) as String
let regex = try NSRegularExpression(pattern: "(\\\".+?\\\"|\\S+)", options: [])
let matches = regex.matchesInString(launchArguments, options: [], range: NSRange(location:0, length:launchArguments.characters.count))
let results = matches.map { result -> String in
(launchArguments as NSString).substringWithRange(result.range)
}
app.launchArguments += results
} catch {
print("Couldn't detect/set launch_arguments...")
}
}
public class func snapshot(name: String, waitForLoadingIndicator: Bool = true) {
if waitForLoadingIndicator {
waitForLoadingIndicatorToDisappear()
}
print("snapshot: \(name)") // more information about this, check out https://github.com/fastlane/fastlane/tree/master/snapshot
sleep(1) // Waiting for the animation to be finished (kind of)
XCUIDevice.sharedDevice().orientation = .Unknown
}
class func waitForLoadingIndicatorToDisappear() {
let query = XCUIApplication().statusBars.childrenMatchingType(.Other).elementBoundByIndex(1).childrenMatchingType(.Other)
while (0..<query.count).map({ query.elementBoundByIndex($0) }).contains({ $0.isLoadingIndicator }) {
sleep(1)
print("Waiting for loading indicator to disappear...")
}
}
class func pathPrefix() -> NSString? {
if let path = NSProcessInfo().environment["SIMULATOR_HOST_HOME"] as NSString? {
return path.stringByAppendingPathComponent("Library/Caches/tools.fastlane")
}
print("Couldn't find Snapshot configuration files at ~/Library/Caches/tools.fastlane")
return nil
}
}
extension XCUIElement {
var isLoadingIndicator: Bool {
return self.frame.size == CGSize(width: 10, height: 20)
}
}
// Please don't remove the lines below
// They are used to detect outdated configuration files
// SnapshotHelperVersion [1.2]
最后,终端日志:
` ▸ 构建 Pods/Alamofire [调试] ▸ 检查依赖关系 ▸ 构建 Pods/Gloss [调试] ▸ 检查依赖关系 ▸ 构建 Pods/JGProgressHUD [调试] ▸ 检查依赖关系 ▸ 构建 Pods/Pods-Consultor [调试] ▸ 检查依赖关系 ▸ 构建顾问/Consultor [Debug] ▸ 检查依赖 ▸ 运行脚本 'Check Pods Manifest.lock' ▸ 运行脚本 'Embed Pods Frameworks' ▸ 运行脚本 'Copy Pods Resources' ▸ 运行脚本 'Run Script' ▸ Building Consultor/ConsultorTests [Debug] ▸检查依赖 ▸ 构建 Consultor/ConsultorUITests [调试] ▸ 检查依赖 ▸ 编译 ConsultorUITests.swift ▸ 链接 ConsultorUITests ▸ 生成“ConsultorUITests.xctest.dSYM” ▸ 触摸 ConsultorUITests.xctest ** 测试失败 **
所有测试 [08:49:30]:退出状态:65 [08:49:30]:测试失败 - 查看上面的日志 [08:49:30]:测试失败,重试 2 次中的 1 次`