Wpf 在GridViewRowPresenter(ListView)中将自动ID分配给ContentPresenter
我正在尝试使用一个列表视图进行编码UI测试,该列表视图有一个复选框项目列表 由于编码的UI代码无法选择复选框单元格,我一直在尝试将AutomationId添加到控件中,以便编码的UI测试能够工作 我就快到了,在snoop中我可以看到UIItemCell没有设置AutomationId,但我不知道如何在我的应用程序中设置它 UIItemCell是我需要设置AutomationId的地方 我和史努普一起发现是内容演示者 ListView代码非常复杂,因此我将对其进行一些提取Wpf 在GridViewRowPresenter(ListView)中将自动ID分配给ContentPresenter,wpf,ui-automation,coded-ui-tests,Wpf,Ui Automation,Coded Ui Tests,我正在尝试使用一个列表视图进行编码UI测试,该列表视图有一个复选框项目列表 由于编码的UI代码无法选择复选框单元格,我一直在尝试将AutomationId添加到控件中,以便编码的UI测试能够工作 我就快到了,在snoop中我可以看到UIItemCell没有设置AutomationId,但我不知道如何在我的应用程序中设置它 UIItemCell是我需要设置AutomationId的地方 我和史努普一起发现是内容演示者 ListView代码非常复杂,因此我将对其进行一些提取 <ListVi
<ListView HorizontalAlignment="Left"
Height="194"
Margin="53,123,0,0"
VerticalAlignment="Top"
Width="424"
AutomationProperties.AutomationId="listviewoption">
<ListView.Resources>
<Style x:Key="ListViewItemContainerStyle1" TargetType="{x:Type ListViewItem}">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Description }" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
AutomationProperties.AutomationId="Bxaid1" >
<Grid AutomationProperties.AutomationId="Gxaid1">
<!-- This is used when GridView is put inside the ListView -->
<GridViewRowPresenter AutomationProperties.AutomationId="gvrp"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<!-- ... -->
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
<ListView.ItemContainerStyle>
<StaticResource ResourceKey="ListViewItemContainerStyle1"/>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView AutomationProperties.AutomationId="aid1">
<GridViewColumn AutomationProperties.AutomationId="xc0"
DisplayMemberBinding="{Binding OptionName, Converter={StaticResource CamelCaseConverter}, Mode=OneWay}"
Width="180"/>
<GridViewColumn AutomationProperties.AutomationId="xc1"
Width="60">
<GridViewRowPresenter AutomationProperties.AutomationId="pp" />
<GridViewColumn.CellTemplate>
<DataTemplate >
<CheckBox Name="x1"
AutomationProperties.AutomationId="xaid1"
IsHitTestVisible="False"
HorizontalAlignment="Right"
Tag="{Binding OptionName}"
IsChecked=""
Padding="0"
Margin="0"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
有一些自动ID没有帮助,但它们是很好的参考点;'gvrp'是GridViewRowPresenter[016],它保存了我想要设置id的内容演示器[017],而'xaid1'是内容演示器[017]内的复选框
请在我的头爆炸之前帮我一下。我终于可以用
<GridViewRowPresenter Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<GridViewRowPresenter.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="AutomationProperties.AutomationId"
Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Name }"/>
</Style>
</GridViewRowPresenter.Resources>
</GridViewRowPresenter>
然而,自动测试生成的代码(编码的UI)仍然引用了表列(尽管它是冗余的),这是我一开始试图避免的问题
无论如何,可以在ContentPresenter
中设置AutomationId
,以防它对未来的任何人都有帮助,这里就是