Posted on 23. June 2018

Знакомство с WinAppDriver UI Recorder

Новый инструмент WinAppDriver UI Recorder с открытым исходным кодом теперь доступен для Windows Application Driver (WinAppDriver) сообщества. Этот инструмент позволит пользователям легко автомизировать UI тесты.

WinAppDriver - это инструмент для запуска автоматизированных тестов пользовательского интерфейса для любых Windows 10 приложений. Недавно был выпущен предварительный просмотр версии 1.1, с которым Вы можете ознакомиться подробнее здесь.

Что такое UI Recorder

Inspect был наиболее распространенным инструментом в сообществе WinAppDriver, который позволял пользователям выбирать UI элементы и просматривать данные их атрибутов. Не смотря на то, что Inspect выполняет свою целевую задачу по просмотру данных доступности, он все же отстает, когда речь заходит о поддержке сценариев, предназначенных специально для автоматизации пользовательского интерфейса, таких как возможность генерации XPath запросов.

В таких ситуациях инструмент WinAppDriver UI Recorder надеется заполнить имеющиеся пробелы Inspect и послужить его полезной альтернативой.

В первоначальном выпуске, инструмент UI Recorder позволит использовать два ключевых сценария:

1) Проверка UI элементов и извлечение их XPath-выражений

2) Генерация C# кода для определенных действий (щелчок мышью) при активном «Record»

  • Сгенерированный код можно вставить в папку UI Recorder Template для запуска WinAppDriver

Microsoft надеется, что с помощью этого инструмента Вы получите более простой и интуитивно понятный подход при написании сценариев автоматизации для WinAppDriver.

Как начать работу

Открытый исходный код UI Recorder доступен на странице WinAppDriver на GitHub. Для начала сборки и компиляции рекомендуется использовать Visual Studio 2017. После компиляции Вы можете сразу начать начать работу с UI Recorder.

В дополнение к общедоступному коду, Вы также можете скачать zip-архив в разделе GitHub Releases.

Использование UI Recorder

Инструмент UI Recorder предназначен для интуитивного и упрощенного пользовательского интерфейса, который разделен на две панели, как показано ниже:

UI Recorder отслеживает взаимодействие клавиатуры и мыши с интерфейсом приложения - UI действие. Когда запись активна, верхняя и нижняя панели динамически обновляются с различной информацией UI элементов каждый раз, когда происходит новое UI действие. На верхней панели отображается сгенерированный XPath запрос выбранного UI элемента, а нижняя панель отображает необработанную XML-информацию для одного и того же элемента. Вы можете перейти на C# Code вкладку на нижней панели, чтобы просмотреть сгенерированный C# код записанного действия, который можно использовать в WinAppDriver тесте.

Следующая анимация показывает пример такого процесса:

Записанный код можно копировать в буфер обмена и затем вставлять в проект WinAppDriver UI Recorder шаблона.

Обратная связь

Поскольку UI Recorder является общедоступным инструментом, Microsoft рекомендует всем публиковать любые PR с изменениями или улучшениями и размещать любые предложения по усовершенствованию UI Recorder.

Для обратной связи используйте GitHub Issues Board по вопросам UI Recorder - Microsoft будут рады получить любые предложения, запросы по добавлению новых функций или отчеты об ошибках!

Будьте в курсе событий

Чтобы быть в курсе всех новостей WinAppDriver, следите за страницей @mrhassanuz.

Подвение итогов

Новый инструмент WinAppDriver, инструмент UI Recorder, стал доступным. Для пользователей это удобный способ автоматизации пользовательского интерфейса с помощью WinAppDriver, который может не только генерировать XPath выражения, но также и C# код, записывая UI действия, сделанные с помощью щелчков мыши.



Posted on 19. May 2018

Автоматизация тестирования UI с WinAppDriver - с поддержкой Стилуса

Автоматизация тестирования пользовательского интерфейса с помощью WinAppDriver - теперь с поддержкой Стилуса

 

Windows Application Driver (WinAppDriver) продолжает развиваться в области автоматизации тестирования пользовательского интерфейса для Windows 10, и Microsoft рады объявить о следующем выпуске WinAppDriver — версии 1.1!

На сегодняший день уже доступен предварительный просмотр, который включает в себя поддержку автоматизации Стилуса. Полный выпуск (версия 1.1) находится в процессе разработки и будет включать мульти-сенсорную поддержку в дополнение к Стилусу.

Что такое WinAppDriver?

Для тех, кто не знаком с автоматизацией WinAppDriver или пользовательским интерфейсом: WinAppDriver - это сервис, основанный на открытых стандартах, для автоматизации тестирования пользовательского интерфейса, предназначен для работы со всеми Windows 10 приложениями, включая WPF, WinForms, Win32 и UWP. Пользуясь открытым стандартом, пользователи WinAppDriver смогут использовать надежную систему автоматизации пользовательского интерфейса, уже предоставленную Appium и Selenium.

Что нового в предварительном просмотре версии 1.1

В версии 1.1 Microsoft равняется на W3C WebDriver стандарт и, в результате, внедряет опцию Actions API для расширенной поддержки устройств ввода.

Предварительный просмотр версии 1.1 включает:

  1. Обновленный WinAppDriver включает улучшения Стилуса, а также расширенные функции ввода:
  • Давление
  • Наклон X и Наклон Y
  • Изгиб
  • Кнопка Barrel
  • Ластик

  1. Appium-Dotnet-Driver NuGet Package
  • Это предварительный просмотр Nuget пакета с обновленными привязками для автоматизации Стилуса в WinAppDriver.
  1. Образцы и документация на GitHub
Обратите внимание, что полная версия также будет включать мульти-сенсорную поддержку - подробнее об этом ниже.

Начало работы с Стилусом

Вы можете скачать предварительную версию WinAppDriver на GitHub странице: https://github.com/Microsoft/WinAppDriver/releases.

Прежде чем начать использовать Стилус, Microsoft настоятельно рекомендует изучить новый образец Sticky Notes здесь.

Быстрое и простое рисование смайлика 🙂

Чтобы продемонстрировать что-то более сложное, чем просто несколько штрихов на стикере, Microsoft нарисовали смайлик с помощью следующих шагов:

Шаг 1 - Использование Стилуса для рисования круга

 

//Initiate a Pen object using the custom Dotnet Driver Bindings. 
PointerInputDevice penDevice = new PointerInputDevice(PointerKind.Pen);
ActionSequence drawSequence = new ActionSequence(penDevice, 0);
 
//Set starting position of circle by its center point.
var centerX = canvasCoordinate.X + canvasSize.Width / 5 + 285;
var centerY = canvasCoordinate.Y + canvasSize.Height / 5 + 270;
//Radius of circle. 
var radius = 200;
/* This value will dictate the granularity of the number of stokes to complete the strokes. The more steps, the less blocky the circle will be. Note: Sticky Notes will interpolate between the steps anyway, so it will not appear blocky if Pen is not lifted. */
var steps = 50;
// These two variables will calculate either the X or Y coordinate around the center of the circle for a given step. 
int xValue = (int)(centerX + radius * Math.Cos(2 * Math.PI * 0 / steps));
int yValue = (int)(centerY + radius * Math.Sin(2 * Math.PI * 0 / steps));
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, xValue, yValue, TimeSpan.Zero));
drawSequence.AddAction(penDevice.CreatePointerUp(PointerButton.PenFrontTip));
/* Function to draw circle by calculating coordinates around center point and brushing through them. */
for (var i = 0; i <= steps; i++) { 
xValue = (int)(centerX + radius * Math.Cos(2 * Math.PI * i / steps));
yValue = (int)(centerY + radius * Math.Sin(2 * Math.PI * i / steps));                       drawSequence.AddAction(penDevice.CreatePointerDown(PointerButton.PenContact));
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, xValue, yValue, TimeSpan.Zero));
}
//Lifting pen up once Circle is drawn. drawSequence.AddAction(penDevice.CreatePointerUp(PointerButton.PenContact));
//Final step would be to execute the sequence.
newStickyNoteSession.PerformActions(new List { drawSequence });

 

Шаг 2 - Добавление смайлика

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

 

/* Loop modified to iterate past opening step and closing step of circle. This will create an opening for the smiley ìmouthî. */
for (var i = 0; i < steps; i++) { 
xValue = (int)(centerX + radius * Math.Cos(2 * Math.PI * i / steps));
yValue = (int)(centerY + radius * Math.Sin(2 * Math.PI * i / steps)); 
if (i > 1){            
drawSequence.AddAction(penDevice.CreatePointerDown(PointerButton.PenContact));
 
}                   drawSequence.AddAction(penDevice.CreatePointerDown(PointerButton.PenContact));
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, xValue, yValue, TimeSpan.Zero));
}
drawSequence.AddAction(penDevice.CreatePointerUp(PointerButton.PenContact));
/* The following vars will calculate X & Y coordinates for start and end point of the smile. */
var xSmile = (int)(centerX + radius * Math.Cos(2 * Math.PI * 1 / steps));
var ySmile = (int)(centerY + radius * Math.Sin(2 * Math.PI * 1 / steps));
var xSmile2 = (int)(centerX + radius * Math.Cos(2 * Math.PI * (steps - 1) / steps));
var ySmile2 = (int)(centerY + radius * Math.Sin(2 * Math.PI * (steps - 1) / steps));
 
/* Continue previous sequence and execute the Pen actions. */
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, xSmile, ySmile, TimeSpan.Zero));
drawSequence.AddAction(penDevice.CreatePointerDown(PointerButton.PenContact));
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, centerX, centerY, TimeSpan.FromMilliseconds(400), new PenInfo { Pressure = .600f }));
drawSequence.AddAction(penDevice.CreatePointerUp(PointerButton.PenContact));
drawSequence.AddAction(penDevice.CreatePointerDown(PointerButton.PenContact));
drawSequence.AddAction(penDevice.CreatePointerMove(CoordinateOrigin.Viewport, xSmile2, ySmile2, TimeSpan.FromMilliseconds(400)));
 
// Execute sequence.
newStickyNoteSession.PerformActions(new List { drawSequence });

 

Применение дополнительного давления к «штрихам улыбки» для добавления глубины. Эскиз будет выглядеть следующим образом:

 

Шаг 3 - Глаза

Если бы Вы хотели закончить и добавить глаза, это выглядело бы примерно так:

Есть много интересных способов, с помощью которых Вы можете добавить глаза, и Вы можете выбрать, какой из них лучше для Вас. Полный код дизайна будет включен как часть образца Sticky Notes на GitHub!

Подробнее о полной версии 1.1

Полная версия 1.1 будет включать такие дополнения:

WinAppDriver

 

  1. Поддержка Стилуса будет перенесена в полную версию 1.1 из Предварительного просмотра.
  2. Мульти-сенсорная поддержка будет также добавлена в Actions API. Поддерживаются следующие модификаторы касания:

 

 

  • Давление
  • Изгиб

 

 

Новые образцы и привязки

Образцы из предварительного просмотра будут дополнительно расширены, чтобы продемонстрировать функциональность Стилуса и Мульти-сенсорной поддержки. Образцы будут включать в себя приватное устройство подачи Apium-Dotnet-Driver Nuget, который будет делать возможной реализацию Action через новые привязки. Microsoft с нетерпением ждет, когда эти изменения будут объединены в официальный Appium .Net Driver, и затем будет свернут в Selenium Namespace в будущем.

Дата выпуска

Дата выпуска полной версии 1.1 запланированна на июнь - следите за обновлениями и ознакомтесь с дополнительной информацией на странице GitHub!

Что будет дальше

Команда WinAppDriver продолжает работу над добавлением новых функций, устранением ошибок и повышением производительности. Они также изучили популярные запросы сообщества и уже работают над Вашими интересными идеями, которые будут добавлены в версии 1.2 и последующих. Одна из этих идей — повышение производительности при XPath обработке.

В будущем также будет выпущен новый инструмент для сообщества - более подробная информация об этом будет опубликована в ближайшие время. Следите за новостями!

Как отправить отзыв?

Пожалуйста, оставьте Ваш отзыв на странице Github - Microsoft с нетерпением ждет Ваших предложений, запросов по добавлению новых функций или отчетов об ошибках!


Если у Вас есть классные эскизы, сделанные в версии 1.1, которыми Вы хотели бы поделиться, оставьте их на странице GitHub! Возможно именно Ваш эскиз будет показан в следующих блог постах!

Будьте в курсе событий

Чтобы оставаться в курсе всех новостей WinAppDriver, следите за публикациями @mrhassanuz.

В заключение

Сегодня уже доступен Предварительный просмотр версии 1.1, позволяющий пользователям автоматизировать сценарии Стилуса. Полный выпуск версии 1.1 будет также включать мульти-сенсорную поддержку. Перейдите на страницу выпусков на GitHub, чтобы загрузить предварительный просмотр, и попробуйте работу с автоматизированным Стилусом, просмотрев обновленные образцы.