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

本文介绍如何使用SelectionItemPattern操作RadioButton控件,包括添加、移除及选择等方法,并提供了一个示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SelectionItemPattern

支持SelectionItemPattern的控件有ListViewListBoxRadioButtonGridView等。

1.         SelectionItemPattern的三个重要方法:

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

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

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

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

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

ContractedBlock.gifExpandedBlockStart.gifCode
 1using System;
 2using System.Text;
 3using System.Diagnostics;
 4using System.Threading;
 5using System.Windows.Automation;
 6
 7namespace UIATest
 8ExpandedBlockStart.gifContractedBlock.gif{
 9    class Program
10ExpandedSubBlockStart.gifContractedSubBlock.gif    {
11        static void Main(string[] args)
12ExpandedSubBlockStart.gifContractedSubBlock.gif        {
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
21ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <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)
27ExpandedSubBlockStart.gifContractedSubBlock.gif        {
28            AutomationElement targetWindow = null;
29            int count = 0;
30            try
31ExpandedSubBlockStart.gifContractedSubBlock.gif            {
32                Process p = Process.GetProcessById(processId);
33                targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
34                return targetWindow;
35            }

36            catch (Exception ex)
37ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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)
42ExpandedSubBlockStart.gifContractedSubBlock.gif                {
43                    throw new InvalidProgramException(message, ex);
44                }

45                else
46ExpandedSubBlockStart.gifContractedSubBlock.gif                {
47                    return FindWindowByProcessId(processId);
48                }

49            }

50        }

51
52
53ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <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)
60ExpandedSubBlockStart.gifContractedSubBlock.gif        {
61            AutomationElement aeForm = FindWindowByProcessId(processId);
62            AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
63            new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
64            return tarFindElement;
65        }

66
67ContractedSubBlock.gifExpandedSubBlockStart.gif        SelectItemPattern#region SelectItemPattern
68
69ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <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)
75ExpandedSubBlockStart.gifContractedSubBlock.gif        {
76            object currentPattern;
77            if (!element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out currentPattern))
78ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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

ContractedBlock.gifExpandedBlockStart.gifCode
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

转载于:https://www.cnblogs.com/kangyi/archive/2009/09/18/1569563.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值