Продолжу рассказывать про работу с разными
контролами в CodedUITest. Теперь настала очередь ComboBox. Для работы с этим
контролом в CodedUITest служит класс WpfComboBox.
Будем работать со
следующим небольшим приложением, содержащим два контрола ComboBox:
Первый служит для выбора студента, второй –
для выбора предмета. Рассмотрим работу с каждым из них.
Если посмотреть через UISpy структуру второго контрола ComboBox для выбора предмета, мы увидим следующее:
В качестве имени
элемента списка (ListBoxItem) ComboBox’а выводится сам текст элемента. Тут с точки зрения автоматизации
не возникает никаких проблем, стандартных методов класса WpfComboBox для
работы с ComboBox достаточно.
При просмотре структуры второго ComboBox’а через UISpy получается следующая картина
Тут все не так просто. Здесь мы видим, что у
элементов списка ComboBox в свойстве Name выводится не само значение элемента
списка, которое мы видим в запущенном приложении, а полное имя класса, к списку объектов которого осуществляется привязка
в коде xaml приложения – “Lena.Student”. Углубимся немножко в
структуру тестируемого приложения. В xaml реализация ComboBox выглядит так:
<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Students}" ItemContainerStyle="{StaticResource StudentStyle}">
Класс viemodel выглядит так:
public class MainVM
{
public ObservableCollection<Student> Students { get { return students; } }
private readonly ObservableCollection<Student> students =
new ObservableCollection<Student>();
public MainVM()
{
this.Students.Add(new Student() { Age = 20, FirstName = "Василий", LastName = "Пупкин", SecondName = "Васильевич", GroupName = "ИС-54" });
this.Students.Add(new Student() { Age = 21, FirstName = "Олег", LastName = "Куркин", SecondName = "Олегович", GroupName = "АИ-32" });
this.Students.Add(new Student() { Age = 23, FirstName = "Борис", LastName = "Дубин", SecondName = "Борисович", GroupName = "ИС-89" });
this.Students.Add(new Student() { Age = 22, FirstName = "Юлия", LastName = "Коновалкина", SecondName = "Александровна", GroupName = "ТМ-12" });
this.Students.Add(new Student() { Age = 20, FirstName = "Софья", LastName = "Порейко", SecondName = "Порейко", GroupName = "ТМ-16" });
}
}
Класс студента выглядит так:
public class Student
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public int Age { get; set; }
public string GroupName { get; set; }
}
Поскольку при работе с элементами ComboBox используется именно значение свойства Name контрола ListBoxItem, стандартные методы класса WpfComboBox для работы с ComboBox в данном случае отрабатывать не будут. Например,
Console.WriteLine(comboBox.SelectedItem);
выведет нам на экран значение «Lena.Student».
Что тут можно сделать?
Тут на помощь могут прийти разработчики.
Простое переопределение метода ToString() класса, к которому привязывается ComboBox (в нашем случае класс Student), поможет решить проблему:
public class Student
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public int Age { get; set; }
public string GroupName { get; set; }
public override string ToString()
{
return LastName + " " + FirstName + " " + SecondName + " " + Age + " " + GroupName;
}
}
Теперь структура ComboBox при просмотре через UISpy выглядит так:
И для работы с ComboBox можно использовать стандартные методы
класса WpfComboBox из
фреймворка CodedUITest. Например, та же самая строчка вывода значения выбранного элемента в Combobox'е:
Console.WriteLine(comboBox.SelectedItem);
выведет нам на экран значение «Пупкин Василий Васильевич 20 ИС-54».
Комментариев нет:
Отправить комментарий