使用UI Automation实现自动化测试--4.6.1

来源:互联网 发布:职场社交软件 编辑:程序博客网 时间:2024/06/06 04:32
SelectionItemPattern

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

1.        SelectionItemPattern的三个重要方法:

          1.        AddToSelection:将当前元素添加到所选项的集合。

          2.        RemoveFromSelection: 从选定项的集合中移除当前元素。

          3.        Select: 取消所有已选中的项,然后选择当前元素。

2.        SelectionItemPattern的Current属性

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

    如下代码演示了使用SelectionItemPattern来操作RadioButton控件。
  1. 1using System;
  2. 2using System.Text;
  3. 3using System.Diagnostics;
  4. 4using System.Threading;
  5. 5using System.Windows.Automation;
  6. 6
  7. 7namespace UIATest
  8. 8{
  9. 9    class Program
  10. 10    {
  11. 11        static void Main(string[] args)
  12. 12        {
  13. 13            Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe");
  14. 14            int processId = process.Id;
  15. 15
  16. 16            AutomationElement element = FindElementById(processId, "radioButton1");
  17. 17            SelectionItemPattern selectionItemPattern = GetSelectionItemPattern(element);
  18. 18            selectionItemPattern.Select();
  19. 19        }
  20. 20
  21. 21        /**//// <summary>
  22. 22        /// Get the automation elemention of current form.
  23. 23        /// </summary>
  24. 24        /// <param name="processId">Process Id</param>
  25. 25        /// <returns>Target element</returns>
  26. 26        public static AutomationElement FindWindowByProcessId(int processId)
  27. 27        {
  28. 28            AutomationElement targetWindow = null;
  29. 29            int count = 0;
  30. 30            try
  31. 31            {
  32. 32                Process p = Process.GetProcessById(processId);
  33. 33                targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
  34. 34                return targetWindow;
  35. 35            }
  36. 36            catch (Exception ex)
  37. 37            {
  38. 38                count++;
  39. 39                StringBuilder sb = new StringBuilder();
  40. 40                string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString();
  41. 41                if (count > 5)
  42. 42                {
  43. 43                    throw new InvalidProgramException(message, ex);
  44. 44                }
  45. 45                else
  46. 46                {
  47. 47                    return FindWindowByProcessId(processId);
  48. 48                }
  49. 49            }
  50. 50        }
  51. 51
  52. 52
  53. 53        /**//// <summary>
  54. 54        /// Get the automation element by automation Id.
  55. 55        /// </summary>
  56. 56        /// <param name="windowName">Window name</param>
  57. 57        /// <param name="automationId">Control automation Id</param>
  58. 58        /// <returns>Automatin element searched by automation Id</returns>
  59. 59        public static AutomationElement FindElementById(int processId, string automationId)
  60. 60        {
  61. 61            AutomationElement aeForm = FindWindowByProcessId(processId);
  62. 62            AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
  63. 63            new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
  64. 64            return tarFindElement;
  65. 65        }
  66. 66
  67. 67        SelectItemPattern#region SelectItemPattern
  68. 68
  69. 69        /**//// <summary>
  70. 70        /// Get SelectItemPattern
  71. 71        /// </summary>
  72. 72        /// <param name="element">AutomationElement instance</param>
  73. 73        /// <returns>SelectItemPattern instance</returns>
  74. 74        public static SelectionItemPattern GetSelectionItemPattern(AutomationElement element)
  75. 75        {
  76. 76            object currentPattern;
  77. 77            if (!element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out currentPattern))
  78. 78            {
  79. 79                throw new Exception(string.Format("Element with AutomationId '{0}' and Name '{1}' does not support the SelectionItemPattern.",
  80. 80                    element.Current.AutomationId, element.Current.Name));
  81. 81            }
  82. 82            return currentPattern as SelectionItemPattern;
  83. 83        }
  84. 84
  85. 85        #endregion
  86. 86    }
  87. 87}
  88. 88
复制代码
以下代码为XAML:
  1. 1<Window x:Class="WpfApp.Window1"
  2. 2    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. 3    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. 4    Title="Window1" Height="219" Width="353">
  5. 5    <Grid>
  6. 6        <RadioButton Height="16" HorizontalAlignment="Right" Margin="0,46,10,0" Name="radioButton1" VerticalAlignment="Top" Width="120">RadioButton</RadioButton>
  7. 7    </Grid>
  8. 8</Window>
  9. 9
复制代码
本文简单介绍了SelectionItemPattern以及使用SelectionItemPattern来操作RadioButton。(文/开着拖拉机)
原创粉丝点击