WPF - как предотвратить дублирование AutomationId в DataTemplate - PullRequest
0 голосов
/ 29 октября 2018

Я использую 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 .

Это приводит к сбою тестов из-за нажатия на чтение из неправильного элемента управления.

Есть идеи?

1 Ответ

0 голосов
/ 29 октября 2018

Просто добавьте свои идентификаторы автоматизации в качестве свойств в 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>
...