3

我正在使用 White\TestStack 的语言 C# 框架创建软件过程自动化。

我有一个问题,因为当我用鼠标右键单击时无法捕获选项。

图像预览

我用来尝试这个的代码

  panel.RightClick();    
  var propClick = _mainWindow.Get<White.Core.UIItems.MenuItems.PopupMenu>(SearchCriteria.ByText("Propeties"));
  propClick .Click();

无法捕获选项,使得变量变为空 propClick

对不起我的英语很烂:(

帮助!

谢谢 :)

4

3 回答 3

6

显然你不能通过Get<T>方法获得上下文菜单。在找到这段文档之前,我一直在研究这种方法: https ://github.com/TestStack/White/blob/6c61106f2a62686636eb7cace0ee187a02db7295/docs/UIItems.md#menu-bars

所以在你的情况下应该是:

panel.RightClick();
var popup = _mainWindow.Popup;
var properties_item = popup.ItemBy(
  SearchCriteria.ByText( "Propeties" )
);
properties_item.Click();

我还建议对您希望自动化的每个控件使用自动化 ID。

于 2017-02-21T15:09:50.433 回答
0
panel.RightClick();
Thread.Sleep(500);
var windows = application.GetWindows();
foreach (Window window in windows) {
    if (window.Name == "") {
        var propClick = window.Get<PopupMenu>(SearchCriteria.ByText("Propeties"));
        propClick.Click();
    }
}

从我所看到的上下文菜单是没有名称的单独窗口,但这是特定于应用程序的

于 2015-03-24T15:30:34.773 回答
0

我没有用鼠标右键菜单尝试过任何东西。菜单是否显示在您的

panel.RightClick();

否则,您的面板不是上下文菜单的一部分吗?

您是否尝试过使用

panel.RightClick();    
var propClick = panel.Get<MenuItems.PopupMenu>(SearchCriteria.ByText("Propeties"));
propClick.Click();

反而?

或者你可以试试 Menu 而不是 PopupMenu

var propClick = panel.Get<MenuItems.Menu>(SearchCriteria.ByText("Propeties"));

或者让白先为你决定,然后通过放置断点来读取类型

var propClick = panel.Get(SearchCriteria.ByText("Propeties"));

编辑:为此,以下方法可能有助于使用键盘命令选择上下文菜单。

除此之外,您可能想尝试使用键盘选择菜单。白色没有上下文菜单(鼠标右键菜单)的特殊键,但下面的方法可以帮助解决这个问题。

    /// <summary>
    /// Right mouse click simulation (SHIFT+F10)
    /// </summary>
    /// <param name="container">Container in whish the click should occur.</param>
    private static void ShowContextMenu(this UIItemContainer container)
    {
        container.Keyboard.HoldKey(KeyboardInput.SpecialKeys.SHIFT);
        container.Keyboard.PressSpecialKey(KeyboardInput.SpecialKeys.F10);
        container.Keyboard.LeaveKey(KeyboardInput.SpecialKeys.SHIFT);
    }

这个选择上下文菜单

    /// <summary>
    /// Get the context menu (right mouse menu) of <paramref name="container"/> whre the current focus is.
    /// </summary>
    /// <param name="mainWindow">Main window of the application, because the context menu is always a child of the window.</param>
    /// <param name="container">Container on which the right click shoul occur.</param>
    /// <returns>Context menu</returns>
    internal static PopUpMenu GetContextMenuOf(this Window mainWindow, UIItemContainer container)
    {
        using (CoreAppXmlConfiguration.Instance.ApplyTemporarySetting(c => c.PopupTimeout = 750))
        {
            container.ShowContextMenu();
            return mainWindow.Popup;
        }
    }
于 2015-02-10T12:20:10.430 回答