J'utilise Microsoft UI Automation (à savoir AutomationElement
) pour exécuter des tests d'acceptation automatisés contre ma demande. Cela s'est bien passé, mais j'ai rencontré une situation qui ne semble pas exposée au cadre d'automatisation.Comment utiliser UI Automation sur un objet WPF ItemsControl qui regroupe des éléments?
J'ai un ItemsControl
(bien que je puisse utiliser l'un de ses contrôles dérivés, par exemple ListBox
) et j'utilise CollectionViewSource
pour regrouper des éléments. Voici une fenêtre complète pour démontrer:
<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 [email protected]}" />
<Button Content="Play" />
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
Ce produit une fenêtre contenant les éléments regroupés dans leurs catégories, et chaque élément a un bouton que je voudrais cliquer avec UI Automation:
Screenshot of window with a list http://pics.brizzly.com/thumb_lg_2C45.jpg
Cependant, si je regarde dans UISpy.exe (ou naviguer avec le AutomationElement
) Je ne vois les groupes (même dans la vue Raw):
UISpy http://pics.brizzly.com/thumb_lg_2C47.jpg
Comme vous pouvez le voir, les groupes sont là, mais ils ne contiennent pas d'éléments, donc il n'y a nulle part où chercher les boutons. J'ai essayé ceci dans WPF 3.5 SP1 et WPF 4.0 et obtiens le même résultat.
Est-il possible d'utiliser UI Automation sur les éléments qui sont regroupés, et si oui, comment?
Utilisez directement les éléments de contrôle des articles comme indiqué ici. [link] (http://abusanad.net/2016/12/19/wpf-itemscontrol-with-teststack-white/) – user1912383