使用UI Automation实现自动化测试(4.6.1)——SelectionItemPattern

发表于:2009-11-11 13:51

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:开着拖拉机    来源:51Testing软件测试网采编

  SelectionItemPattern

  支持SelectionItemPattern的控件有ListView、ListBox、RadioButton、GridView等。

  SelectionItemPattern的三个重要方法:

  • AddToSelection:将当前元素添加到所选项的集合。
  • RemoveFromSelection: 从选定项的集合中移除当前元素。
  • Select: 取消所有已选中的项,然后选择当前元素。

  SelectionItemPattern的Current属性

  可通过Current属性的IsSelected属性来判断AutomationElement是否被selected。

  如下代码演示了使用SelectionItemPattern来操作RadioButton控件。

  Code

  1using System;
  2using System.Text;
  3using System.Diagnostics;
  4using System.Threading;
  5using System.Windows.Automation;
  6
  7namespace UIATest
  8{
  9    class Program
  10    {
  11        static void Main(string[] args)
  12        {
  13            Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe");
  14            int processId = process.Id;
  15
  16            AutomationElement element = FindElementById(processId, "radioButton1");
  17            SelectionItemPattern selectionItemPattern = GetSelectionItemPattern(element);
  18            selectionItemPattern.Select();
  19        }
  20
  21        /**//// <summary>
  22        /// Get the automation elemention of current form.
  23        /// </summary>
  24        /// <param name="processId">Process Id</param>
  25        /// <returns>Target element</returns>
  26        public static AutomationElement FindWindowByProcessId(int processId)
  27        {
  28            AutomationElement targetWindow = null;
  29            int count = 0;
  30            try
  31            {
  32                Process p = Process.GetProcessById(processId);
  33                targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
  34                return targetWindow;
  35            }
  36            catch (Exception ex)
  37            {
  38                count++;
  39                StringBuilder sb = new StringBuilder();
  40                string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString();
  41                if (count > 5)
  42                {
  43                    throw new InvalidProgramException(message, ex);
  44                }
  45                else
  46                {
  47                    return FindWindowByProcessId(processId);
  48                }
  49            }
  50        }
  51
  52
  53        /**//// <summary>
  54        /// Get the automation element by automation Id.
  55        /// </summary>
  56        /// <param name="windowName">Window name</param>
  57        /// <param name="automationId">Control automation Id</param>
  58        /// <returns>Automatin element searched by automation Id</returns>
  59        public static AutomationElement FindElementById(int processId, string automationId)
  60        {
  61            AutomationElement aeForm = FindWindowByProcessId(processId);
  62            AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
  63            new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
  64            return tarFindElement;
  65        }
  66
  67        SelectItemPattern#region SelectItemPattern
  68
  69        /**//// <summary>
  70        /// Get SelectItemPattern
  71        /// </summary>
  72        /// <param name="element">AutomationElement instance</param>
  73        /// <returns>SelectItemPattern instance</returns>
  74        public static SelectionItemPattern GetSelectionItemPattern(AutomationElement element)
  75        {
  76            object currentPattern;
  77            if (!element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out currentPattern))
  78            {
  79                throw new Exception(string.Format("Element with AutomationId '{0}' and Name '{1}' does not support the SelectionItemPattern.",
  80                    element.Current.AutomationId, element.Current.Name));
  81            }
  82            return currentPattern as SelectionItemPattern;
  83        }
  84
  85        #endregion
  86    }
  87}
  88

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号