ios - 在继续之前等待 NSNotification

标签 ios objective-c swift xcode-ui-testing fastlane-snapshot

我确信有一个简单的解决方案,但我不知道如何实现它。我正在为我的 iOS 应用程序编写 UI 单元测试(目前在 Objective C 中,但也很高兴使用 Swift 解决方案),以便我可以使用 FaSTLane 的 snapshot 命令,但由于该应用程序是基于云的,只需在选项卡之间切换/views 和截屏是行不通的,因为截屏只会显示“正在加载...”,而我希望其中包含有效数据。

我当前的解决方案丑陋且不可靠。目前我只是通过 sleep(3) 等待 3 秒然后继续。我正在使用 AFNetworking 来执行请求,所以我只能监听传入的任何 HTTP 请求,如果它与我想要的请求匹配,我可以继续,但我不确定:

  • A:如何捕获所有入站流量
  • B:如何在我传递“ok”消息之前停止进一步执行。

任何想法或帮助将不胜感激,因为我不喜欢手动拍摄数百张屏幕截图 =)

最佳答案

有效的 UI 测试是用与单元测试和生产代码不同的思维方式编写的。 UI 测试应该从用户的角度来编写,而不是关心应用程序“幕后”发生的事情。例如,您的测试应该等待特定的 UI 元素出现,而不是等待 NSNotification 触发或特定网络请求完成。

等待元素出现

假设您的第一个选项卡/屏幕显示用户信息。该数据中包含用户的用户名。您可以使用 XCTest 的异步测试 API 暂停框架,直到找到元素(或发生超时)。

let app = XCUIApplication()
let username = self.app.staticTexts["joemasilotti"]
let exists = NSPredicate(format: "exists == true")
expectationForPredicate(exists, evaluatedWithObject: username, handler: nil)

waitForExpectationsWithTimeout(5, handler: nil)
XCTAssert(username.exists)

这直接来自 UI Testing cheat sheet我拼起来的它还有一个 working example app您可以在 Xcode 中运行并使用代码和测试。

关于ios - 在继续之前等待 NSNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759405/

相关文章:

ios - 无法选择标签栏项目,标签栏变灰

objective-c - C/Objective-C 中的 Perl 中的 "<=>"运算符是否有替代方案?

iphone - 当 View Controller 弹出时,MKMapView 使应用程序崩溃

ios sdk MKMapView 重叠引脚?

iOS文本框光标位置错误

ios - 如何在 iOS 中对图像的白色背景进行着色

ios - UITableView 底部单元格隐藏在屏幕下方

ios - 创建类似 iOS 的设置屏幕

swift - 从 AppleScript 调用 Swift 方法

ios - CATiledLayer 显示以前的图 block