C#Teststack.White自动化Winforms菜单(ControlType.Menu),它不是主窗口的子菜单

C#Teststack.White自动化Winforms菜单(ControlType.Menu),它不是主窗口的子菜单,c#,winforms,ui-automation,white-framework,C#,Winforms,Ui Automation,White Framework,我正在使用Teststack.White自动化一个遗留WinForms应用程序,我遇到了一个问题。 由于某种原因,右键单击某个项目后显示的菜单似乎位于UI层次结构中的主应用程序窗口之外 实现此菜单自动化的最佳方法是什么? 我们的测试框架是围绕一个窗口层次结构构建的,我们访问作为主应用程序窗口子窗口的项 现在我们通过使用键盘箭头选择菜单项并单击Enter(我想这不是最好的解决方案)来解决这个问题 在Teststack.White中有更好的方法解决这个问题吗?谢谢大家! 如果在所有桌面窗口下搜索,

我正在使用Teststack.White自动化一个遗留WinForms应用程序,我遇到了一个问题。 由于某种原因,右键单击某个项目后显示的菜单似乎位于UI层次结构中的主应用程序窗口之外

实现此菜单自动化的最佳方法是什么? 我们的测试框架是围绕一个窗口层次结构构建的,我们访问作为主应用程序窗口子窗口的项

现在我们通过使用键盘箭头选择菜单项并单击Enter(我想这不是最好的解决方案)来解决这个问题


在Teststack.White中有更好的方法解决这个问题吗?谢谢大家!

如果在所有桌面窗口下搜索,可以找到右键单击菜单。见下面的代码:

//调用函数GetCurrentPopUpMenu

        PopUpMenu pop = GetCurrentPopUpMenu();

        pop.Item("Add Child").Click();
//GetCurrentPopUpMenu函数

    PopUpMenu GetCurrentPopUpMenu()
    {
        List<Window> windows = WindowFactory.Desktop.DesktopWindows();
        foreach (Window w in windows)
        {
            if (w.Name == "") return w.Popup;
        }

        return null;
    }
PopUpMenu GetCurrentPopUpMenu()
{
列表窗口=WindowFactory.Desktop.DesktopWindows();
foreach(窗口中的窗口w)
{
如果(w.Name==“”)返回w.Popup;
}
返回null;
}

本机弹出菜单位于应用程序进程内部,但它与主窗体一样是顶级窗口。我建议使用process_id条件搜索它,以避免由于性能原因而打扰其他进程。我不熟悉怀特,这只是个想法。谢谢你的贡献。我本来希望有一些方法,而不是通过顶级窗口,但是现在我想,这可能是唯一可能的解决方案。