由于应用重启,XCUITest 需要运行两次才能成功

Posted

技术标签:

【中文标题】由于应用重启,XCUITest 需要运行两次才能成功【英文标题】:XCUITest needs to be ran twice to be successful because of app reboot 【发布时间】:2017-03-10 18:51:05 【问题描述】:

我有一个 VoIP 应用程序,它在入职过程中的某个地方会自行重置。因此,我第一次运行 UI 测试时总是失败,第二次总是通过。

我使用此 UI 测试创建带有快照 (fastlane) 的屏幕截图,当然我可以告诉快照至少尝试两次。但我也想在有人合并开发时运行这个 UI 测试,所以我知道它已经坏了,而不是在我们想要发布时手动修复脚本。所以我真的很想用某种方法让这个测试从一个干净的模拟器中通过。

有什么办法吗?

【问题讨论】:

【参考方案1】:

我终于想出了一个或多或少解决这个问题的方法。问题与应用程序的状态有关。您不能直接从 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 测试。

【讨论】:

以上是关于由于应用重启,XCUITest 需要运行两次才能成功的主要内容,如果未能解决你的问题,请参考以下文章

XCUITest - 如何在应用程序运行时禁用 Wi Fi?

为啥 XCUITest 对 iOS 应用程序运行太慢?

为啥我需要单击两次才能在输入字段中生成一个值

iOS XCUITest 模拟指纹

运行 XCUITest 自动化后获取应用程序的控制台/文件日志和视频

执行 XCUITest 时,Tap 方法在今日视图中不起作用