所有的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关键窗口)。