1

我正在尝试用 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 次`

4

0 回答 0