Search code examples
wpfcoded-ui-testsui-testingmicrosoft-ui-automation

Microsoft UI Automation Library Vs Coded UI Test


I'm very much new to Test Automation kind of thing. Recently I've been assigned to a project where I have to write an application (or, a script may be, I'm not sure) that will automate the UI testing of a CAD-like WPF application which misses lots of AutomationIds.

After doing a little searching on MSDN and other sources I'm a bit confused about whether I should use the Microsoft UI Automation Library or the new Coded UI Test feature included in VS2010. I'm not getting the clear picture of which one of these two applies in which scenarios, what advantages one has over the other and which one suits my purpose.

Please shade some light if you have experience/knowledge on the matter. Thanks in advance.


Solution

  • Basically Microsoft UIA is the new accesibility library in .Net 4.0. WPF applications and controls have built-in support for UIA through the AutomationPeer class.

    Coded-UI test is a Record & Play automation tool which uses the Microsoft UIA Library underneath. Since being a tool compared to writing code in C# it improves QA productivity for recording more test cases.

    For applications with automation support planned into it, Coded-Ui should be sufficient. If the AutomationIDs are missing make sure the controls have some unique property like Name. Use UIVerify or Inspect to check for this.

    If NO unique property is avialble, there are the other below mentioned techniques you can use in combination with Coded-UI.

    • From an Event When your application receives a UI Automation event, the source object passed to your event handler is an AutomationElement. For example, if you have subscribed to focus-changed events, the source passed to your AutomationFocusChangedEventHandler is the element that received the focus. For more information, see Subscribe to UI Automation Events.

    • From a Point: If you have screen coordinates (for example, a cursor position), you can retrieve an AutomationElement by using the static FromPoint method.

    • From a Window Handle: To retrieve an AutomationElement from an HWND, use the static FromHandle method.

    • From the Focused Control: You can retrieve an AutomationElement that represents the focused control from the static FocusedElement property.