我正在使用 Microsoft UI Automation(即
这将生成一个窗口,其中包含按类别分组的项目,每个项目都有一个按钮,我想使用UI自动化点击它:![带有列表窗口截图](https://istack.dev59.com/4UJ7W.webp)
(来源: brizzly.com) 然而,如果我在UISpy.exe中查看(或使用![UISpy](https://istack.dev59.com/lKb2k.webp)
(来源: brizzly.com) 正如您所看到的,这些组是存在的,但它们不包含任何项目,因此没有地方可以查找按钮。我已经在WPF 3.5 SP1和WPF 4.0中尝试过了,并得到了相同的结果。
是否有可能在分组的项目上使用UI自动化?如果可以,怎么做?
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>
这将生成一个窗口,其中包含按类别分组的项目,每个项目都有一个按钮,我想使用UI自动化点击它:
![带有列表窗口截图](https://istack.dev59.com/4UJ7W.webp)
(来源: brizzly.com) 然而,如果我在UISpy.exe中查看(或使用
AutomationElement
导航),我只看到了组(即使在原始视图中):
![UISpy](https://istack.dev59.com/lKb2k.webp)
(来源: brizzly.com) 正如您所看到的,这些组是存在的,但它们不包含任何项目,因此没有地方可以查找按钮。我已经在WPF 3.5 SP1和WPF 4.0中尝试过了,并得到了相同的结果。
是否有可能在分组的项目上使用UI自动化?如果可以,怎么做?