您的位置:首页 > 产品设计 > UI/UE

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

2013-01-14 16:46 441 查看
SelectionItemPattern

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

1. SelectionItemPattern的三个重要方法:

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

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

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

2. SelectionItemPattern的Current属性

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

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

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

复制代码
以下代码为XAML:

1<Window x:Class="WpfApp.Window1"

2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

4 Title="Window1" Height="219" Width="353">

5 <Grid>

6 <RadioButton Height="16" HorizontalAlignment="Right" Margin="0,46,10,0" Name="radioButton1" VerticalAlignment="Top" Width="120">RadioButton</RadioButton>

7 </Grid>

8</Window>

9

复制代码
本文简单介绍了SelectionItemPattern以及使用SelectionItemPattern来操作RadioButton。(文/开着拖拉机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: