65.9K
CodeProject 正在变化。 阅读更多。
Home

UI 自动化有趣挑战 - 测试自动化框架

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.09/5 (4投票s)

2010 年 6 月 28 日

CPOL

2分钟阅读

viewsIcon

31812

使用菜单项和MenuStrip控件的UI自动化挑战

引言

本文将帮助您了解Microsoft .NET Framework的System.Windows.FormsMenuItemMenuStrip控件的一些有趣挑战。特别是,如果您正在创建测试自动化框架,这将指导您使用正确的控件模式。

背景

2005年,Microsoft发布了UIA(UI自动化)作为旧版Microsoft Active Accessibility(MSAA)框架的替代品。此框架有助于UI辅助功能。MenuStrip是取代MainMenu的顶级容器。

Using the Code

以下代码用于在早期版本的.NET Framework中生成菜单项。它仍然可以在新版本的Microsoft .NET Framework中使用,但MenuStrip是渲染菜单项的推荐方法。

使用MainMenu渲染MenuItem

private void GenerateMenu()
{
    MainMenu mainMenu = new MainMenu();
    this.Menu = mainMenu;
 
    //Top Level menu items
    MenuItem menuFile = new MenuItem("File");
    MenuItem menuProject = new MenuItem("Project");
    MenuItem menuHelp = new MenuItem("Help");
    mainMenu.MenuItems.AddRange(new MenuItem[] 
			{ menuFile, menuProject, menuHelp });
 
    //Menu item under "File" menu
    MenuItem menuNew = new MenuItem("New");
    MenuItem menuLoad = new MenuItem("Load");
    MenuItem menuExit = new MenuItem("Exit");
 
    menuFile.MenuItems.AddRange(new MenuItem[] { menuNew, menuLoad, menuExit });
}

有三个顶级菜单项“文件”、“项目”和“帮助”。

“文件”菜单项有三个子菜单项“新建”、“加载”和“退出”。“项目”和“帮助”没有子菜单项。

MainMenu_-_ExpandCollapse.png

上面的屏幕截图是使用UI Spy拍摄的,但您可以使用任何工具查看控件渲染。

突出显示的部分显示了两种视角

  1. MenuItem“文件”:正如您在代码中看到的,在“文件”菜单下存在3个菜单项,但您看不到,因为MainMenu除非您单击它,否则不会渲染它。
  2. ExpandCollapse模式:渲染时,它使用展开/折叠模式而不是调用模式。如果您不熟悉控件模式,请阅读MSDN上的UI自动化 (UIAutomation) 的详细信息。

您将在下面看到它与MenuStrip的比较。

使用MenuStrip渲染MenuItem

以下代码用于在新版本的.NET Framework中使用MenuStrip控件生成菜单项。

private void GenerateMenu()
{
    MenuStrip menuStrip = new MenuStrip();
 
    //Top Level menu items
    ToolStripMenuItem menuFile = new ToolStripMenuItem("File");
    ToolStripMenuItem menuProject = new ToolStripMenuItem("Project");
    ToolStripMenuItem menuHelp = new ToolStripMenuItem("Help");
    menuStrip.Items.AddRange(new ToolStripMenuItem[] 
		{ menuFile, menuProject, menuHelp });
 
    //Menu item under "File" menu
    ToolStripMenuItem menuNew = new ToolStripMenuItem("New");
    ToolStripMenuItem menuLoad = new ToolStripMenuItem("Load");
    ToolStripMenuItem menuExit = new ToolStripMenuItem("Exit");
 
    menuFile.DropDownItems.AddRange(new ToolStripMenuItem[] 
		{ menuNew, menuLoad, menuExit });
 
    this.Controls.Add(menuStrip);
}

它具有相同的结构,顶部有三个菜单项,第一个菜单项有三个子菜单项。

MenuStrip_-_Invoke.png

上面的屏幕截图显示了使用MenuStrip控件渲染菜单项。您会看到这两种行为与上面使用MainMenu控件渲染的行为不同。

  1. MenuItem“文件”:现在您在此屏幕截图中看到“文件”在其下有三个菜单项,无需单击“文件”菜单项。这是新Microsoft .NET Framework一部分的有趣更改或增强功能之一。
  2. 调用模式:渲染时,它使用调用模式而不是ExpandCollapse模式。

建议

如果您正在使用UI自动化 (UIAutomation) 创建测试自动化框架,我建议您使用TryGetControlPattern。在这种情况下,请检查调用或展开/折叠模式。

历史

  • 2010年6月28日:初始发布
© . All rights reserved.