区分UI测试的首次发布

问题描述 投票:0回答:1

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

xcode-ui-testing fastlane-snapshot
1个回答
1
投票

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

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

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库,则此解决方案无效。当前版本的库中存在一个问题,即将YESNO字符串转换为true并且false未按预期工作。有一个PR解决了这个问题(被拒绝),但要解决这个问题,你可以看看this answer的解决方案#2和#3。

© www.soinside.com 2019 - 2024. All rights reserved.