UIAutomation - 奇怪的ExpandCollapse行为

时间:2012-02-17 07:45:28

标签: c# ui-automation

我尝试使用Microsoft UI Automation自动执行菜单选择。

我定位的应用程序是包含嵌入式浏览器的Windows应用程序。该应用程序有一个菜单栏,其中包含文件,编辑等菜单项。

我运行自动化的机器是Windows XP机器。

这是我用来展开文件菜单项的代码:

AutomationElement aeMenuBar = 
            aeFormElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.MenuBar));


        AutomationElement aeFileItem = 
            aeMenuBar.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "File"));


        ExpandCollapsePattern fileECPattern = aeFileItem.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern;
        fileECPattern.Expand();

当我点击Expand()方法时,我得到一个InvalidOperationException。

我无法弄清楚导致异常的原因。 fileECPattern的ExpandCollapseState是Collapsed,我认为是正确的(换句话说,它不是LeafNode)。

我注意到的一件事是当我使用UI Spy查看它时,目标应用程序中出现了一些异常行为。特别是,如果在UI Spy中我选择了File菜单项" Scope to Element",然后运行Expand方法,File菜单不会展开。相反,菜单项下一步到文件(即编辑)会展开。其他菜单项也会出现同样的行为。当我更改应用程序(例如,Microsoft Paint)时,它并没有发生 - 一切似乎都在那里正常工作。

在某些基本级别上,我的目标应用程序中的菜单项似乎与UI自动化和UI间谍似乎不太合适。

对于为什么不提出任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

某些应用中的菜单栏很棘手;它们通常只是“toolbarwindow32”工具栏常用控件,当按下菜单项时,应用程序将调用TrackPopupMenu来显示子菜单 - 并且下拉菜单栏与菜单栏之间实际上没有实际链接,除了一行或两行应用程序中的代码。 UIAutomation在为其知道的菜单(例如,在Win7记事本之前找到的User32类型)进行扩展/折叠工作时做了“最佳尝试”,但并不总是在其他地方工作。

您可以尝试的后备:查看Invoke是否作为显示子菜单的方式;如果失败了,请尝试获取可点击的点并在该位置单击鼠标(使用SendInput)。