Thanks for your response.
Solution to my problem is to first instantiate AutomationElement from dll,
not from IronPython.
Then all subsequent AutomationElement retrieved from IronPython looks ok.

Jozef

2009/11/6 Shri Borde <shri.bo...@microsoft.com>

>  In the past, there had been issues with UIAutomation as mentioned in
> http://blogs.msdn.com/shrib/archive/2008/03/24/ironpython-cannot-call-automationelement-fromhandle.aspx.
> This could be related. You could try it on Win7 to see if its fixed.
>
>
>
> You can also try the techniques mentioned in
> http://blogs.msdn.com/shrib/archive/2008/03/24/what-if-a-c-snippet-does-not-work-when-transliterated-to-ironpython.aspxto
>  narrow down the problem.
>
>
>
> *From:* users-boun...@lists.ironpython.com [mailto:
> users-boun...@lists.ironpython.com] *On Behalf Of *Jozef
> *Sent:* Friday, November 06, 2009 6:20 AM
> *To:* users@lists.ironpython.com
> *Subject:* [IronPython] What's wrong with IronPython (UIAutomation)
>
>
>
> Hi,
>
>
>
> I'm using UIAutomation framework with IronPython to test our application.
>
> For WPF dialogs it works perfectly. But I run into trouble when try to use
> it for some older dialogs.
>
>
>
> The problem:  With IronPython I'm not able to get proper control type. Any
> controls appears as ControlType.Pane
>
>
>
> Simple example: (with windows calculator)
>
> --------------------------------------- IP Code
> ------------------------------------------------------
>
> import clr
>
>
>
> clr.AddReference('UIAutomationClient')
>
> clr.AddReference('UIAutomationTypes')
>
>
>
> from System.Windows.Automation import *
>
>
>
> _rootElement = AutomationElement.RootElement
>
>
>
> if __name__ == '__main__':
>
>
>
> nameCondition = PropertyCondition(AutomationElement.NameProperty,
> "Calculator")
>
> typeCondition = PropertyCondition(AutomationElement.ControlTypeProperty,
> ControlType.Window)
>
> calcCondition = AndCondition(nameCondition, typeCondition)
>
> appCalc = _rootElement.FindFirst(TreeScope.Children, calcCondition)
>
>
>
> if appCalc is not None:
>
>
>
> isFocusable =
> appCalc.GetCurrentPropertyValue(AutomationElement.IsKeyboardFocusableProperty,
> True)
>
>
>
> if isFocusable:
>
> #appCalc.SetFocus()   #calling this raise: System.InvalidOperationException
>
> pass
>
>
>
> contList = appCalc.FindAll(TreeScope.Subtree, Condition.TrueCondition)
>
>
>
> for elm in contList:
>
> progName = elm.Current.ControlType.ProgrammaticName
>
> print progName
>
>
> -----------------------------------------------------------------------------------------------------------
>
> above code produce following output:
>
>
>
> ControlType.Window
> ControlType.Pane
> ControlType.Pane
> ControlType.Pane
> ControlType.Pane
> ControlType.Pane
> .
>
> .
>
> .
>
>
>
>
> similar C# code works as expected
>
> ------------------------------------------ C# Code
> ---------------------------------------------------
>
> using System;
>
> using System.Collections.Generic;
>
> using System.Linq;
>
> using System.Text;
>
> using System.Windows.Automation;
>
> using Automation = System.Windows.Automation;
>
>
>
> namespace UIAutTest
>
> {
>
> class Program
>
> {
>
> static void Main(string[] args)
>
> {
>
> AutomationElement rootElement = AutomationElement.RootElement;
>
>
>
> Automation.Condition nameCondition = new
> PropertyCondition(AutomationElement.NameProperty, "Calculator");
>
> Automation.Condition controlCondition = new
> PropertyCondition(AutomationElement.ControlTypeProperty,
> ControlType.Window);
>
> Automation.Condition calcCondition = new AndCondition(nameCondition,
> controlCondition);
>
> AutomationElement appCalc = rootElement.FindFirst(TreeScope.Children,
> calcCondition);
>
>
>
>
>
> if (appCalc != null)
>
> {
>
> appCalc.SetFocus();
>
>
>
> AutomationElementCollection allCont = appCalc.FindAll(TreeScope.Subtree,
> Condition.TrueCondition);
>
> foreach (AutomationElement elm in allCont)
>
> {
>
> string contProgNam = elm.Current.ControlType.ProgrammaticName;
>
> Console.WriteLine(contProgNam);
>
> }
>
> }
>
>
>
> }
>
> }
>
> }
>
>
> ---------------------------------------------------------------------------------------------
>
> C# code produce this output:
>
>
>
> ControlType.Window
> ControlType.Edit
> ControlType.CheckBox
> ControlType.CheckBox
> ControlType.Group
> ControlType.Button
> ControlType.RadioButton
> ControlType.RadioButton
> ControlType.RadioButton
> ControlType.RadioButton
> ControlType.Group
> ControlType.Group
> ControlType.RadioButton
> ControlType.RadioButton
> ControlType.RadioButton
> ControlType.Button
> .
>
> .
>
>
>
>
>
> Does anybody know why ControlType property retrieved by IP code is
> different then ControlType retrieved by C# ?
>
> Others element properties retrieved by IP code seems to by OK.
>
>
>
> Info:
>
> Windows Vista Business, SP2
>
> IronPython 2.6 (2.6.10920.0) on .NET 2.0.50727.4200
>
>
>
> Thanks,
> Jozef
>
>
>
> PS:  Duane Kaufman, send similar question :
> http://lists.ironpython.com/htdig.cgi/users-ironpython.com/2009-June/010693.html
> .
>
> But, no one answer him.
>
> _______________________________________________
> Users mailing list
> Users@lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to