私がコード化されたUIテストを作成しているアプリケーションには、ウィンドウタイトルの一部が一時ファイル用に生成されたランダムなファイル名に基づいているウィンドウがあるため、テストはウィンドウタイトルの静的な部分しか知ることができません。
時折、他のウィンドウが開いていないとき、テストは正常に実行されます。ただし、他のウィンドウが開いている場合は少し問題があります。他のウィンドウに同様のコントロールがある場合、テストで機能するように選択するウィンドウは予測できません。
私がコード化されたUIテストを作成しているアプリケーションには、ウィンドウタイトルの一部が一時ファイル用に生成されたランダムなファイル名に基づいているウィンドウがあるため、テストはウィンドウタイトルの静的な部分しか知ることができません。
時折、他のウィンドウが開いていないとき、テストは正常に実行されます。ただし、他のウィンドウが開いている場合は少し問題があります。他のウィンドウに同様のコントロールがある場合、テストで機能するように選択するウィンドウは予測できません。
これに絞り込みました。コントロールを検索するとき、コード化されたUIテストは検索プロパティとコントロールのツリーのような構造を使用します。完全に一致するものが見つからない場合は、厳密に一致するものが見つかります(したがって、完全なウィンドウタイトル名が見つからないため、それが除外され、他の特定のプロパティに一致するウィンドウが検索され続けます)。これが、コントロールで機能する理由です。他のウィンドウで。
解決策は、実際には、より多くの検索プロパティを使用できるようにすることです。私が使用する1つの方法は、 PropertyExpressionを使用してプロパティを追加し、PropertyExpressionOperator.Containsに渡すことです。
例として、MSWordを開いて閉じることを記録しました。これにより、UIMapにコントロールが生成され、そのコンストラクターには次のようになります。
this.SearchProperties[WinWindow.PropertyNames.Name] = "Document1 - Microsoft Word";
this.SearchProperties[WinWindow.PropertyNames.ClassName] = "OpusApp";
むしろ、最初の行は次のようになります。
this.SearchProperties.Add(new PropertyExpression(WinWindow.PropertyNames.Name, "Microsoft Word", PropertyExpressionOperator.Contains));
またはさらに簡単に、次を使用できます。
this.SearchProperties.Add(WinWindow.PropertyNames.Name, "Microsoft Word", PropertyExpressionOperator.Contains);