Статьи

Тестирование закодированного пользовательского интерфейса: утилиты Windows Phone


В последние недели я много играл с API Coded UI Tests для приложений WPF.

Оказалось, что это действительно мощный фреймворк, доступный для использования, но нам нужно самим написать много кода даже для простых вещей.

Вы уже знаете , кодированная пользовательский интерфейс тестирование утилита Гаутамы Гоенки доступна на своем блоге .

В этой записи блога я хочу представить набор дополнительных вспомогательных методов, которые вы можете использовать в своем проекте. Ссылки на двоичные файлы / источники находятся в конце поста.

Вот список доступных функций:

  1. Тесты пустоты списка, дерева и меню как методы расширения пользователя.
  2. Помощник, чтобы получить все AutomationIds коллекции элементов управления.
  3. Помощник, чтобы получить контроль над всеми детьми определенного типа.
  4. Легче установить синтаксис текста с помощью резервного метода: youpi!
  5. Более простой набор значений синтаксиса.
  6. Проще развернуть и свернуть синтаксис.
  7. Более простой выбор синтаксиса.
  8. Проще вызвать синтаксис.

Особенности, пример кода и комментарии

Тесты пустоты списка, дерева и меню как методы расширения пользователя

Всегда полезно знать, пуст ли список или нет. Теперь вы можете использовать эти простые методы.

// 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