Reputation: 400
I am using AutomationId and white for testing and I have encountered a problem recently that arrived from the automation team due to failure of some tests consistently.
I have some 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>
When creating the AutomationId's, the inner controls recieve AutomationId's, but that means that every instance of that DataTemplate that is being created, all AutomationId's will be duplicated.
This causes tests to fail due to clicking of reading from the wrong control.
Any idea?
Upvotes: 0
Views: 1384
Reputation: 1
If your data model has a unique id you can bind to it like so. (Let's assume Name is unique).
<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>
Upvotes: 0
Reputation: 19996
Just add your automation IDs as properties in SomeDataModel
and bind to them:
<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>
Upvotes: 0