を使用して古いプログラムを操作していUIAutomation
ます。私が抱えている問題は、を使用してボタンを押すことInvokePattern
です。
エクスプローラ ウィンドウを開くボタンを押してAutomationElement
ウィンドウの を取得した後AutomationELement
、「開く」ボタンの 、実際にはSplitButton
. 要素を簡単に見つけることができますが、コントロールではなくペイン コントロールとして表示されSplitButton
ます。ただし、Button 要素を探す前にブレークポイントを挿入し、デバッグ モードでコードを手動でステップ実行すると、[開く] ボタンがボタンとして認識されます。
要素を見つけた後にブレークポイントを挿入するButton
と、要素の名前と要素AutomationID
は正しいですがControlType
、ボタンではなくペインです。エクスプローラー ウィンドウを取得した後に遅延を入れても問題ありません。デバッグ中にのみ機能します。奇妙です。
問題のあるコードは次のとおりです。
InvokePattern bPattern = (InvokePattern)button.GetCurrentPattern(InvokePattern.Pattern);
bPattern.Invoke();
for (int wait = 0; wait < 50; wait++)
{
if (explorerWindow != null)
break;
explorerWindow = reportWindow.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "Select Report"));
Thread.Sleep(200);
}
explorerOpenButton = explorerWindow.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "Open"));