查找选项,右键单击c#White/TestStack UI Automation

本文关键字:TestStack UI Automation c#White 单击 选项 右键 查找 | 更新日期: 2023-09-27 18:28:56

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

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

图像预览

我用来尝试这个的代码

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

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

对不起,我的英语糟透了:(

救命!

感谢:)

查找选项,右键单击c#White/TestStack UI Automation

显然无法通过Get<T>方法获取上下文菜单。我一直在研究这种方法,直到我找到了这篇文档:https://github.com/TestStack/White/blob/6c61106f2a62686636eb7cace0ee187a02db7295/docs/UIItems.md#menu-条形

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

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

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

我还没有尝试过使用鼠标右键菜单。后是否显示菜单

panel.RightClick();

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

你试过使用吗

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

相反?

或者你可以试试菜单而不是弹出菜单

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

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

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

编辑:除此之外,以下方法可能有助于通过使用键盘命令来选择上下文菜单。

除此之外,您可能需要尝试用键盘选择菜单。White没有上下文菜单(鼠标右键菜单)的特殊键,但下面的方法可以帮助实现这一点。

    /// <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;
        }
    }
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();
    }
}

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