UIAutomation——奇怪的展开-折叠行为

本文关键字:折叠 UIAutomation | 更新日期: 2023-09-27 18:25:06

我正在尝试使用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中,我选择文件菜单项"范围到元素",然后运行展开方法,则文件菜单不会展开。相反,文件(即编辑)旁边的菜单项将展开。其他菜单项也会发生同样的行为。当我更改应用程序(例如Microsoft Paint)时,这种情况不会发生——在那里一切似乎都很好。

在某些基本层面上,我的目标应用程序中的菜单项似乎与UI Automation和UI Spy不太匹配。

任何关于为什么不这样做的建议都将不胜感激。

UIAutomation——奇怪的展开-折叠行为

一些应用程序中的菜单栏很棘手;它们通常只是"工具栏窗口32"工具栏通用控件,当菜单项被按下时,应用程序会调用TrackPopupMenu来显示子菜单,而下拉菜单和菜单栏之间实际上没有实际的链接,除了应用程序中的一两行代码。UIAutomation做了一个"最好的尝试",使扩展/折叠适用于它所知道的菜单(例如,你在Win7之前的记事本中找到的User32类型),但在其他地方并不总是有效。

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