WPF アプリ (.NET 4) 用の自動化された UI テストがいくつかあります。これらのテストでは、UI オートメーションAPI を使用します。
AutomationElement.FindFirstを呼び出してターゲット要素を見つけ、それを操作します。
例 (疑似コード):
var nameEquals = new PropertyCondition(AutomationElement.NameProperty, "OurAppWindow");
var appWindow = DesktopWindow.FindFirst(TreeScope.Children, nameEquals);
// this succeeds
var idEquals = new PropertyCondition(AutomationElement.AutomationIdProperty, "ControlId");
var someItem = appWindow.FindFirst(TreeScope.Descendants, idEquals);
// this suceeds sometimes, and fails sometimes!
問題は、appWindow.FindFirst
要素が存在する場合でも、時々失敗して null を返すことです。UI オートメーション ツリーを手動で移動して出力するヘルパー関数を作成しました。正しい ID を持つ要素はすべての場合に存在します。
ウィンドウに他のアイテムがいくつ表示されているかに関係しているようです。他にアイテムがない場合は常に成功しますが、他の多くの複雑な UI 要素が横に表示されている場合、検索は失敗します。
ある種の内部要素制限に達しているように見えます。自動化 API のいずれかについて言及されている文書化された要素の制限が見つかりません。これを回避する方法はありますか? FindFirst
ツリー ウォーク自体を手動で実行する独自の実装を作成する必要があるかもしれないと考えています。これは不必要で遅いようです:-(
どんな助けでも大歓迎です