-
Notifications
You must be signed in to change notification settings - Fork 63
Improve app testability (RU)
Подготовить приложение - это значит сделать его более тестируемым.
Игнорирование подготовки резко увеличивает трудозатраты на работу с элементами приложения (в первую очередь поиск) и сильно понижает стабильность будущих тестов.
Идентифицировать элемент можно по различным свойствам (имя, текст внутри элемента и т.п.), но хорошей практикой является ситуация, когда большинство значимых для тестирования элементов имеют уникальные идентификаторы.
Уникальность идентификатора не обязательна внутри всего приложения, так как есть элементы-контейнеры (окна, вкладки, панели) и тогда уникальность должна соблюдаться внутри контейнера.
Проставить идентификаторы можно разными способами, например:
-
через свойство элемента в XAML-е
<TextBox Uid="KeyTextBox"/> <TextBox AutomationProperties.AutomationId="ValueTextBox"/>
-
через стили
<Style <...> > <Setter Property="Uid" Value="{Binding Title}"/> </Style>
-
в WinForms приложениях уникальный идентификатор это свойство Name
Если элемент не стандартный, то вполне возможно, что его реализация не поддерживает технологию UI Automation. В таком случае выставление свойства AutomationId не делает ничего. Тогда элемент придется немного доработать. Пример минимальной доработки для элемента Xceed.Wpf.Toolkit.DateTimePicker:
public class DateTimePickerExt : DateTimePicker
{
// Перегружаем получение базового класса автоматизации элемента
protected override AutomationPeer OnCreateAutomationPeer()
{
return new MyAutomationPeer(this);
}
// Модификация базового класса автоматизации
private class MyAutomationPeer : UIElementAutomationPeer
{
public MyAutomationPeer(UIElement owner)
: base(owner)
{
}
// Перегрузка этого метода позволяет идентифицировать
// элемент в приложении
protected override string GetAutomationIdCore()
{
return this.Owner.Uid;
}
}
}