UI自动化和菜单项

时间:2013-08-10 00:24:55

标签: c# .net ui-automation

我正在尝试使用.NET UI自动化。 我有一个第三方应用程序,我知道是用.NET编写的,但我没有源代码。 我正在启动应用程序 Process.Start(“exe path”); 并获取processID 然后按

搜索主应用程序窗口
 this.MainWindow = AutomationElement.RootElement.FindFirst
                    (TreeScope.Children,
                     new AndCondition(
                         new PropertyCondition(AutomationElement.ProcessIdProperty, this.ProcessId),
                         new PropertyCondition(AutomationElement.NameProperty, InitialWindowName)
                         ));

这是有效的发现 但是在主窗口中,有一个菜单栏,其中包含常见的“文件,编辑,......”

因此,下一步我选择菜单栏并使用

展开文件菜单
var menuBar = this.MainWindow.FindFirst(TreeScope.Children,
                                      new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "menu bar"));
                var fileMenu = menuBar.FindAll(TreeScope.Children, Condition.TrueCondition)[0];
                var expandPattern = fileMenu.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern;
                if (expandPattern.Current.ExpandCollapseState != ExpandCollapseState.Expanded)
                    expandPattern.Expand();
                Thread.Sleep(3000);

由于“文件”菜单选项是菜单栏中的第一个选项,因此这是扩展“文件”菜单选项

现在,我想调用“文件”菜单列表中的打印菜单项。

打印菜单项的名称为“Print Document Ctrl + P”

所以我搜索

var printMenuItem = this.MainWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty,"Print Document   Ctrl+P"));

但没有成功。 我尝试了不同的方式,比如获取所有项目后代并循环遍历名称,以查找是否在其中“打印”但未成功,如此

var list = this.MainWindow.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty,"menu item"));
for (int i = 0; i < list.count; i++)
{
   if (list[0].Current.Name.IndexOf("Print") > -1)...

1 个答案:

答案 0 :(得分:2)

我尝试了这个并且能够找到打印菜单

var printMenu = fileMenu.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Print"));