0

さまざまな画面のレポート オプションを処理する TC スクリプトがあります。ウィンドウ クラス名は画面ごとに変わります。また、このスクリプトを翻訳された環境で動作させたいので、ウィンドウ キャプションも変わります。最初の部分は正しく動作しますが、ウィンドウ名の変更をどのように考慮すればよいですか? キャプションを削除すると、あいまいなウィンドウ認識エラーで TC が爆発します。

現在のコード スニペット (1 つの画面のキャプション付き):

w := p.WaitWindow('*', 'Options', 1, 10000);   
if w.Name='frmBasicOpt' then
begin
....

キャプションを省略できるように、クラス名を入力されるパラメーターとして設定できますか? もしそうなら、どうすればこれを行うことができますか?

頭…痛い。

ありがとう!

4

1 に答える 1

2

タスクを理解しているかどうかはわかりませんが、理解できる範囲で支援を試みます。したがって、ウィンドウ クラス名は動的なものです。そのため、ワイルドカードでマスクしました。ただし、クラス名をパラメーター化できる場合は、とにかくクラス名を使用することを伝えます。ということで、テスト実行中のクラス名をどこかから取得する方法があるようです。その場合、クラス名を変数に入れ、この変数をパラメーターとして WaitWindow メソッドに渡し、キャプションをマスクして言語固有のキャプションを使用しないようにすることができます。

clsName := ....; // get it from somewhere
w := p.WaitWindow(clsName, '*', 1, 10000);
if w.Name='frmBasicOpt' then
begin

私の理解が正しくなく、事前にクラス名を知る方法がない場合は、別の方法を使用して、キャプションを指定せずに [オプション] ウィンドウを識別することを検討してください。可能な解決策は次のとおりです。

  1. ダイアログが開くと、アクティブになります。したがって、Sys.Desktop.ActiveWindow を介してダイアログを取得できます。

  2. これが MFC アプリケーションの場合は、ウィンドウの ControlID プロパティに注意してください。これは、オブジェクト認識に使用するために、アプリケーションのコードで設定できるものです。そのため、FindChild メソッドを使用して、プロパティ値でウィンドウを見つけることができます。

  3. ウィンドウに、このウィンドウにのみ固有の子オブジェクトがいくつかある場合、Process オブジェクト (FindAllChildren) のすべての子ウィンドウを取得する関数を作成し、リストを反復処理して、それらの特定の子オブジェクトを持つウィンドウを確認できます。

これはあなたのために働きますか?そうでない場合は、あなたのタスクについてもう少し情報があれば、おそらく他の提案をするのに役立つでしょう.

アレックス

于 2011-09-23T09:30:17.483 に答える