0

无论我如何编写 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 不是 nil 并且是有效的 KIFTestStep。

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

4

1 回答 1

2

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

查看 KIF 源代码,在两个地方insertObject:atIndex:调用: in和 in 。addStep:KIFTypist

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

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

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


更新

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

于 2013-08-30T22:29:28.743 回答