Я реализовал настольное приложение, которое загружает XML в DataGridView.В настоящее время я пишу тесты автоматизации для своего приложения, которые включают тесты для сетки данных.Я использую UI Automation для достижения этой цели.
Я сталкиваюсь с проблемами с DataGridView, который включает в себя вызов фоновых событий сетки (например, CellClick или CellDoubleclick) и доступ к значениям из выбранных строк и утверждение их с соответствующими значениями в текстовых полях с CEllDoubleClickEvent для сетки.
Пожалуйста, обратитесь к изображению для лучшего понимания
Шаг 1 и 2: Загрузите и просмотрите XML в Grid View.
Шаг 3: CellDoublickEventили событие CellClick наступает при выборе строки в DataGridView.
Шаг 4: Соответствующие значения будут выбраны в текстовые поля.Идентификатор отображается с помощью SignalIndex, а значение с DefaultValue.(Примечание. Значения в текстовом поле преобразуются в HEX.)
Ниже приведен код:
// Loads the application window elements correspionding to the ProcessID
var reloadApplication = loadElements(gridProcessID);
// Finds and loads the elements for the DataGridView dgv
var selectGrid = reloadApplication.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.AutomationIdProperty, "dgv"));
// get to ROW X (here it's row #1 name is always "Row X")
AutomationElement row = selectGrid.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "Row 0"));
// get row header
AutomationElement rowHeader = row.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Header));
// invoke it (select the whole line)
InvokePattern invokeRow = rowHeader.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
invokeRow.Invoke();
/// <summary>
/// This method loads the elements for the given Process ID.
/// </summary>
/// <param name="intProcessID"></param>
/// <returns></returns>
private AutomationElement loadElements(int intProcessID)
{
var rootElement = AutomationElement.RootElement;
if (rootElement == null)
{
return null;
}
var propertyNameOfRoot = new PropertyCondition(AutomationElement.ProcessIdProperty, intProcessID);
if (propertyNameOfRoot == null)
{
return null;
}
var tree = new TreeWalker(propertyNameOfRoot);
if (tree == null)
{
return null;
}
AutomationElement elementTree = tree.GetFirstChild(rootElement);
if (elementTree == null)
{
return null;
}
return elementTree;
}
Приведенный выше код сначала получает элементы дерева для окна приложения и findfirst.получает дерево элементов для DataGridView.Во-вторых, он получает первую строку из сетки, а событие invoke выбирает строку в виде сетки. Пример того, что означал выбор строки .
Проблемы:
- Мне нужно вызывать события DataGridView, такие как CellClick, CellDoubleClick во время моего тестирования автоматизации с использованием автоматизации пользовательского интерфейса (чего я не знаю, как этого достичь).
- Мне нужно получить доступ к выбранным данным строки (SignalName: Send, SignalIndex: 4086, DefaultValue: 3) и подтвердить это с помощью заполненных текстовых полей [Пожалуйста, обратитесь к изображению 1 Шаг 3 и 4].
Пожалуйста, дайте мне знать, если кому-то нужна дополнительная информация.
Заранее спасибо.Надеюсь найти решение здесь.:)