需要在执行它的函数中传递对象和操作
Need to pass object and operation in a function that executes it
我需要在一个函数中传递一个对象及其操作,这样每次我都只能调用该函数并节省我为所有对象编写相同的步骤,比如在执行操作之前验证对象。与 QTP/UFT 中的注册用户功能类似的方法。
然而,Testcomplete 没有这个功能(至少据我所知,如果有的话我很乐意知道)
这是我正在尝试但无法执行的代码:
Call OpenPageorTab("Aliases.Admin.wndMain.toolStrip", ".Visible")
Function OpenPageorTab(obj, method)
'if obj.Exists then
execute a = obj&method
delay(1000)
OpenPageorTab = True
'Else
log.Error "Unable to find the object"
OpenPageorTab = False
'End if
使用 if 条件,因为我之前传递的是对象而不是字符串
它在 "execute" 语句处失败,并在执行此语句时出现 VbScript 运行时错误。
我的问题有两个 -
- 如何在函数中传递对象及其操作并执行它
- 也可以传递一个对象本身而不是字符串,例如:
obtoolbar = "Aliases.Admin.wndMain.toolStrip"
Call OpenPageorTab(obtoolbar, ".Visible")
感谢在此问题上的任何帮助或指导
编辑 1
我离答案很近,但不准确。我能够将对象作为字符串传递 - 检查下面的代码
Call OpenPageorTab("Aliases.Admin.wndMain.toolStrip", ".Click")
Function OpenPageorTab(obj, method)
' if obj.Exists then
eobj = "" & obj & method
execute (eobj)
delay(1000)
OpenPageorTab = True
' Else
log.Error "Unable to find the object"
OpenPageorTab = False
' End if
End Function
但是我仍然需要传递对象,例如
Set oToolStrip = Aliases.Admin.wndMain.toolStrip
Call OpenPageorTab(oToolStrip, ".Click")
这是我做不到的。
编辑 2
我已经得到了这个问题的答案并发布了解决方案。话虽如此,有没有什么方法可以将 Function 用作方法?
这里是一个如何引用函数并向其传递参数(包括对象)的示例。
Const forReading = 1, forWriting = 2, forAppending = 8, CreateFile = True
Set my_obj = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\temp\test.txt", forWriting, CreateFile)
Function my_function(my_obj, method, text)
command = "my_obj." & method & " """ & text & """"
ExecuteGlobal command
End Function
'make a reference to our function
Set proc = GetRef("my_function")
'and call it with parameters, the first being the method invoked
Call proc(my_obj, "WriteLine", "testing")
'cleanup'
my_obj.Close
Set my_obj = Nothing
我终于制定了解决方案,下面的函数可以在 TestComplete
中用作临时寄存器函数
Sub test
'Set the Object
Set pToolStrip = Aliases.Admin.wndMain.toolStrip.Button("User Admin")
Call GenericOperationFunc(pToolStrip, ".Click", "N")
'if you want to perform an operation which return a value
b = GenericOperationFunc(Aliases.Admin.wndPopup.Child(2), ".Caption", "Y")
End Sub
Public Function GenericOperationFunc(obj, method, Return)
GenericOperationFunc = False
on error resume next
if obj.Exists then
if Ret = "Y" then
eobj = "NewText="&"obj" & method
execute (eobj)
GenericOperationFunc = NewText
Delay(500)
Else
eobj = "obj" & method
execute (eobj)
delay(1000)
GenericOperationFunc = True
End if
Else
log.Error "Unable to find the object"
GenericOperationFunc = False
End if
End Function
'log.error, delay, aliases, ptoolstrip(object) are testcomplete specific
我需要在一个函数中传递一个对象及其操作,这样每次我都只能调用该函数并节省我为所有对象编写相同的步骤,比如在执行操作之前验证对象。与 QTP/UFT 中的注册用户功能类似的方法。
然而,Testcomplete 没有这个功能(至少据我所知,如果有的话我很乐意知道)
这是我正在尝试但无法执行的代码:
Call OpenPageorTab("Aliases.Admin.wndMain.toolStrip", ".Visible")
Function OpenPageorTab(obj, method)
'if obj.Exists then
execute a = obj&method
delay(1000)
OpenPageorTab = True
'Else
log.Error "Unable to find the object"
OpenPageorTab = False
'End if
使用 if 条件,因为我之前传递的是对象而不是字符串
它在 "execute" 语句处失败,并在执行此语句时出现 VbScript 运行时错误。 我的问题有两个 -
- 如何在函数中传递对象及其操作并执行它
- 也可以传递一个对象本身而不是字符串,例如:
obtoolbar = "Aliases.Admin.wndMain.toolStrip"
Call OpenPageorTab(obtoolbar, ".Visible")
感谢在此问题上的任何帮助或指导
编辑 1
我离答案很近,但不准确。我能够将对象作为字符串传递 - 检查下面的代码
Call OpenPageorTab("Aliases.Admin.wndMain.toolStrip", ".Click")
Function OpenPageorTab(obj, method)
' if obj.Exists then
eobj = "" & obj & method
execute (eobj)
delay(1000)
OpenPageorTab = True
' Else
log.Error "Unable to find the object"
OpenPageorTab = False
' End if
End Function
但是我仍然需要传递对象,例如
Set oToolStrip = Aliases.Admin.wndMain.toolStrip
Call OpenPageorTab(oToolStrip, ".Click")
这是我做不到的。
编辑 2 我已经得到了这个问题的答案并发布了解决方案。话虽如此,有没有什么方法可以将 Function 用作方法?
这里是一个如何引用函数并向其传递参数(包括对象)的示例。
Const forReading = 1, forWriting = 2, forAppending = 8, CreateFile = True
Set my_obj = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\temp\test.txt", forWriting, CreateFile)
Function my_function(my_obj, method, text)
command = "my_obj." & method & " """ & text & """"
ExecuteGlobal command
End Function
'make a reference to our function
Set proc = GetRef("my_function")
'and call it with parameters, the first being the method invoked
Call proc(my_obj, "WriteLine", "testing")
'cleanup'
my_obj.Close
Set my_obj = Nothing
我终于制定了解决方案,下面的函数可以在 TestComplete
中用作临时寄存器函数Sub test
'Set the Object
Set pToolStrip = Aliases.Admin.wndMain.toolStrip.Button("User Admin")
Call GenericOperationFunc(pToolStrip, ".Click", "N")
'if you want to perform an operation which return a value
b = GenericOperationFunc(Aliases.Admin.wndPopup.Child(2), ".Caption", "Y")
End Sub
Public Function GenericOperationFunc(obj, method, Return)
GenericOperationFunc = False
on error resume next
if obj.Exists then
if Ret = "Y" then
eobj = "NewText="&"obj" & method
execute (eobj)
GenericOperationFunc = NewText
Delay(500)
Else
eobj = "obj" & method
execute (eobj)
delay(1000)
GenericOperationFunc = True
End if
Else
log.Error "Unable to find the object"
GenericOperationFunc = False
End if
End Function
'log.error, delay, aliases, ptoolstrip(object) are testcomplete specific