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






2.09/5 (4投票s)
使用菜单项和MenuStrip控件的UI自动化挑战
引言
本文将帮助您了解Microsoft .NET Framework的System.Windows.Forms
中MenuItem和MenuStrip控件的一些有趣挑战。特别是,如果您正在创建测试自动化框架,这将指导您使用正确的控件模式。
背景
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 });
}
有三个顶级菜单项“文件”、“项目”和“帮助”。
“文件”菜单项有三个子菜单项“新建”、“加载”和“退出”。“项目”和“帮助”没有子菜单项。

上面的屏幕截图是使用UI Spy拍摄的,但您可以使用任何工具查看控件渲染。
突出显示的部分显示了两种视角
MenuItem
“文件”:正如您在代码中看到的,在“文件”菜单下存在3个菜单项,但您看不到,因为MainMenu
除非您单击它,否则不会渲染它。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
控件渲染菜单项。您会看到这两种行为与上面使用MainMenu
控件渲染的行为不同。
MenuItem
“文件”:现在您在此屏幕截图中看到“文件”在其下有三个菜单项,无需单击“文件”菜单项。这是新Microsoft .NET Framework一部分的有趣更改或增强功能之一。- 调用模式:渲染时,它使用调用模式而不是
ExpandCollapse
模式。
建议
如果您正在使用UI自动化 (UIAutomation
) 创建测试自动化框架,我建议您使用TryGetControlPattern
。在这种情况下,请检查调用或展开/折叠模式。
历史
- 2010年6月28日:初始发布