AutomationElement блокируется, когда приложение показывает окно сообщенияC#

Место общения программистов C#
Anonymous
AutomationElement блокируется, когда приложение показывает окно сообщения

Сообщение Anonymous »

В моем приложении WPF есть событие, которое выглядит следующим образом:

Код: Выделить всё

private void ShiftsDataGrid_OnBeginningEdit(object? sender, DataGridBeginningEditEventArgs e)
{
if (e.Column == ShiftIdColumn && !e.Row.IsNewItem)
{
CancelColorPopup();
e.Cancel = true;
MessageBox.Show("Its not allowed to edit an existing id for shifts");
}
}
Он предназначен для того, чтобы запретить пользователям редактировать ячейку в сетке данных в определенных ситуациях и отображать окно сообщения, когда это происходит.
Сейчас я создаю Тест пользовательского интерфейса через System.Windows.Automation, где в моем коде сейчас есть:

Код: Выделить всё

var task = Task.Run(() =>
{
var cell = mainWindow.FindDescendantById("ShiftsDataGrid_Row0_Column0");
var parentCell = cell.GetParent();
parentCell.InsertValue("0");
});

WaitForCondition(() =>
{
AutomationElement.
var okButton = AutomationElement.RootElement.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.AutomationIdProperty, "2"));

if (okButton == null)
return false;

okButton.Click();

return true;
}, TimeSpan.FromSeconds(200));
Это одна из многих попыток вызвать окно сообщения и попытаться нажать кнопку. Проблема связана с вызовом ParentCell.InsertValue("0"); Этот конкретный вызов задействует приведенный выше код события редактирования и отображает окно сообщения, как и ожидалось. Он также блокирует выполнение кода тестирования. Если я нажму кнопку вручную, она освободит родительскую ячейку.InsertValue("0");
Во время этого блока я пытался в других потоках найти это MessageBox, но безуспешно. Что бы я ни делал, я не могу найти свойство AutomationIdProperty со значением 2, которое является кнопкой «ОК» для окна сообщений. Я проверил это с помощью Accessibility Insight для Windows.
Изображение

Я предполагаю, что здесь блокируется поток пользовательского интерфейса, но я не уверен. Есть ли у кого-нибудь хороший подход к тому, как справиться с этой ситуацией?

Подробнее здесь: https://stackoverflow.com/questions/787 ... messagebox

Вернуться в «C#»