在qtp中调用函数时输入不匹配

时间:2014-10-13 13:00:40

标签: vbscript qtp hp-uft

我正在使用QTP 11.5自动化Web应用程序。我正在尝试通过driverscript调用qtp中的操作,如下所示:

RFSTestPath =“D:\ vf74 \ D Drive \ RFS Automation \”

LoadAndRunAction RFStestPath& LogInApplication, “措施1”,oneIteration

在LogInApplication(Action1)内部调用登录函数:

调用fncLogInApplication(strURL,strUsesrName,strPasssword)

fncLogInApplication的定义是用fncLogInApplication.vbs编写的 当我将fncLogInApplication.vbs文件与driverscript关联时,我能够执行我的代码而没有任何错误。但是,当我从driverscript中关联.vbs文件并将其与LogInApplication测试关联时,我得到“类型不匹配:'fncLogInApplication'”

请有人帮助我。我希望当我将LogInApplication与主驱动程序相关联时执行fncLogInApplication。

如果您需要更多信息,请发表评论

1 个答案:

答案 0 :(得分:2)

任何时候只有一组关联的库是活动的:这始终是最外层测试的一个。

这意味着如果测试A调用测试B,测试B将根据测试A的相关库列表而不是B来加载库。

这也意味着如果B依赖于一个库,并且B关联了这个库,但是从测试A(它没有关联这个库)调用,那么B将无法调用(定位)该函数,因为相关的库从不加载B(只有来自A的那些)。 (就像A一样,自然而然。)。

如果您仍然感兴趣:“类型不匹配”是QTP(或VBScript)告诉您的不好方式:“调用的函数未知,所以我打赌你改为意味着一个数组变量解除引用,并且您指定的变量等于空,因此它不是数组,因此不能作为数组变量解引用,这就是我所说的“类型不匹配”。 这个推理是有效的,考虑到VB / VBScript的语法树:函数调用和数组变量解引用无法正式区分。从语法上讲,它们在大多数情况下非常相似或相同。因此,请准备好处理“类型不匹配”,例如在创建VBScript代码时VB / VBScript永远不会显示的“未知函数引用”消息。

但是,您可以在测试B的代码中加载所需的库(例如,使用LoadFunctionLibrary),但是这仍然允许A在从B加载并从A返回时从该库调用函数的电话。然而,这个以及此过程的所有可能变体都会对调试,前向引用和全局变量的可见性等方面产生副作用,因此我建议不要这样做。

附加说明:

  • 没有充分理由使用CALL。只需调用子或函数。
  • 如果你调用一个函数并使用它返回的结果,你必须在parantheses中包含参数。
  • 如果您拨打sub(或function,并且不使用其返回的结果),则不得在parantheses中包含参数。如果subfunction只接受一个参数,则可能看起来像是允许将它放在parantheses中,但事实并非如此。在这种情况下,论证被简单地视为一个在parantheses中的术语。
  • 刚刚列出的“包围”方面的参数可以创建非常讨厌的错误,特别是如果参数是byRef,也是由于(但不限于)VBScripts允许您传递{{{{ 1}}参数(需要一个变量参数),所以通常只将paranthesis放在它所属的位置(即绝对需要的地方)。
相关问题