Я использую Microsoft UI Automation (т.е. AutomationElement
) для запуска автоматических приемочных тестов для моего приложения. Это прошло хорошо, но я попал в ситуацию, которая, похоже, не подвергается воздействию инфраструктуры автоматизации.
У меня есть ItemsControl
(хотя я мог бы использовать один из его производных элементов управления, например, ListBox
), и я использую CollectionViewSource
группировать предметы. Вот полное окно для демонстрации:
<Window x:Class="GroupAutomation.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Orchestra">
<Window.Resources>
<!-- Take some simple data -->
<XmlDataProvider x:Key="SampleData" XPath="Orchestra/Instrument">
<x:XData>
<Orchestra xmlns="">
<Instrument Name="Flute" Category="Woodwind" />
<Instrument Name="Trombone" Category="Brass" />
<Instrument Name="French horn" Category="Brass" />
</Orchestra>
</x:XData>
</XmlDataProvider>
<!-- Add grouping -->
<CollectionViewSource Source="{Binding Source={StaticResource SampleData}}" x:Key="GroupedView">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@Category" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<!-- Show it in an ItemsControl -->
<ItemsControl ItemsSource="{Binding Source={StaticResource GroupedView}}" HorizontalAlignment="Left" Margin="4">
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ItemsControl.GroupStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Padding="4" Margin="4" Background="#FFDEDEDE">
<StackPanel>
<Label Content="{Binding XPath=@Name}" />
<Button Content="Play" />
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
Это создает окно, содержащее элементы, сгруппированные по их категориям, и у каждого элемента есть кнопка, которую я хотел бы нажать с помощью автоматизации пользовательского интерфейса:
Скриншот окна со списком http://pics.brizzly.com/thumb_lg_2C45.jpg
Однако, если я смотрю в UISpy.exe (или перемещаюсь с помощью AutomationElement
), я вижу только группы (даже в режиме Raw):
UISpy http://pics.brizzly.com/thumb_lg_2C47.jpg
Как видите, группы есть, но в них нет элементов, поэтому искать кнопки некуда. Я пробовал это и в WPF 3.5 SP1, и в WPF 4.0 и получал одинаковый результат.
Можно ли использовать UI Automation для элементов, которые сгруппированы, и если да, то как?