我想使用 Fastlane Snapshot 来为我的应用生成屏幕截图。但是,第一次启动并在此之后启动时,应用程序的行为会有所不同。 如何获取一致的行为以获取屏幕截图? (这个问题也与我猜想的任何UI测试所需的一致性有关)
答案 0 :(得分:1)
您应该使用UserDefaults
类来保留应用中的数据,以便在测试中存根数据。
如果我们假设您使用Bool键来查看它是第一次启动是isFirstTime
,为了在UI测试中将其存根,您应该将其传递给值{launchArguments
YES
{1}}或NO
(适用于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
和NO
字符串转换为true
并且false
未按预期工作。有PR解决了这个问题(被拒绝),但要解决这个问题,你可以看一下this answer中的解决方案#2和#3。