Мне нужно создать тест уровня системы автоматизации для управления. Элемент управления установлен по стилю и имеет ListView
с отдельным шаблоном ListViewItem
. И моя цель - получить текст из заголовка внутри этого ListViewItem
. Вот что у меня есть в XAML (упрощенный код)
<Style>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Grid>
<ScrollViewer x:Name="ScrollViewer">
<ScrollViewer.TopHeader>
<StackPanel>
<ListView ItemsSource="{TemplateBinding SomeSource}"
ItemTemplate="{StaticResource MyTemplate}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
</ScrollViewer.TopHeader>
</ScrollViewer>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
И шаблон для ListViewItem
выглядит примерно так:
<DataTemplate>
<Grid>
<Grid>
<TextBlock x:Name="TextName"
AutomationProperties.AutomationId="{Binding SomeId}"
Text="{x:Bind SomeText}"/>
</Grid>
</Grid>
</DataTemplate>
Конечно, ListViewItems
генерируется автоматически во время выполнения. Они привязаны к соответствующему свойству и получили нужный шаблон.
Но в тесте я никак не могу достичь своего TextBlock
(ById
, FindElementById
и т. Д.). Я могу найти элементы, сначала найдя ListView
по классу (FindElementByClassName
), затем ListViewItems
по классу, затем TextBlock
по классу, но я думаю, что это не правильный путь. Потому что в будущем структура управления может быть изменена, и будет труднее поддерживать тесты.
Элемент управления имеет также AutomationPeer
в качестве гридов.
Так что у вас есть идеи, почему я могу ' мои простые TextBlock
или даже ListViewItem
с их AutomationId
?