所有 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。在典型应用程序中,keyWindownil 的唯一情况是在应用程序委托中调用 [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 测试步骤都抛出相同的错误,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

Httpservlet错误404,不确定我做错了啥我已经尝试了所有解决方案

Cray 指针和数组的分段错误:我做错了啥?

用 C++ 中的 AKS 素性测试计算孪生素数我做错了啥?

如何获取所有联系人的号码?我做错了啥?

SQL主键分配错误..不确定我做错了啥? [关闭]

JSON.parse,我做错了啥?