通常、ダイアログにテキストを入力してボタンを押す操作を
UI Automation を使って実現しようとするとこんな感じになります。
var root = AutomationElement.RootElement;
var dialog = root.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "TestWindow"));
var text = dialog.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.AutomationIdProperty, "TextBox1"));
var button = dialog.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.AutomationIdProperty, "Button1"));
(text.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern).SetValue("foo");
(button.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern).Invoke();
……うんざりですね。
というわけで面倒なところは拡張メソッドにまとめてみました。
UiAutomationExtension を使うと同じことをこんな感じで書けます。
UIAutomationExtension.Root.FromName("TestWindow").FromId("TextBox1").AsValue().SetValue("foo");
UIAutomationExtension.Root.FromName("TestWindow").FromId("Button1").AsInvoke().Invoke();
これで UI まわりの単体テストを少しは書きやすくなると思います。