【发布时间】:2017-12-06 13:16:36
【问题描述】:
我想使用 Fastlane Snapshot 为我的应用生成屏幕截图。但是应用程序在第一次启动和之后启动时的行为是不同的。 我如何设法获得一致的行为以获取屏幕截图? (这个问题也与我认为的任何 UI 测试所需的一致性有关)
【问题讨论】:
标签: xcode-ui-testing fastlane-snapshot
我想使用 Fastlane Snapshot 为我的应用生成屏幕截图。但是应用程序在第一次启动和之后启动时的行为是不同的。 我如何设法获得一致的行为以获取屏幕截图? (这个问题也与我认为的任何 UI 测试所需的一致性有关)
【问题讨论】:
标签: xcode-ui-testing fastlane-snapshot
您应该使用UserDefaults 类来保存应用中的数据,以便您可以在测试中存根数据。
如果我们假设您用来查看它是否是第一次启动的 Bool 键是 isFirstTime,为了在您的 UI 测试中存根它,您应该在值 YES 或 @ 之后将它传递给 launchArguments 987654328@(用于布尔值)。请注意,我在键之前添加了- 符号,这是它的工作方式:
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 和NO 字符串转换为true 和false 无法按预期工作。有一个PR解决了这个问题(即被拒绝),但是要解决这个问题,你可以看看this answer的解决方案#2和#3。
【讨论】:
UserDefaults,你可以试试这两个测试。将launchArguments 添加到应用程序是一种在UI 测试中存根UserDefaults 数据的方法。