0

我想使用Fastlane Snapshot为我的应用程序生成屏幕截图。但是应用程序在第一次启动和之后启动时的行为是不同的。我如何设法获得一致的行为以获取屏幕截图?(这个问题也与我认为的任何 UI 测试所需的一致性有关)

4

1 回答 1

1

您应该使用UserDefaults类来保存应用程序中的数据,以便您可以在测试中存根数据。

如果我们假设你用来查看它是否是第一次启动的 Bool 键是isFirstTime,为了在你的 UI 测试中存根它,你应该将它传递给launchArguments跟随值YESNO(对于 Bool 值)。请注意,我-在键之前添加了符号,这是它的工作方式:

class FirstTimeLaunchTest: XCTestCase {

    let app = XCUIApplication()

    override func setUp() {
        super.setUp()
        continueAfterFailure = false

        app.launchArguments += ["-isFirstTime", "YES"]
        app.launch()
    }

    func testWelcomeScreenShown() {
        XCTAssert(app.navigationBars["Welcome"].exists)
    }
}

对于您希望首先跳过的测试,请使用此类:

class LaterLaunchesTest: XCTestCase {

    let app = XCUIApplication()

    override func setUp() {
        super.setUp()
        continueAfterFailure = false

        app.launchArguments += ["-isFirstTime", "NO"]
        app.launch()
    }

    func testMainAppScreenShown() {
        XCTAssert(app.navigationBars["My App"].exists)
    }
}

不过请注意:如果您使用的是SwiftyUserDefaults库,则此解决方案将不起作用。当前版本的库中存在一个问题,其中将字符串转换为并且YES无法按预期工作。有一个PR解决了这个问题(即被拒绝),但是要解决这个问题,您可以从这个答案中查看解决方案 #2 和 #3 。NOtruefalse

于 2017-12-06T15:32:28.977 回答