【问题标题】:Xcode UI Testing: how to test app's first launchingXcode UI 测试:如何测试应用程序的首次启动
【发布时间】: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)功能是必需的,如果它是第一次启动 - 出现一个窗口(一个导航标题),如果它不是第一次启动 - 另一个窗口出现(所以我们有不同的静态文本)。所以超时测试失败后,如果它没有找到正确的标题(问题是标题不同)。

标签: ios xcode ui-testing xcode-ui-testing


【解决方案1】:

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

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

希望这会有所帮助:)

【讨论】:

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