3

私は現在、裏で VBScript を使用する QuickTest Professional 11 で毎日作業しています。最近、一般的な状況を処理するために独自の関数をいくつか開発し始めました。私は 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 を作成することは可能でしょうか?

4

1 に答える 1

3

を使用して/ポインターGetRefを取得し、そのポインターを使用して/を呼び出すことができます。オンライン ヘルプを参照してください。イベント ハンドラーの例が示されていますが、任意のグローバルまたはwith を参照し、戻り値を保持する変数を/のエイリアスのように使用できます。functionsubfunctionsubfunctionsubGetRefGetRefsubfunction

ただし、これでカバーできない場合があることに注意してください。

  • GetRefを介してテスト オブジェクトに登録された関数であるメソッド呼び出しが現在の呼び出しスタックに含まれている場合、関数ポインタ を使用することはできませんRegisterUserFunc

  • GetRef関数ポインターを介してアドレス指定されたルーチン呼び出し内から、このようなテスト オブジェクト メソッドを呼び出すことはできません。

また、ExecuteGlobal代わりに使用することを検討してExecuteください。これにより、渡すコードで、ExecuteGlobal呼び出し元が後でアクセスできるグローバル変数を設定できます。

于 2013-06-29T06:23:47.567 に答える