gpt4 book ai didi

vbscript - 在 VBScript 中对方法调用进行字符串化

转载 作者:行者123 更新时间:2023-12-02 21:39:02 25 4
gpt4 key购买 nike

我目前每天都在使用 QuickTest Professional 11,它在幕后使用 VBScript。最近,我开始开发一些自己的函数来处理常见情况。我对 VBscript 还很陌生,我的大部分编程经验都是使用 C 和 Python 进行的。

我正在尝试在 VBScript 中实现 Python 的 Try/Except,主要是为了完成单击链接或从下拉框中选择值等操作。这是我到目前为止所拥有的:

Class cls_ErrorHandler
Private bWasError

Private Sub Class_Initialize()
bWasError = False
End Sub

Private Sub IsErr
If Err.Number <> 0 Then
bWasError = True
Else
bWasError = False
End If
Err.Clear
End Sub

' If the command fails, set bWasError
Public Sub Try(strCommandToTry)
On Error Resume Next
Execute(strCommandToTry)
me.IsErr

On Error Goto 0
End Sub

Public Sub Except(strCommandInCaseOfError)
If bWasError Then
Execute(strCommandInCaseOfError)
End If
bWasError = False
End Sub
End Class

我希望能够写出这样的东西:

Set oErrorHandler = New cls_ErrorHandler
oErrorHandler.Try(Stringify(Browser("Browser Name").Page("Page Name").WebCheckBox("Checkbox Name").Set "ON"
oErrorHander.Except(Stringify(Browser("Browser Name").Page("Page Name").WebButton("Save").Click))

据我所知,在 VBScript 中确实没有任何好的方法可以将一个函数作为参数传递给另一个函数。最好的方法似乎是传递一个包含函数名称的字符串,然后将该字符串输入到 Execute() 或 Eval() 中。 QuickTest Professional 中的对象往往有很多引号,因此手动转义它们会使代码不可读。

在 C 语言中,我会使用这样的东西:

#define Stringify(obj) #obj

它会完成...但 VBScript 中似乎不存在类似的东西。有没有办法实现这个? VBScript 中是否有任何内容将对象作为输入并返回该对象名称的字符串表示形式?是否可以用 C/C# 编写一个提供此类功能的 DLL?

最佳答案

您可以使用GetRef获取function/sub指针,并调用function/sub 使用该指针。请参阅在线帮助,它显示了事件处理程序的示例,但您可以使用 GetRef 引用任何全局 functionsub,并使用保存 GetRef 返回值的变量就像 sub/function 的别名。

但是请注意,有些情况您无法用此方法涵盖:

  • 如果当前调用堆栈包含一个GetRef函数指针,则不能使用方法调用是通过注册到测试对象的函数RegisterUserFunc

  • 您不能从例程调用中调用此类测试对象方法这是通过 GetRef 函数指针寻址的。

还可以考虑使用 ExecuteGlobal 而不是 Execute,以便您传递的代码可以设置 ExecuteGlobal 调用者随后可以访问的全局变量。

关于vbscript - 在 VBScript 中对方法调用进行字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com