我正在使用AutomationId和white进行测试,由于某些测试始终失败,我最近遇到了一个自动化团队提出的问题。
我有一些DataTemplate:
<DataTemplate DataType="{x:Type local:SomeDataModel}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding NameTitle}" AutomationProperties.AutomationId="NameTitleId"/>
<TextBlock Text="{Binding Name}" AutomationProperties.AutomationId="NameId"/>
<Button Content="Apply" Command="{Binding ApplyCommand}" AutomationProperties.AutomationId="ApplyCommandId"/>
</StackPanel>
</DataTemplate>
在创建AutomationId时,内部控件会收到AutomationId,但这意味着所创建的DataTemplate的每个实例,所有AutomationId都将被复制。
这会导致由于单击错误控件中的读数而导致测试失败。
有什么主意吗?
答案 0 :(得分:0)
只需将您的自动化ID作为属性添加到SomeDataModel
中并绑定到它们:
<DataTemplate DataType="{x:Type local:SomeDataModel}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding NameTitle}"
AutomationProperties.AutomationId="{Binding NameTitleId}"/>
<TextBlock Text="{Binding Name}"
AutomationProperties.AutomationId="{Binding NameId}"/>
<Button Content="Apply" Command="{Binding ApplyCommand}"
AutomationProperties.AutomationId="{Binding ApplyCommandId}"/>
</StackPanel>
</DataTemplate>
答案 1 :(得分:0)
如果你的数据模型有一个唯一的 id,你可以像这样绑定到它。 (假设 Name 是唯一的)。
<DataTemplate DataType="{x:Type local:SomeDataModel}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding NameTitle}"
AutomationProperties.AutomationId="{Binding Name,StringFormat='NameTitleTextBlockFor_{0}'}"/>
<TextBlock Text="{Binding Name}"
AutomationProperties.AutomationId="{Binding Name,StringFormat='NameTextBlockFor_{0}'}"/>
<Button Content="Apply" Command="{Binding ApplyCommand}"
AutomationProperties.AutomationId="{Binding Name,StringFormat='ApplyButtonFor_{0}'}"/>
</StackPanel>
</DataTemplate>