White UI Automation: получить значение ячейки WPF DataGrid? - PullRequest
4 голосов
/ 01 ноября 2011

Я очень новичок в белом проекте, и я просто проверял его возможности ... В своей работе я интенсивно работал с wpf & datagrids, я не смог получить значение ячейки сетки данных, когда столбец - DataGridTemplateColumn.

Это не только для DataGridTemplateColumn, это только для всех типов столбцов.

моя таблица данных была такой:

    <my:DataGrid AutoGenerateColumns="False" Margin="25,28,42,34" Name="dataGrid1" >
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn Header="Header"  x:Name="koko" Width="200">
                <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate >
                        <TextBlock Name="moko" Text="{Binding col1, Mode=OneWay,Converter={StaticResource fataGridHighlightConverter }}" ></TextBlock>

                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
                <my:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <Grid x:Name="myEditGrid" Loaded="myEditGrid_Loaded">
                        </Grid>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellEditingTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>

и мой тест был:

           [Test]
    public void TestDatagrid5()
    {
        var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId("dataGrid1"));
        var count = tab.Rows.Count;
        var row = tab.Rows[1];
        ListViewCell x = row.Cells[1]; //Always count = 0 :(
    }

но количество ячеек всегда = 0, мне нужно получить значение ячейки !!!?любая помощь, пожалуйста!

Ответы [ 3 ]

1 голос
/ 06 ноября 2011

Мне не нравится этот ответ, и я хотел бы найти лучший способ сделать это ..

При этом, если вы попросите элемент ListViewRow для элемента в вашей сетке, вы можете взять UiAutomationElement исоздайте белую версию этого элемента сами.

[Test]
public void TestDatagrid5()
{
  var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId"dataGrid1"));

  var column = new List<string>();

  foreach (var r in tab.Rows)
  {
    var automationElement = r.GetElement(SearchCriteria.ByAutomationId("moko"));

    var label = new Label(automationElement, new NullActionListener());

    column.Add(label.Text);
  }

  Assert.That(column, Is.EquivalentTo(new[] { "what", "is", "expected" }));

}
0 голосов
/ 22 августа 2014

Я бы предложил другой способ.Если сетка поддерживает экспорт в CSV - используйте ее.Это сэкономит вам месяцы работы!Если бы я только знал, что раньше ...

Идентификация ячеек и извлечение значений могут быть болезненными.Многие элементы управления сеткой выполняют виртуализацию пользовательского интерфейса.Ячейки, которые не соответствуют области просмотра, не будут созданы.Вам придется прокручивать сетку, чтобы вызвать их рендеринг.

Лично я использую сетку DevExpress.Их CSV-экспорт сохраняет форматирование, поэтому вы получите значения в точности так, как они отображаются на экране!

0 голосов
/ 22 ноября 2013

foreach (var r в tab.Rows) {var automaEElement = r.GetElement (SearchCriteria.ByAutomationId ("moko"));

var label = new Label (automaElement, новый NullActionListener ());

column.Add (label.Text);}

В качестве предупреждения этот метод может не работать для получения всех строк, только видимых

...