通常、ダイアログにテキストを入力してボタンを押す操作を
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 まわりの単体テストを少しは書きやすくなると思います。

Last edited Oct 30, 2012 at 3:37 PM by uhimania, version 2