我确信有一个简单的解决方案,但我不知道如何实现它。我正在为我的 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/