TestCompleteのUIテストインスタンスで.Net関数を呼び出す
-
27-10-2019 - |
質問
クリックすると値をインクリメントするボタンがある単純なwpfアプリがあります。最新の値を返す関数もあります。デフォルト値は5です。testcompleteでボタンを3回(つまり8回)クリックするUIテストもあります。この値を取得してアサートするには、.Net関数を呼び出す必要があります。以下は私のテストコードです。
いくつか検索した後、CLRbridgeの詳細を理解して実装しました。ただし、以下に示すように、UIテストインスタンスと関数を要求しているインスタンスは異なります。したがって、関数は5を返します。
私の質問は、testcompleteによってロードされた同じインスタンスから関数を呼び出すにはどうすればよいですか。それとも私はこれに対して完全に間違った方向に進んでいますか?スクリプトとUIテストの両方をif..thenで試しましたが、何も機能しませんでした。直接インスタンスとappdomainの呼び出しの両方を試しましたが、どちらも機能しないようです。
注: UIコントロールに値を表示し、コントロールを検証できることを理解しています。ただし、プロジェクトで必要なより複雑なテスト機能のために、これを具体的に試しています。 ジェネラコディセタグプレ
解決
TestCompleteから必要なことを実行できるはずです。しかし、まず第一に、誤解を避けるために、あなたが試したアプローチの問題を説明しましょう:
-
「dotNET」オブジェクトを介してクラスをアドレス指定します。 これを行うと、TestCompleteはサービスプロセスで.NETを初期化し、指定されたアセンブリをロードし、TestCompleteのAppDomainにロードされたこのアセンブリのクラスを操作します(ただし、別のプロセスに存在します)。これは、アセンブリのこのインスタンスが、テストされたアプリケーションとは何の関係もないことを意味します。そのため、dotNETオブジェクトを介してアプリケーションのデータにアクセスすることはできません。
-
テストされたアプリケーションのAppDomainを介してインクリメントアセンブリをアドレス指定します。 OK、この場合、あなたは解決策に近づいています-あなたはテストされたアプリケーションのAppDomainを操作するので、アプリケーションのデータにアクセスすることができます。ただし、コードでは、(zctorの呼び出しを介して)Incr1クラスの新しいインスタンスを作成します。これは、新しいクラスインスタンスがコンストラクターでそのカウンターを初期化し、5になることを意味します。これは、コードで取得する値です。
つまり、正しいアプローチ:
現在のカウンター値を含むIncr1クラスのカウンターフィールドが静的フィールドでない限り、新しいクラスインスタンスを作成するのではなく、プロパティの現在の値を取得するためにIncr1クラスの既存のオブジェクトをアドレス指定する必要があります。実際の実装は、アプリケーションのIncr1クラスインスタンス参照を格納する場所によって異なります。 MainWindowオブジェクトのCounterプロパティに参照を格納するとします。 ジェネラコディセタグプレ
説明されているケースでは、次のようにTestCompleteスクリプトで現在のカウンター値を取得できます。 ジェネラコディセタグプレ
設定が異なる場合は、説明してください。それに応じてサポートさせていただきます。