没有参数的函数中的QTP VBScript类型不匹配错误

时间:2011-07-14 08:18:53

标签: vbscript qtp type-mismatch

我使用VBScript在QTP(快速测试专业版)中遇到了烦人的问题。

我在VBScript中定义了这个子(我也尝试将它定义为具有相同结果的函数):

Sub KillProcess()
  KillprocessIE = "The process i want to kill"
  Set ProcessList2 = GetObject("winmgmts://.").InstancesOf("win32_process")
  For Each Process In ProcessList2
    If Process.Name = KillProcessIE Then
      Process.Terminate
      Exit for
    End If
  Next
End Sub

但是当我尝试使用

运行它时
call KillProcess()
KillProcess()
KillProcess

我得到一个错误,说“Typer stemmer ikke overens:'KillProcess'”,翻译自丹麦语,意思是“类型不匹配:'KillProcess'。我猜这是一种类型不匹配的错误,但由于翻译,我不能一定不会。

它在谈论什么类型?我的函数调用中没有参数,我没有为任何值赋值?

还应该说,如果我直接运行完全相同的代码而不将其定义为函数,它的工作没有问题。

2 个答案:

答案 0 :(得分:3)

无论何时调用未定义的子函数或函数,都会出现类型不匹配错误。

即使这本身就是一个奇迹(我可以为其找到合理的推理仅用于函数,而不是用于子函数),它表明在您的特定场景中,KillProcess在您调用它的脚本中是未知的。

可能的原因:

  • KillProcess声明位于函数库中,未在列表中列出 相关的函数库设置对话框。
  • KillProcess声明已激活,但您的通话中包含一个或多个拼写错误, 比如“KillProccess”或类似的东西。

正如Motti指出的那样,你发布的代码片段看起来不错,所以一定有其他一些小问题。

关于潜艇与功能的另一个提示:请注意,您通常不会使用带括号的Sub来调用参数。如果您确实指定了它们,它们将被视为要评估的术语的一部分,并且从

开始
X term

相同
X (term)

因此在这种情况下不会产生错误消息。 但是,对于具有两个或多个参数的Subs,请在一个括号对中指定所有实际参数,例如

Y (term1, term2)

会产生错误,例如“无法使用括号中的参数调用Sub”等等。如果您认为确实可以在括号中指定一个参数,则很难理解。

(有关paranthesis主题的更完整概述,请参阅ByRef and ByVal in VBScript和相关问题)。

一般建议:使用

option explicit

始终位于所有脚本(尤其是函数库)的顶部。如果需要,RTFM。它可能看起来更像是工作(因为它会迫使你在使用之前声明所有变量),但它有助于避免细微的错误。

答案 1 :(得分:1)

我认为你已经遇到了奇怪的行为QTP,但是当你明白为什么时会有逻辑。

发生这种情况的原因可能是因为你“从步骤运行”调用KillProcess()并具有上面定义的函数,如:

Sub KillProcess()
        .
        .
        .
End Sub

call KillProcess()

如果您从“Call KillProcess()”运行代码,QTP将返回“运行错误”“类型不匹配”

如果相反,让函数定义在执行语句下面,如

call KillProcess()

Sub KillProcess()
        .
        .
        .
End Sub

然后QTP“知道”你正在调用的函数,并按照它应该执行脚本。

原因是,当使用“从步骤运行”时,只读取步骤及以下的代码行,而不是上面写的内容。