由于应用重启,XCUITest 需要 运行 两次才能成功
XCUITest needs to be ran twice to be successful because of app reboot
我有一个 VoIP 应用程序,它在登录过程中的某处自行重置。因此,我第一次 运行 UI 测试总是失败,而第二次总是通过。
我使用此 UI 测试创建带有快照(fastlane)的屏幕截图,当然我可以告诉快照至少尝试两次。但我也想 运行 这个 UI 测试每当有人合并开发所以我知道它坏了,而不是在我们想要发布时手动修复脚本。所以我真的很想要某种方法让这个测试从一个干净的模拟器中通过。
有什么办法吗?
我终于想出了一个或多或少解决这个问题的方法。问题必须与应用程序的状态有关。您不能直接从 UI 测试影响应用程序,但您可以设置一些变量。
在我的单元测试中排名第一
XCUIApplication *app = [[XCUIApplication alloc] init];
[Snapshot setupSnapshot:app];
app.launchEnvironment = @{ SkipOnboarding: @YES };
[app launch];
然后在 AppDelegate 中:
NSDictionary *environment = NSProcessInfo.processInfo.environment;
if (environment[SkipOnboarding]) {
[SnapShotHelper skipOnboardingAndLogin];
}
SkipOnboarding
是我自己创建的常量。它真的只是一个字符串。
快照帮助程序设置了一些默认值,以便像用户已经登录一样启动应用程序。当然也有一些注意事项:
- 您刚刚失去了对未登录状态进行快照的选项
- 应用程序内部的代码仅用于 运行 测试
但是因为我们没有对登录过程进行快照,所以没关系。或者,如果需要,我们可以创建两个单独的 UI 测试。
我有一个 VoIP 应用程序,它在登录过程中的某处自行重置。因此,我第一次 运行 UI 测试总是失败,而第二次总是通过。
我使用此 UI 测试创建带有快照(fastlane)的屏幕截图,当然我可以告诉快照至少尝试两次。但我也想 运行 这个 UI 测试每当有人合并开发所以我知道它坏了,而不是在我们想要发布时手动修复脚本。所以我真的很想要某种方法让这个测试从一个干净的模拟器中通过。
有什么办法吗?
我终于想出了一个或多或少解决这个问题的方法。问题必须与应用程序的状态有关。您不能直接从 UI 测试影响应用程序,但您可以设置一些变量。
在我的单元测试中排名第一
XCUIApplication *app = [[XCUIApplication alloc] init];
[Snapshot setupSnapshot:app];
app.launchEnvironment = @{ SkipOnboarding: @YES };
[app launch];
然后在 AppDelegate 中:
NSDictionary *environment = NSProcessInfo.processInfo.environment;
if (environment[SkipOnboarding]) {
[SnapShotHelper skipOnboardingAndLogin];
}
SkipOnboarding
是我自己创建的常量。它真的只是一个字符串。
快照帮助程序设置了一些默认值,以便像用户已经登录一样启动应用程序。当然也有一些注意事项:
- 您刚刚失去了对未登录状态进行快照的选项
- 应用程序内部的代码仅用于 运行 测试
但是因为我们没有对登录过程进行快照,所以没关系。或者,如果需要,我们可以创建两个单独的 UI 测试。