Создание эквивалентного кода с использованием FlaUI.UIA3 для доступа к строкам и столбцам DevGrid * DataGrid в WPF - PullRequest
0 голосов
/ 25 января 2020

Я использую FlaUI для автоматизации моего WPF приложения. У меня есть datagrid контроль от DevExpress. Я хочу получить доступ к любой отдельной строке и ко всем столбцам этой строки и редактировать ее, используя FlaUI. На форуме Dev Express имеется следующий образец, но он предназначен для UIA библиотеки. Как я могу переписать это, используя FlaUI библиотеки?

AutomationElement gridElem = AutomationElement.RootElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "datagrid"));  
GridPattern gridPattern = (GridPattern)gridElem.GetCurrentPattern(GridPattern.Pattern);  
int rowCount = gridPattern.Current.RowCount;  
 List<object> values = new List<object>();  
 for (int i = 0; i < rowCount; i++) {  
    AutomationElement item = gridPattern.GetItem(i, 0);  
    ValuePattern valuePattern = (ValuePattern)item.GetCurrentPattern(ValuePattern.Pattern);  
    values.Add(valuePattern.Current.Value);

Очень плохо знаком с FlaUI & automation.

1 Ответ

0 голосов
/ 10 февраля 2020

Наконец, с помощью DevExpress Support, я смог достичь своих намерений. Вот фрагмент кода, который хорошо работает:)

public void CreateNewViewGrid(Grid grid)
        {
            var pattern = grid.Patterns.Grid;
            var rowCount = pattern.Pattern.RowCount;
            var colCount = pattern.Pattern.ColumnCount;
            var values = new List<object>();

            List<string> columnNames = new List<string>();
            columnNames.Add("Vessel Id");
            columnNames.Add("Voyage Id");
            columnNames.Add("Load Date");
            columnNames.Add("Dis Date");
            columnNames.Add("Vessel Name");
            columnNames.Add("Status");

            for (int i = 0; i < rowCount; i++)
            {

                var item = pattern.Pattern.GetItem(i, 0);
                var item2 = pattern.Pattern.GetItem(i, 1);
                var value = (item2.Patterns.Value.Pattern.Value).ToString();
                values.Add((value));

                foreach (var data in columnNames)
                {
                    if (value == data)
                    {

                        var itemStatus = item.AsGridCell();

                        itemStatus.Click();

                    }
                }

            }

            //Console.WriteLine(string.Join(", ", values));
            //return values;
        }

перед этим, поиск элемента с использованием FlaUI is necessary

Grid (ссылка FlaUI.Core.AutomationElements) private Grid grid=>windows.FindFirstDescendant(cf=>cf.ByAutomationID("dataGrid").AsGrid();

...