【问题标题】:Find option to right click c# White/TestStack UI Automation找到选项以右键单击 c# White/TestStack UI Automation
【发布时间】:2014-11-03 11:27:02
【问题描述】:

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

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

图片预览

我用来尝试的代码

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

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

对不起,我的英语很烂:(

救命!

谢谢:)

【问题讨论】:

  • 您确定是Propeties 而不是Properties 吗?

标签: c# .net white-framework


【解决方案1】:

显然您无法通过Get&lt;T&gt; 方法获取上下文菜单。在找到这段文档之前,我一直在研究这种方法: 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。

【讨论】:

    【解决方案2】:

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

    之后
    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;
            }
        }
    

    【讨论】:

    • 要补充一点,您可能想尝试使用键盘选择菜单。
    【解决方案3】:
    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();
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多