Это первый в серии блогов, говорящих о тесте автоматизации Windows. Другие связанные блоги:
02: Отправить почту с почтой клиент Qt Automation 01: Jump Start с первой выборки Qt Automation 02: контроль шпионажа
В этой статье мы будем использовать приложение Windows 10 Calculator, чтобы показать, как автоматизировать тестовое нативное приложение Windows. Node.js используется в качестве языка программирования, а также Cucumber.js используется в качестве структуры автоматизации тестирования. После прохождения с нами в этой статье у вас будет некоторая идея о том, как разработать автоматизацию Windows с навыком JavaScript, а также как написать тест на автоматизацию поведения.
Содержание
- Подготовка
- Сценарий дизайна
- Создать объект модели
- Редактировать сценарию автоматизации
- Сделать его данные
- Отчет о тестировании
Подготовка
Знание
- Предпочтительно иметь некоторые знания на Cucumber.js и BDD. Чтобы узнать CuCumber.js и как создать сценарий, прочитайте серию блога BDD Web Automation
- Узнайте Node.js и JavaScript язык, включая новый язык JavaScript
Async/await
Я уверен, что вы знаете, где найти эти материалы с поисковой системой, поэтому не будет предоставлять ссылки здесь.
Инструменты
Node.js Node.js используется при установке пакетов NPM. Мы не будем использовать какие-либо дополнительные пакеты для этой статьи, но вы можете использовать некоторые внешние пакеты, когда вы пишете свой собственный сценарий.
Cuketest : Окружающая среда развития для Cucumber.js Отказ CuCumber.js – это популярное поведение (BDD) автоматизации автоматизации. Cuketest можно скачать из http://cuketest.com/download Отказ У него также есть магазин Windows и Mac версия.
Cuketest имеет полную способность автоматизировать приложения Windows, он поддерживает различные типы приложений, включая нативные приложения Windows, WPF, WinForm, QT, Delphi, devexpress и т. Д.
Сценарий дизайна
Откройте Cuketest, создайте новый проект, с шаблоном Windows:
Этот шаблон используется для создания сценариев автоматизации для приложений Windows.
Затем вы можете редактировать сценарий в файле функции следующим образом:
Ниже приведен текстовая версия:
Feature: Windows Calculator Test Windows Calculator automation test Scenario: Simple Addition Given click on the number 1 And click the "plus" sign When click on the number 2 And click [equals] button Then the result should be 3
Создать объект модели
В созданном вами проекте нажмите файл «Model1.tmodel» в дереве проекта, чтобы открыть модель Model, который является компонентом Cuketest. Файл модели объекта определяет тестовые объекты, которые отображают элементы управления на тесте управления, и файл имеет расширение “.tmodel”. При прогонах тестирования автоматизации скрипт использует свойства, определенные в файле модели, чтобы найти элементы управления.
Теперь мы используем Model Manager для Spy Controls на калькуляторе. Нажмите кнопку «Добавить объект», Model Manager спрятается, поэтому вы можете выбрать элемент управления с экрана. Затем вы выбираете элемент управления и добавляете его в модель, нажав кнопку «+» на «Добавить окно объектов».
Чтобы сделать это быстрее, вы можете нажать кнопку «Пакетные элементы управления Batch Add Plact» на панели инструментов, а также выберите один из номеров кнопок из приложения калькулятора. Затем он будет перечислять все цифровые кнопки на том же уровне:
Затем вы можете добавить их в модель. Сделайте это аналогично для кнопок подписания (+, -, *,/, =), а также элемент управления результатом.
В модели Model, когда вы выбираете объект в дереве модели, соответствующий контроль на калькуляторе будет выделен, что говорит вам, что элемент управления идентифицируется с свойствами объекта в модели:
Если вы принимаете рекомендацию свойств по умолчанию при добавлении объектов, Имя
Свойство является одним из «идентификационных свойств», а значение «Отображается 0». Однако в калькуляторе значение Имя
Свойство изменяется при вводе цифр в калькулятор. Как показано ниже:
Кроме того, Имя
Значение изменится на какой-то локализованный текст, если вы измените локаль Windows на не английский язык.
Чтобы гарантировать, что объектная модель создала работу на Windows с различными языками настроек, вы можете удалить Имя
Недвижимость от этого объекта и просто используйте Автоматизация
имущество. Это должно быть достаточным идентификатором этого контроля. Также измените имя «Дисплей как 0» до чего-то более актуального:
«AutomationID» – это свойство, предназначенное специально для автоматизации тестирования, поэтому использовать его, когда это возможно.
Обратите внимание, что при удалении этого Имя
Свойство, он переносится из «Определение свойств» на «Другие свойства». В некоторых случаях вы хотите добавить их в виде «идентификации свойств», вы можете сделать это, нажав эту проблему и выбрав кнопку «+» на панели инструментов сетки свойств.
Сохраните измененный файл модели.
Редактировать сценарию автоматизации
Создайте новый файл поддержки/Cooks.js и установите значение Timeout Timeout, если определение шага работает дольше, чем это значение Timeout, он остановит выполнение этого шага, отметьте его как не удалось, и перейдите к следующему шагу.
let { setDefaultTimeout } = require('cucumber') //set timeout to be 10 seconds setDefaultTimeout(10 * 1000);
Вы можете изменить значение тайм-аута к некоторому значению, которое вы считаете подходящим для вашего приложения. Значение по умолчанию 5 секунд должно быть достаточно длинным для больших случаев, это предусматривается на всякий случай, если некоторое приложение будет возвращаться дольше, чем значение по умолчанию.
Откройте определение1.js в редакторе, поместите его рядом с панелью функции, щелкните кнопку рядом с каждым шагом, она автоматически генерирует заглушку кода для функции шага, как следующее:
const { Given, When, Then, After } = require('cucumber'); const { TestModel } = require('leanpro.win'); const { Util } = require('leanpro.common'); let model = TestModel.loadModel(__dirname + "/model1.tmodel"); //// Your step definitions ///// Given(/^click on the number (\d+)$/, async function (digit) { return 'pending'; }); Given(/^click the "([^"]*)" sign$/, async function (sign) { return 'pending'; }); Then(/^the result should be (\d+)$/, async function (result) { return 'pending'; }); When(/^click \[equals\] button$/, async function () { return 'pending'; });
Для получения дополнительной информации о том, как создать код из файла функций, см. Генерировать сценарий огурца с правым инструментом.
Теперь вы можете реализовать код автоматизации для этих шаговых задач функции функции. Вы можете скопировать код метода из модельного менеджера или перетаскивания его в редактор:
После добавления всей реализации ваш код определения1.js должен выглядеть следующее:
const { Given, When, Then, After } = require('cucumber'); const { TestModel } = require('leanpro.win'); const { Util } = require('leanpro.common'); const assert = require('assert'); let model = TestModel.loadModel(__dirname + "/model1.tmodel"); //// Your step definitions ///// async function clickNumber(digit) { switch (digit) { case 1: buttonName = 'One' break; case 2: buttonName = 'Two'; break; case 3: buttonName = 'Three'; break; case 4: buttonName = 'Four'; break; case 5: buttonName = 'Five'; break; case 6: buttonName = 'Six'; break; case 7: buttonName = 'Seven'; break; case 8: buttonName = 'Eight'; break; case 9: buttonName = 'Nine'; break; default: break; } await model.getButton(buttonName).click(); } async function clickSign(sign) { switch (sign) { case 'plus': return model.getButton('Plus').click(); case 'minus': return model.getButton('Minus').click(); case 'multiply': return model.getButton('Multiply by').click(); case 'divide': return model.getButton('Divide by').click(); } } Given(/^click on the number (\d+)$/, async function (digit) { await model.getWindow("Window").activate(); await clickNumber(digit); }); Given(/^click the "([^"]*)" sign$/, async function (sign) { clickSign(sign); //Calculater need some time to perform calculation }); Then(/^the result should be (\d+)$/, async function (result) { let name = await model.getText("Display").name(); console.log('result', result, name, name, name.endsWith(result.toString())) return assert.ok(name.endsWith(result), `expect ${result}, actual ${name}`); }); When(/^click \[equals\] button$/, async function () { return model.getButton('Equals').click(); //Calculater need some time to perform calculation await Util.delay(1000); }); After(async function() { //take screenshot let screenShot = await model.getWindow("Window").takeScreenshot(); //insert into report this.attach(screenShot, 'image/png'); })
Обратите внимание, что в коде мы также добавили функцию крючка После
, который проходит после каждого сценария. В коде вы можете увидеть, что он фиксирует скриншот приложения Cuketest и вставляет его в отчет. Для получения дополнительной информации о крючке вы можете прочитать статью Крючки и тайм-аут Отказ
Сделать его данные
Очень распространена практика для создания данных автоматизации тестирования. В Cuketest это легко сделать. Сначала конвертируйте тип сценария в Сценарий наброски А затем добавьте строку данных. Для получения более подробной информации о том, как делать данные, управляемые в Cucumber.js, вы можете прочитать Создание сценариев автоматизации привода данных с помощью DOC String & Data Table Отказ
Сделать это:
Щелкните правой кнопкой мыши заголовок сценария, измените тип сценария к сценарию.
Затем вы получаете следующее:
Обратите внимание, что все параметры были извлечены и вставлены в примерную таблицу под описанием сценария, чтобы вы могли добавить больше данных к этой таблице.
Добавить данные в пример таблицы
Примечание. Вы можете редактировать данные вручную или импортировать из данных CSV
Текст функции результата следующий:
Feature: Windows Calculator Test Windows Calculator automation test Scenario Outline: Simple Addition Given click on the numberAnd click the " " sign When click on the number And click [equals] button Then the result should be Examples: | number1 | operator | number2 | result | | 1 | plus | 2 | 3 | | 9 | minus | 3 | 6 | | 4 | plus | 5 | 9 | | 3 | multiply | 6 | 18 | | 8 | divide | 2 | 4 |
Вы можете заметить, что для преобразования скрипта автоматизации в управляемые данные не нужно менять кодовую деталь, мы только что обновили файл функций с большим количеством данных.
Отчет о тестировании
Нажмите на кнопку «Выполнить проект» на Cuketest, чтобы запустить весь проект. После запуска Cuketest автоматически показывает ваш отчет о тесте HTML.
Обратите внимание, что в отчете есть как резюме, так и детали, и при расширении детализации сценариев вы также можете увидеть скриншот приложения.
Резюме
Как вы можете видеть сверху пример, Cuketest позволяет быстро построить автоматические тесты BDD для приложений Windows. Он поддерживает сценарии автоматизации разработки Node.js, а также обеспечивает шпионское управление Windows Sping и возможности управления моделей и богатый набор API на набор APIS-автоматизации Windows; Cuketest помогает быстро создавать тестовый скрипт поведения и визуальный отчет. С помощью этого инструмента вы можете создать скрипт автоматизации Windows, который прост в использовании и обслуживании.
Смотрите также: Автоматизация приложений Windows 02: Отправить почту с почтовым клиентом