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

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

2013-01-14 16:43 323 查看
ExpandCollapsePattern

表示以可视方式进行展开(以显示内容)和折叠(以隐藏内容)的控件。例如ComboBox控件支持ExpandCollapsePattern。

ExpandCollapsePattern有两个主要方法:

Expand()方法:隐藏 AutomationElement 的全部子代节点、控件或内容。

Collapse()方法:显示 AutomationElement 的全部子节点、控件或内容。

以下代码是用ExpandCollapsePattern来测试ComboBox控件的Expand和Collapse。

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

}

}

复制代码
以下代码为被测程序的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 <ComboBox Name="comboBox1" Height="23" VerticalAlignment="Top" Margin="94,58,0,0" HorizontalAlignment="Left" Width="119">

7 <ComboBoxItem>kaden</ComboBoxItem>

8 <ComboBoxItem>sam</ComboBoxItem>

9 </ComboBox>

10 </Grid>

11</Window>

12

复制代码
Summary



本文主要是对ExpandCollapsePattern 做简单的介绍,并使用ExpandCollapsePattern来操作ComboBox控件,对ComboBox进行Expand和Collapse操作。(文/开着拖拉机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: