所有的KIFtesting步骤都抛出同样的错误,我做错了什么?

无论我如何写KIFTestScenario或KIFTestStep,运行我的KIF目标时,它们都返回以下错误:

12:20:58.434 - Test that a user can successfully dismiss the welcome screens 12:24:53.208 - FAIL (209.11s): Tap screen at point "{10, 10}" 12:24:53.209 - FAILING ERROR: Error Domain=KIFTest Code=0 "Step threw exception: *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil" UserInfo=0x842c1e0 {NSLocalizedDescription=Step threw exception: *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil} 12:24:53.210 - END OF SCENARIO (duration 223.62s) 

如上所示,我已经包含了我正在使用的代码:

TestController.m

 #import "TestController.h" #import "KIFTestScenario+Additions.h" @implementation TestController - (void)initializeScenarios; { [self addScenario:[KIFTestScenario scenarioToLogIn]]; } @end 

KIFTestScenario+Additions.m

 #import "KIFTestScenario+Additions.h" @implementation KIFTestScenario (Additions) + (id)scenarioToLogIn { KIFTestScenario *scenario = [KIFTestScenario scenarioWithDescription:@"Test that a user can successfully dismiss the welcome screens"]; KIFTestStep *step = [KIFTestStep stepToTapScreenAtPoint:CGPointMake(10.0f, 10.0f)]; [scenario addStep:step]; return scenario; } @end 

我已经通过debugging器走了,我添加到该场景的KIFTestStep是非零,是一个有效的KIFTestStep。

有没有人遇到这个问题之前,或有任何想法解决?

这个exception是在你自己的代码中提出的。

查看KIF源文件,在两个地方调用insertObject:atIndex: addStep:KIFTypist

您的exception发生在步骤的执行中,因此它不在addStep: ,而且您没有使用键盘方法,因此不使用KIFTypist

可能发生的情况是KIF正在点击屏幕,手势识别器或callback监听器正在触发exception。 这通常会使您的应用程序崩溃,但是KIF的exception处理程序抓住了它并报告了testing失败。 您可以使用断点exception捕获exception,并找出导致exception的原因。

值得注意的是,屏幕坐标10, 10通常是无法使用的,因为它在状态栏内。 要在10, 10点击你的应用程序10, 10你应该通过10, 30


更新

根据我们在评论中的讨论, windowsWithKeyWindow中的关键窗口nil引发了exception。 在你的应用程序委托中调用[self.window makeKeyAndVisible]之前,唯一的情况是keyWindow在典型的应用程序中是nil 。 您需要确保在调用KIF的startTestingWithCompletionBlock:方法之前完成所有设置逻辑(包括创build关键窗口)。