using System; using System.Text; using System.Diagnostics; using System.Threading; using System.Windows.Automation; namespace UIATest { class Program { static void Main(string[] args) { Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe"); int processId = process.Id; AutomationElement element = FindElementById(processId, "comboBox1"); ExpandCollapsePattern currentPattern = GetExpandCollapsePattern(element); currentPattern.Expand(); Thread.Sleep(1000); currentPattern.Collapse(); } /**//// <summary> /// Get the automation elemention of current form. /// </summary> /// <param name="processId">Process Id</param> /// <returns>Target element</returns> public static AutomationElement FindWindowByProcessId(int processId) { AutomationElement targetWindow = null; int count = 0; try { Process p = Process.GetProcessById(processId); targetWindow = AutomationElement.FromHandle(p.MainWindowHandle); return targetWindow; } catch (Exception ex) { count++; StringBuilder sb = new StringBuilder(); string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString(); if (count > 5) { throw new InvalidProgramException(message, ex); } else { return FindWindowByProcessId(processId); } } } /**//// <summary> /// Get the automation element by automation Id. /// </summary> /// <param name="windowName">Window name</param> /// <param name="automationId">Control automation Id</param> /// <returns>Automatin element searched by automation Id</returns> public static AutomationElement FindElementById(int processId, string automationId) { AutomationElement aeForm = FindWindowByProcessId(processId); AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, automationId)); return tarFindElement; }
ExpandCollapsePattern helper#region ExpandCollapsePattern helper /**//// <summary> /// Get ExpandCollapsePattern /// </summary> /// <param name="element">AutomationElement instance</param> /// <returns>ExpandCollapsePattern instance</returns> public static ExpandCollapsePattern GetExpandCollapsePattern(AutomationElement element) { object currentPattern; if (!element.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out currentPattern)) { throw new Exception(string.Format("Element with AutomationId '{0}' and Name '{1}' does not support the ExpandCollapsePattern.", element.Current.AutomationId, element.Current.Name)); } return currentPattern as ExpandCollapsePattern; } #endregion } } |