所有KIF测试步骤都抛出相同的错误,我做错了什么?

时间:2013-08-30 18:04:23

标签: ios objective-c kif-framework

无论我如何编写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

我已经浏览了调试器,我添加到场景中的KIFTestStep是非零的,并且是有效的KIFTestStep。

有没有人遇到过这个问题或对修复有什么想法?

1 个答案:

答案 0 :(得分:2)

在您自己的代码中引发了此异常。

查看KIF来源,在two places中调用insertObject:atIndex:addStep:KIFTypist

您执行该步骤时发生异常,因此它不在addStep:中,并且您没有使用键盘方法,因此未使用KIFTypist

可能发生的事情是KIF在此时点击屏幕,并且您的手势识别器或回调侦听器正在触发异常。这通常会使您的应用程序崩溃,但KIF的异常处理程序会捕获它并报告测试失败。您可以使用breakpoint exception捕获引发异常的异常,并找出导致它的原因。

值得注意的是,屏幕坐标10, 10通常不可用,因为它位于状态栏内。要在10, 10点按您的应用,您应该通过10, 30


<强>更新

根据我们在评论中的讨论,关键窗口为windowsWithKeyWindow的{​​{1}}中引发了异常。典型应用中nil keyWindow的唯一情况是在您的应用代理中调用nil之前。在调用KIF的[self.window makeKeyAndVisible]方法之前,您需要确保完成所有设置逻辑(包括创建关键窗口)。