私のテスト アプリケーションでは、常にフォームを開いたり開いたりしています。フォームが開かれるたびに、フォーム上のすべての要素を取得して、要素をAutomationElementCollection
操作できるようにする必要があります。ただし、これらの要素を繰り返し取得するのはコストがかかるようです (ツリー ナビゲーション/コンテキスト スイッチなどのため)。
要素を取得するメソッドの周りにブール値を設定しようとしました。メソッドが初めて呼び出された場合、メソッドは正常に実行され、ブール値が true に設定されます。メソッドが 2 回目に呼び出された場合、配列は既に設定されているため、何もしません。
ただしAutomationElement
、配列内の任意の操作を (2 回目) 実行しようとすると、要素が使用できないようです。フォームを閉じると、これらの要素が何らかの形で「無効」になりますか? フォームを開くたびにこれらの要素を見つけて、「新鮮」にする必要がありますか?
私は方法を見ましたCacheRequest
が、それは要素ではなく、プロパティ/パターンへのアクセスにのみ関係しているようです。
コード/エラーメッセージは次のとおりです。
AutomationElement GAP;
AutomationElementcollection GAP1;
private bool initGAP1 = false;
public void initGAP()
{
if (!initGAP1)
{
int refnum = ...;
int refnum2 = ...;
AutomationElementCollection temp = MMChildren[refnum].FindAll(TreeScope.Children, findCondition);
GAP = temp.FindAll(TreeScope.Children, findCondition)[refnum2];
GAP1 = GAP.FindAll(TreeScope.Children, findCondition); //this contains the elements I want to operate on
initGAP1 = true;
}
}
System.Windows.Automation.ElementNotEnabledException: タイプ 'System.Windows.Automation.ElementNotEnabledException' の例外がスローされました。