Class UFT中的对象自动反初始化

Class UFT中的对象自动反初始化,class,object,automation,qtp,hp-uft,Class,Object,Automation,Qtp,Hp Uft,我有vbs文件并与UFT关联。已加载库并成功初始化类对象 但当涉及到在QTP操作中执行类方法时,它不识别类对象,并且消息说不支持该方法。当我检查该值时,它显示Object,并且没有对类的引用 请帮我做这个 谢谢,dev如果您的类在库中,并且您正在从测试(操作)调用它,那么您将收到此错误。您尚未分享如何实例化类,但以下是两种方法: Class MyClass Public Sub MyMethod() MsgBox "MyMethod called" End Sub

我有vbs文件并与UFT关联。已加载库并成功初始化类对象

但当涉及到在QTP操作中执行类方法时,它不识别类对象,并且消息说不支持该方法。当我检查该值时,它显示Object,并且没有对类的引用

请帮我做这个


谢谢,dev

如果您的类在库中,并且您正在从测试(操作)调用它,那么您将收到此错误。您尚未分享如何实例化类,但以下是两种方法:

Class MyClass
    Public Sub MyMethod()
        MsgBox "MyMethod called"
    End Sub
End Class

' 1:
Public oMyClass
Set oMyClass = New MyClass

' 2: 
Public Function MyFunc()
    Set MyFunc = New MyClass
End Function
以下是您如何在行动中使用上述两种方法:

' 1:
oMyClass.MyMethod

' 2:
MyFunc.MyMethod

这两种方法之间的一个主要区别是function()方法每次使用时都会创建一个新实例。变量用法将创建并保存同一个实例(除非您再次创建它)。

感谢回复Anshoo。我所做的是初始化库中的对象,就像您的示例中一样。如果我把MyClass.MyMethod放在同一个库中,它会得到完美的执行,但如果我把它放在同一个库中,它会说MyClass.MyMethod没有定义。这就是为什么你必须使用方法#2。不能在库之外引用类名。也就是说,类定义总是
私有的
。因此,在库中,您需要创建一个公共创建者(工厂)函数,如图所示。在主操作中调用该函数,如在
Dim B:Set B=MyFunc
中。通过保留引用,您可以使用
B
,就像您使用
omiclass
(即,无需获得新实例)一样。感谢您的建议。我想我找到了解决办法。UFT 12.2中出现了一些故障,这就是为什么它不这样叫的原因。我现在有UFT 12.0,我的代码运行良好。谢谢你的反馈,我会把这个留到以后。