Найдите опцию, чтобы щелкнуть правой кнопкой мыши C# White/TestStack UI Automation
Я создаю программный процесс автоматизации с использованием языка C # framework by White \ TestStack.
У меня проблема, потому что я не могу захватить опцию, когда я щелкаю правой кнопкой мыши.
Предварительный просмотр изображения
Код, который я использую, чтобы попробовать это
panel.RightClick();
var propClick = _mainWindow.Get<White.Core.UIItems.MenuItems.PopupMenu>(SearchCriteria.ByText("Propeties"));
propClick .Click();
не могу захватить опцию, делая переменную становится нулевой propClick
Извините мой английский отстой:(
Помогите!
Спасибо:)
3 ответа
Видимо, вы не можете получить контекстное меню через 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();
Я бы также предложил использовать идентификатор автоматизации для управления, которое вы хотите автоматизировать.
Я ничего не пробовал с правым меню мыши. Отображается ли меню после вашего
panel.RightClick();
Иначе, разве контекстное меню не является частью вашей панели?
Вы пытались использовать
panel.RightClick();
var propClick = panel.Get<MenuItems.PopupMenu>(SearchCriteria.ByText("Propeties"));
propClick.Click();
вместо?
Или, может быть, вы можете попробовать Меню вместо 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;
}
}
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();
}
}
Из того, что я видел, контекстные меню - это отдельное окно без имени, но это, разумеется, приложение.