Blog Archive

Tuesday, August 19, 2014

WPF UI Automation C# and IronPython Code

Tools: add referecne to UIAutmationClient and UIAutomationTypes. Inspect.exe under local Windows SDK 
directory, used for find AutomationId, name of logical tree, similar to Scoop.

            Process p = Process.Start(@"..\..\..\TryoutUITesting\bin\Debug\TryoutUITesting.exe");
            AutomationElement desktop = AutomationElement.RootElement;
            AutomationElement mainWin =null;
            while( (mainWin= desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "MainWindow")))==null) {}
          AutomationElement button=  mainWin.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "btn"));
          InvokePattern buttonClick = button.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
          buttonClick.Invoke();

          AutomationElement textbox = mainWin.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "tbx"));
          TextPattern textboxText= textbox.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
          string result = textboxText.DocumentRange.GetText(-1);
          Debug.Assert(result == "Foo");

from System.Diagnostics import Process
from System.Diagnostics import Debug

import clr
clr.AddReference("UIAutomationClient")
clr.AddReference("UIAutomationTypes")
from System.Windows.Automation import *
from System.Windows.Automation import PropertyCondition


def main():
    p=Process.Start("C:\\working\\TryoutWPFTesting\\TryoutWPFTesting\\bin\\Debug\\TryoutWPFTesting.exe")
    desktop=AutomationElement.RootElement

    mainWin =None
    while (mainWin==None): 
        mainWin= desktop.FindFirst(TreeScope.Children, PropertyCondition(AutomationElement.NameProperty, "MainWindow"))

    button=  mainWin.FindFirst(TreeScope.Children, PropertyCondition(AutomationElement.AutomationIdProperty, "btn"))
    buttonClick = button.GetCurrentPattern(InvokePattern.Pattern)
    buttonClick.Invoke()
 
    textbox = mainWin.FindFirst(TreeScope.Children, PropertyCondition(AutomationElement.AutomationIdProperty, "tbx"))
    textboxText= textbox.GetCurrentPattern(TextPattern.Pattern)
    result = textboxText.DocumentRange.GetText(-1);
    Debug.Assert(result == "Foo");
    p.WaitForExit()

if __name__=="__main__":
    main()

No comments: