В последние недели я много играл с API Coded UI Tests для приложений WPF.
Оказалось, что это действительно мощный фреймворк, доступный для использования, но нам нужно самим написать много кода даже для простых вещей.
Вы уже знаете , кодированная пользовательский интерфейс тестирование утилита Гаутамы Гоенки доступна на своем блоге .
В этой записи блога я хочу представить набор дополнительных вспомогательных методов, которые вы можете использовать в своем проекте. Ссылки на двоичные файлы / источники находятся в конце поста.
Вот список доступных функций:
- Тесты пустоты списка, дерева и меню как методы расширения пользователя.
- Помощник, чтобы получить все AutomationIds коллекции элементов управления.
- Помощник, чтобы получить контроль над всеми детьми определенного типа.
- Легче установить синтаксис текста с помощью резервного метода: youpi!
- Более простой набор значений синтаксиса.
- Проще развернуть и свернуть синтаксис.
- Более простой выбор синтаксиса.
- Проще вызвать синтаксис.
Особенности, пример кода и комментарии
Тесты пустоты списка, дерева и меню как методы расширения пользователя
Всегда полезно знать, пуст ли список или нет. Теперь вы можете использовать эти простые методы.
// WpfTree treeView = ... ; //Tell me if you are empty my dear bool isEmpty = treeView.IsEmpty(); Assert.IsTrue(isEmpty);
Помощник, чтобы получить все AutomationIds элемента управления детей
Иногда вы храните информацию через AutomationIds. Этот метод поможет вам извлечь их простым способом.
// WpfControl control= ... ; //Rertrieve the ids List<string> idsOfChildren = control.GetChildrenAutomationIds();
Помощник, чтобы получить контроль над всеми детьми определенного типа
Это рекурсивный метод, который может помочь вам в нескольких сценариях. Обязательно обратите внимание, что есть переопределение, которое принимает логическое значение в качестве параметра. Если установлено значение false, метод вернет ВСЕ дочерние элементы, а не только прямой.
Также убедитесь, что вы не сможете вызывать метод Find для этих элементов управления, так как они не имеют определенных свойств поиска.
// WpfControl control= ... ; //Get only the direct children List<WpfEdit> children= control.GetChildren<WpfEdit>(); foreach(WpfEdit edit in children) SomethingCool(); //Get all the children in the tree below the control List<WpfEdit> children= control.GetChildren<WpfEdit>(onlyDirectChildren: false); foreach(WpfEdit edit in children) SomethingCoolToo();
Легче установить синтаксис текста с помощью резервного метода: youpi!
Я обнаружил, пытаясь установить текст TextBox, чтобы вы могли в конечном итоге ждать вечность, когда текст действительно установлен.
Я попытался создать вспомогательный метод, который может быть быстрее с использованием шаблона автоматизации. Затем я пытаюсь использовать шаблон значений, но, как ни странно, он не был доступен на узле автоматизации TextBox.
В конце я нашел в комментариях к примеру кода MSDN, что «элементы, которые поддерживают TextPattern, не поддерживают ValuePattern, а TextPattern не поддерживает установку текста многострочного редактирования или элементов управления документами». Поэтому, если элемент управления реализует TextPattern, вы должны использовать запасной метод, который фактически имитирует ввод с клавиатуры.
Вспомогательный метод просто делает это:
//WpfControl control = ...; //Set the text bool isTextSet= control.TrySetText("I love Coded UI tests"); Assert.IsTrue(isTextSet);
Упрощенный синтаксис значения
Проверка того, реализует ли элемент управления шаблон, а затем попытка вызвать его, представляет собой большую строку кода.
С этим помощником у вас есть только один вызов метода из одной строки.
//WpfControl control = ...; //Set the value bool isValueSet= control.TrySetValue("I want to set this value."); Assert.IsTrue(isValueSet);
Проще развернуть и свернуть синтаксис
То же, что и предыдущий, одна строка, чтобы свернуть / развернуть элемент управления. Если элемент управления не реализует шаблон, метод просто возвращает false.
//WpfControl control = ...; //Expanding bool isExanpded = control.TryExpand(); Assert.IsTrue(isExanpded); //Collapsing bool isCollapsed = control.TryCollapse(); Assert.IsTrue(isCollapsed);
Более простой синтаксис выбора
Выберите элемент управления в одной строке кода!
//WpfControl control = ...; //Select the control bool isSelected = control.TrySelect(); Assert.IsTrue(isSelected);
Более простой синтаксис Invoke
Вместо имитации щелчка мышью, теперь вы можете использовать этот метод, который будет использовать шаблон вызова, даже если элемент управления скрыт.
//WpfControl control = ...; //Invoke bool isInvoked = control.TryInvoke(); Assert.IsTrue(isInvoked);
Были ли двоичные файлы?
Двоичные файлы и хорошо прокомментированный код soure можно найти по этому адресу: https://www.dropbox.com/s/gmpybsviirm3bqd#view:list