所有 KIF 测试步骤都抛出相同的错误,我做错了啥?
Posted
技术标签:
【中文标题】所有 KIF 测试步骤都抛出相同的错误,我做错了啥?【英文标题】:All KIF test steps are throwing the same error, what am I doing wrong?所有 KIF 测试步骤都抛出相同的错误,我做错了什么? 【发布时间】:2013-08-30 18:04:22 【问题描述】:运行我的 KIF 目标时,无论我如何编写 KIFTestScenario 或 KIFTestStep,它们都会返回以下错误:
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。
以前有没有人遇到过这个问题或有任何修复的想法?
【问题讨论】:
你能出示你的 kif 代码吗? 你能从日志中包含一些额外的上下文吗?导致错误的行是什么?此错误是由捕获的异常触发的。你能添加一个异常断点并显示异常是在哪里引发的吗?它可能已在您的代码或 KIF 中抛出。 Brian Nickel:我在记录的错误中添加了一些上下文。至于异常,它被抛出 KIFTestStep.m(第 852 行)。在围绕这个执行区域进行调试时,似乎一切都井井有条。 第 852 行是它被捕获的地方,而不是它被抛出的地方。引发异常时将触发异常断点。 【参考方案1】:您自己的代码中引发了此异常。
查看 KIF 源代码,insertObject:atIndex:
在 two places 中被调用:在 addStep:
和 KIFTypist
中。
您的异常发生在步骤的执行中,所以它不在addStep:
中,并且您没有使用键盘方法,所以没有使用KIFTypist
。
可能发生的情况是 KIF 正在点击屏幕,而您的手势识别器或回调侦听器正在触发异常。这通常会使您的应用程序崩溃,但 KIF 的异常处理程序会捕获它并报告测试失败。您可以使用breakpoint exception 捕获引发异常的地方并找出导致它的原因。
值得注意的是,屏幕坐标10, 10
通常是不可点击的,因为它位于状态栏内。要在10, 10
上点击您的应用,您应该通过10, 30
。
更新
根据我们在 cmets 中的讨论,在 windowsWithKeyWindow
中引发了异常,其中关键窗口为 nil
。在典型应用程序中,keyWindow
是 nil
的唯一情况是在应用程序委托中调用 [self.window makeKeyAndVisible]
之前。您需要确保在调用 KIF 的 startTestingWithCompletionBlock:
方法之前完成所有设置逻辑(包括制作按键窗口)。
【讨论】:
感谢您提供解释如何使用断点异常的链接。我误解了你的意思。但是,看起来异常是在 UIApplication-KIFAdditions.m 的第 96 行引发的,并且我的代码没有引发异常。我仍然不知道为什么会发生此错误。 你能提供有问题的线路吗?我在that file 中只看到 89 行代码 有趣的是,我的本地文件副本有一个名为dimmingViewWindow
的方法,就在 windowsWithKeyWindow
的上方。似乎引发异常的行是第 84 行,[windows addObject:keyWindow];
好吧,我一定是弄错了版本。这太有趣了。这表明您没有keyWindow
。你在使用故事板吗?如果没有,您是在 KIF 的 startTestingWithCompletionBlock:
之前还是之后打电话给 [self.window makeKeyAndVisible]
?
布赖恩,你是救生员。查看我的代码,有一个竞争条件可能会阻止[self.window makeKeyAndVisible]
在我运行我的 KIF 测试之前被解雇。您认为我应该将此标记为正确答案吗?以上是关于所有 KIF 测试步骤都抛出相同的错误,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章