четверг, 4 апреля 2013 г.

Краткое описание использования White для автоматизации тестирования Windows приложений

Как и обещала в предыдущем посте, расскажу самые основные моменты в использовании White для тестирования Windows приложений. Фактически, все рассказанное является кратким содержанием документации.

Работа с приложением и окном.

Запуск приложения и нахождение его окна

   Application application = Application.Launch("MyApp.exe");
   Window window = application.GetWindow("MyWindowTitle", InitializeOption.NoCache);

Нахождение модальных окон для главного окна:
Window childWindow = mainWindow.ModalWindow("СhildWindowTitle");

Закрытие окна

window.Close(); 

Закрытие приложения

application.Kill();


Поиск контролов

Все контролы наследуются от базового класса UIItem

1. Поиск контрола по идентификационному свойству

Button button = window.Get<Button>("save");
button.Click();


2. Поиск контрола на основе SearchCriteria
SearchCriteria представляет собой класс, который хранит комбинацию свойств, по которым будут искаться контролы.

SearchCriteria searchCriteria =     SearchCriteria.ByAutomationId("name").AndControlType(typeof(TextBox)).AndIndex(2);
TextBox textBox = (TextBox) window.Get(searchCriteria);
textBox.Text = "Anil";

Принцип поиска контролов - сначала ищутся контролы верхнего уровня, т.е. находящиеся непосредственно внутри окна. Дочерние контролы для найденных контролов ищутся уже внутри них, а не внутри окна.


Основные способы идентификации контролов

Все контролы наследуются от базового класса UIItem
Внутри окна любой UIItem может быть найден на основе следующих критериев:

1. AutomationID - свойство, проставляемое контролу приложения, однозначно идентифицируещее контрол.
для управляемых приложений (WPF WinForm )
SearchCriteria searchCriteria = SearchCriteria.ByAutomationId("btnOK");
Button button = window.Get<Button>("btnOK"); 
button = window.Get<Button>(searchCriteria); 

для неуправляемых приложений (SWT, Win32 )

Button button = window.Get<Button>("OK"); //механизм поиска по умолчанию - по UIAutomation имени
button = window.Get<Button>(SearchCriteria.ByText("OK")); // тоже самое, что и выше

2. Тип UIItem (например Button, ComoboBox)

Button button = window.Get<Button>("btnOK"); 
button = (Button) window.Get(SearchCriteria.ByAutomationId("btnOK").AndControlType(typeof(Button)));

3. Индекс. Используется в случае наличия нескольких одинаковых UIItem, например, с одинаковым свойством AutomationId.

button = window.Get<Button>(SearchCriteria.ByAutomationId("btnOK").AndIndex(1));

Работа с основными контролами.
Находится здесь, здесь.
Работа с клавиатурой и мышью - здесь.
Работа с Third Party Controls
White работает поверх фреймворка UIAutomation в .Net. Поэтому чтобы использовать его со сторонними контролами вашего приложения, нужно убедиться, что эти контролы поддерживаются UIAutomation. Для этого можно использовать UISpy или UIAutomationVerify
Когда контрол поддерживается, эта утилитка отобразит внутренние детали контрола в дереве контролов вашего приложения.

8 комментариев:

  1. Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!

    Это просто спасательный круг :)

    ОтветитьУдалить
  2. Ответы
    1. Но все-таки, если есть деньги на Visual Studio Ultimate или Visual Studio Premium, лучше использовать Coded UI Tests.

      Удалить
  3. Возможно задам глупый вопрос, я новичек в автоматизации тестирования Windows-приложений. Обычно работал с Web'ом. Обычно использовал FireBug и ему подобные для поиска идентификаторов элементов. Есть ли какой-либо аналог для Windows приложений?
    Или каким еще способом можно однозначно идентифицировать элемент интерфейса в данном случае?

    ОтветитьУдалить
    Ответы
    1. Аналог для Windows приложений - UISpy или UIAutomationVerify, как я писала выше, можно найти в нете и скачать.
      Для .Net приложений однозначно идентифицировать элемент интерфейса поможет свойство AutomationId.
      Например, для Wpf-приложения, в xaml окна для контрола свойству AutomationId соответствует "UId", устанавливается оно вот так:
      http://msdn.microsoft.com/ru-ru/library/bb613571.aspx

      Удалить
    2. Благодарю, будем учиться)

      Удалить
  4. Отличное описание. Спасибо!

    ОтветитьУдалить