Ios 继续之前,请等待通知

Ios 继续之前,请等待通知,ios,objective-c,swift,xcode-ui-testing,fastlane-snapshot,Ios,Objective C,Swift,Xcode Ui Testing,Fastlane Snapshot,我相信有一个简单的解决方案,但我不知道如何实现它。我正在为我的iOS应用程序编写UI单元测试(目前为Objective C,但也很高兴有一个快速的解决方案),这样我就可以使用Fastlane的snapshot命令,但由于该应用程序是基于云的,所以简单地在选项卡/视图之间切换并拍摄屏幕快照不起作用,因为屏幕快照只有“加载…”如果我想在他们的有效数据 我目前的解决方案既丑陋又不可靠。目前我正在通过sleep(3)等待3秒钟,然后继续。我正在使用AFNetworking来执行请求,因此我可以只侦听传入

我相信有一个简单的解决方案,但我不知道如何实现它。我正在为我的iOS应用程序编写UI单元测试(目前为Objective C,但也很高兴有一个快速的解决方案),这样我就可以使用Fastlane的
snapshot
命令,但由于该应用程序是基于云的,所以简单地在选项卡/视图之间切换并拍摄屏幕快照不起作用,因为屏幕快照只有“加载…”如果我想在他们的有效数据

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

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

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

大多数时候,当我看到开发人员出现这种问题时,这是因为系统架构不完善。然而,我想对于如何构建一个系统,从来没有一个正确的答案。无论如何,与其创建线性测试用例,不如创建一个使用事件的状态机测试用例。这样你就可以设置你的测试了。安装完成后,告诉线程在事件队列中等待。线程/进程将等待事件。然后,当你得到你的httpRequest时,10秒或者几分钟,或者不管需要多长时间,你都可以通过一个事件通过测试。如果状态机超时,则测试失败

大多数情况下,当我看到开发人员出现这种问题时,都是因为系统的体系结构很差。然而,我想对于如何构建一个系统,从来没有一个正确的答案。无论如何,与其创建线性测试用例,不如创建一个使用事件的状态机测试用例。这样你就可以设置你的测试了。安装完成后,告诉线程在事件队列中等待。线程/进程将等待事件。然后,当你得到你的httpRequest时,10秒或者几分钟,或者不管需要多长时间,你都可以通过一个事件通过测试。如果状态机超时,则测试失败

有效的UI测试是以不同于单元测试和生产代码的思维方式编写的。UI测试应该从用户的角度来编写,而不必关心应用程序“引擎盖下”发生了什么。例如,您的测试应该等待特定的UI元素出现,而不是等待NSN通知发出或特定的网络请求完成

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


这直接来自于我所做的分析。它还有一个功能,您可以在Xcode中运行并使用代码和测试。

有效的UI测试是以不同于单元测试和生产代码的思维方式编写的。UI测试应该从用户的角度来编写,而不必关心应用程序“引擎盖下”发生了什么。例如,您的测试应该等待特定的UI元素出现,而不是等待NSN通知发出或特定的网络请求完成

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


这直接来自于我所做的分析。它还有一个功能,您可以在Xcode中运行,并使用代码和测试。

回答得好。为我辩护,当我开始做这个项目时,它已经3年了。我很感激你的回答。为我辩护,当我开始做这个项目时,它已经3年了。我很感激你的回答
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)