Xcode UI 测试:如何测试应用程序的首次启动

Posted

技术标签:

【中文标题】Xcode UI 测试:如何测试应用程序的首次启动【英文标题】:Xcode UI Testing: how to test app's first launching 【发布时间】:2015-11-05 12:55:35 【问题描述】:

我正在 xCode 7.1 中编写 UITests,并且有一个在首次启动期间测试应用程序的功能。问题是:如何检查应用程序是否第一次启动。 我需要这样的东西:

func testFirstLaunching() 
   if ("app is launched for the first time") 
        //test scenario of first launching
     
   else  
        //invoke func that will test other scenario
     

有人知道如何检查这个吗? 应用正在使用 NSUserDefaults,也许 Xcode 测试有一个超级强大的功能可以访问它?

任何建议都会很有价值!)

【问题讨论】:

我知道你可以做这样的 if 语句。问题是在 if 块中放什么。也许您可以检查是否存在导航栏标题。 ``` if (app.staticTexts["My Main Screen"].exists) 做普通的应用程序 else 假设你是第一次启动 ``` 不错的想法,我尝试了这种方法,但在我的情况下,问题是登录窗口后出现导航标题(通过网络登录,所以这会导致一些延迟),所以要检查导航标题 waitForExpectationsWithTimeout(timeout)功能是必需的,如果它是第一次启动 - 出现一个窗口(一个导航标题),如果它不是第一次启动 - 另一个窗口出现(所以我们有不同的静态文本)。所以超时测试失败后,如果它没有找到正确的标题(问题是标题不同)。 【参考方案1】:

这里是您的问题的手动解决方案:

    在第一个呈现的 ViewController 中创建一个全局变量,将其设为 false 在您的 viewDidLoad 中,将其值更改为 true 保存 在testFirstLaunching() 中,读取变量的值 使用 if 语句做任何你想做的事

希望这会有所帮助:)

【讨论】:

这是正确的思维方式,但我可以用同样的方式阅读 NSUserDefaults。问题是如何通过 XCTestCase 类对象或通过 XCUIApplication() 访问它(或 ViewController 中的全局变量)?) 访问什么?你的意思是你想访问每个 VC 是否至少打开过一次应用程序? 嗨,Linus,您能告诉我们更多关于如何从测试代码中检查变量的信息吗? XCUIApplication 有办法读取用户默认值吗? 我是如何解决这个问题的:我在我的应用程序的特殊 Settings 类中使用了 global var isFirstRun (实际上类似于@Linus G.建议,所以你的答案被接受了:))。误解的原因是未选中 Settings 类中的 AppUITests 目标(实用程序窗格中的目标成员资格窗口),因此 AppUITests无法访问该类中的变量> 类。我的错误,问题的重要原因和其他开发人员的良好经验。 哦,好的,很高兴听到你成功了 :)

以上是关于Xcode UI 测试:如何测试应用程序的首次启动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS Xcode UI 测试用例中启动系统应用

为啥 XCode 启动应用程序两次以运行 UI 测试?

前端性能测试--启动时间监控数值获取方法

Xcode UI 测试不会自动启动模拟器

如何设置 iOS 应用程序的首次启动

在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?