При использовании Microsoft Test Manager (MTM ) для тестирования пользовательского интерфейса есть два варианта ручное и автоматизированное тестирование. Автоматизированное, от ручного, отличается тем, что выполнив ручной тест, мы можем записать последовательность действий и запускать эту последовательность действий для выполнения регрессионного теста, или для проверки воспроизводится ошибка или нет. При записи, особенно когда идет выбор элемента в списке у MTM возникает проблема с идентификацией. Например, когда мы записывали тест, у нас сотрудник Иванов был третьим в списке, а сейчас, он второй. О том, как облегчить жизнь тестировщикам и улучшить определение элементов я сегодня и расскажу.
Давайте сначала покажу проблему. Создаю тривиальное приложение, в котором будет список фамилий. Тест должен выбрать одну из них.
Для демонстрации я воспользуюсь приложением в котором главная форма имеет разметку:
К счастью, именно для идентификации DataTemplate есть специальный класс AutomationProperties. Все что нам нужно, это прописать присоединенное свойство Name. Причем, чтобы можно было кликать не только на TextBlock-е, а на любом месте элемента списка, придется добавлять это свойство к контейнеру элемента. В нашем случае это ListViewItem. Т.е. в ресурсы добавляем еще вот такой стиль:
Все выбралось, причем однозначно. В реальном проекте, конечно лучше не надеяться на одно поле (если это поле не первичный ключ типа GUID), в таких случаях можно биндиться к пане свойств, например так:
Давайте сначала покажу проблему. Создаю тривиальное приложение, в котором будет список фамилий. Тест должен выбрать одну из них.
Для демонстрации я воспользуюсь приложением в котором главная форма имеет разметку:
<Window x:Class="WpfApplication24.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" >
<Grid >
<Grid.Resources>
<DataTemplate x:Key="myTemplate">
<TextBlock Text="{Binding LastName}" />
</DataTemplate>
</Grid.Resources>
<ListView ItemsSource="{Binding}" ItemTemplate="{StaticResource myTemplate}" />
</Grid>
</Window>Код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
public class Person
{
public string LastName { get; set; }
public int Age { get; set; }
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
List<Person> persons = new List<Person>();
persons.Add(new Person() { LastName = "Иванов", Age = 20 });
persons.Add(new Person() { LastName = "Петров", Age = 22 });
persons.Add(new Person() { LastName = "Сидоров", Age = 25 });
this.DataContext = persons;
}
}
Запускаем тест из MTM, не забываем включить запись действий. Кликаем на второй элемент списка (1). И видим что он не может быть идентифицирован (2):К счастью, именно для идентификации DataTemplate есть специальный класс AutomationProperties. Все что нам нужно, это прописать присоединенное свойство Name. Причем, чтобы можно было кликать не только на TextBlock-е, а на любом месте элемента списка, придется добавлять это свойство к контейнеру элемента. В нашем случае это ListViewItem. Т.е. в ресурсы добавляем еще вот такой стиль:
<Style TargetType="ListViewItem">
<Setter Property="AutomationProperties.Name" Value="{Binding Path=LastName}"/>
</Style>Все, теперь при выборе элемента в списке мы увидим:
Все выбралось, причем однозначно. В реальном проекте, конечно лучше не надеяться на одно поле (если это поле не первичный ключ типа GUID), в таких случаях можно биндиться к пане свойств, например так:
<Style TargetType="ListViewItem">
<Setter Property="AutomationProperties.Name">
<Setter.Value>
<MultiBinding StringFormat="lvi_{0}-{1}">
<Binding Path="LastName" />
<Binding Path="Age" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>Все.
Комментариев нет:
Отправить комментарий