【问题标题】:Xcode UI Testing: Executing a Test ConditionallyXcode UI 测试:有条件地执行测试
【发布时间】:2016-07-13 15:20:24
【问题描述】:

使用 Xcode UI 测试,我想实现在应用程序中存在特定 UI 元素时运行的代码。我的应用程序处于登录状态,如果用户当前已登录,我想将其注销。我一直无法找到文档来建议摆脱这个纸袋的方法。

我读过的所有内容都显示了两种可能的路径:使用XCTAssert(如果元素不存在,这将导致我的测试立即失败)和使用XCTExpectation(如果元素不存在)。如果应用程序处于给定状态,我需要一种更简单的方法来运行不同的代码。

为了把它放在代码中,我正在寻找这样的东西:

if let signOutElement = app.collectionViews.staticTexts["Sign Out"] {
    signOutElement.tap()
}

唉,这行不通。

【问题讨论】:

  • 根据我的经验,测试通常是在相当严格的心态下完成的——你将应用程序置于你想要的状态,这样你就可以测试代码的特定部分。所以在这种情况下,您应该知道用户处于登录状态,因此需要注销。从理论上讲,您可以通过页面上的某种计时器来实现这一点,该计时器会经常触发并寻找注销,但同样不是您必须通过测试 imo 做的事情。

标签: ios swift xcode xcode-ui-testing


【解决方案1】:

在测试期间使用条件并没有错。您的代码的问题在于,从 Swift 的角度来看,这是无稽之谈。 if let 在这里毫无意义,因为您的表达式不返回 Optional。毕竟,您仍然必须谈论合法的 Swift。

为什么不尝试这样的事情呢?

if app.collectionViews.staticTexts["Sign Out"].exists

【讨论】:

  • 我还意识到 XCUIElement 上有一个 exists 方法。感谢您的回答!
  • 如果我的回答不正确,请不要接受!我不确定count 是否可以在这里工作。请更正我的代码以使其正常工作!!!!
  • 哎呀,如果你对它有那么强烈的感觉!
  • 感谢您解决此问题!是的,我确实感觉很强烈,因为我不希望错误的代码出现在我的名字上。你是在前线战斗并将这段代码摔倒在地的人,所以你最清楚什么是有效的。感谢您的帮助。
猜你喜欢
  • 2019-08-27
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2016-06-14
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多