无论我如何编写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。
有没有人遇到过这个问题或对修复有什么想法?
答案 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]
方法之前,您需要确保完成所有设置逻辑(包括创建关键窗口)。