[IronPython] Issues with IronPython UI Automation

Duane Kaufman duanek at chorus.net
Fri Jun 26 20:28:58 CEST 2009


Hi,

I am new to the group, and trying to educate myself on using  
IronPython for UI Automation.

I found a code snippet (in C#) to pattern some Python after on the  
web: (from  
http://refact.blogspot.com/2009/03/ui-automation-library.html), which  
is supposed to check to see that a keypress of the "1" button makes a  
"1" appear in the calculator display. I am running into a problem  
where I can't find the Edit control programmatically.

// .. Launch Calc Process

Process[] processes = Process.GetProcessesByName("calc");

AutomationElement _mainWindow=
   AutomationElement.FromHandle(processes[0].MainWindowHandle);

AutomationElement lButton =_mainWindow.FindFirst(
         TreeScope.Children,
         new PropertyCondition(AutomationElement.NameProperty, "1"));

((InvokePattern)(lButton .GetCurrentPattern(InvokePattern.Pattern))).Invoke();

AutomationElement lScreen = _mainWindow.FindFirst(
           TreeScope.Children,
           new PropertyCondition(AutomationElement.ControlTypeProperty,
           ControlType.Edit));

string lDisplayText =
   (string)lScreen.GetCurrentPropertyValue(ValuePattern.ValueProperty);


Assert.Equals("1",lDisplayText);

processes [0].Close();

My Python code to attempt something similar:

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

# unlike C# example, make sure Windows Calculator is running before  
running this script
tops = AutomationElement.RootElement.FindAll(TreeScope.Children,  
Condition.TrueCondition)
for elem in tops:
     #print "Window %s is available" %  
elem.GetCurrentPropertyValue(AutomationElement.NameProperty)
     if elem.GetCurrentPropertyValue(AutomationElement.NameProperty)  
== 'Calculator':
         print "Calculator found! Total of %d UI elements" %  
len(elem.FindAll(TreeScope.Children, Condition.TrueCondition))
         NameCondition = PropertyCondition(AutomationElement.NameProperty, "1")
         lButton = elem.FindFirst(TreeScope.Children, NameCondition)
         print lButton
         EditCondition =  
PropertyCondition(AutomationElement.ControlTypeProperty,  
ControlType.Edit)
         lScreen = elem.FindFirst(TreeScope.Children, EditCondition)
         print lScreen

The output looks like:
Calculator found! Total of 74 UI elements
<System.Windows.Automation.AutomationElement object at  
0x000000000000002B [Syste
m.Windows.Automation.AutomationElement]>
None

which seems to indicate that the Edit control was not found, but I can  
find it using a tool like UISpy. Why can't I search for the Edit  
control in this window and find it?

Thanks in advance,
Duane



More information about the Ironpython-users mailing list