Пошаговое руководство. Автоматизация тестирования Блокнота Windows с помощью Node.js

В этой статье показано, как создать скрипт автоматизации для Блокнота Windows 10 с помощью Node.js и Cucumber.js. Вы также узнаете, как создать объектную модель для вашего приложения Windows и как использовать API-интерфейсы автоматизации Windows в CukeTest для написания сценария.

В этом пошаговом руководстве мы:

  • Создайте сценарии BDD, описывающие шаги автоматизации.
  • Элементы управления Spy Notepad и добавление тестовых объектов в объектную модель
  • Реализовать код автоматизации
  • Отладьте и запустите скрипт, чтобы получить отчет

Мы создали видео о том, как это сделать, смотрите его на YouTube

Чтобы сделать это шаг за шагом самостоятельно, пожалуйста, сначала установите Node.js а также CukeTest как средства разработки.

1. Создать проект

  1. Откройте CukeTest, нажмите «Файл» -> «Новый проект».

  2. Установите «NotepadTesting» в качестве имени проекта и выберите шаблон проекта «Windows», также укажите путь к проекту и нажмите «Создать», чтобы создать проект.

новый проект.png

2. Пишите сценарии

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

особенность.png

В представлении «Текст» вы найдете содержимое файла функции:

Feature: Notepad Application Automation
Automate Windows 10 Notepad application for testing

Scenario: Edit content and save
   Given Notepad application is opened
   When input text "hello world" in the Notepad
   And select [File] -> [Save] to show the file save dialog
   And enter the file name "helloworld.txt" and click [OK]
   Then the file should be saved successfully

Scenario: Change Notepad font
   Given Notepad application is opened
   When select [format] -> [font] to open font dialog
   And select [Arial] font from the Font dropdown box
   Then Click [OK] button to dismiss the Font dialog

С созданными сценариями теперь очень ясно, что нужно реализовать.

3. Шпионский контроль

При автоматизации приложения Windows «тестовые объекты» используются для идентификации элементов управления Windows. каждый тестовый объект содержит набор свойств и правил, используемых для обнаружения элемента управления. Информация о тестовом объекте хранится в файле объектной модели (или, сокращенно, «файле модели»), который заканчивается на «.tmodel». Диспетчер моделей в CukeTest используется для создания и управления файлом модели. Вот краткая инструкция о том, как шпионить и добавлять объекты в модель:

Нажмите «Добавить объект».addObj.png кнопку, чтобы начать отслеживание элемента, щелкните элемент управления, который вы хотите добавить, если элемент управления успешно отслежен, он покажет элементы управления, которые вы хотите добавить, и их свойства. Затем вы нажимаете «Добавить в модель». добавить.png кнопку, чтобы добавить его в объектную модель.

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

  1. Нажмите step_definitions\model1.tmodel файл, чтобы открыть его в диспетчере моделей.

    tmodel.png

  2. Откройте Блокнот, просмотрите следующий список элементов управления и добавьте их в модель, а также дайте им имена в качестве столбца «Имя объекта» ниже:

    ТекстТип управленияИмя объекта
    «Файл»Пункт менюФайл
    «Сохранять»Пункт менюСохранить1
    «Формат»Пункт менюФормат
    «Шрифт…»Пункт менюШрифт…
    «»ДокументТекстовый редактор

    Один совет о шпионаже, чтобы шпионить за кнопкой «Сохранить», сначала нажмите клавишу Ctrl при нажатии меню «Файл», чтобы этот щелчок не вызывал появление диалогового окна шпионажа, а затем отпустите клавишу Ctrl, когда вы нажимаете «Сохранить».

  3. Откройте диалоговое окно «Шрифт», щелкнув меню «Формат» -> «Шрифт…», просмотрите и добавьте следующий список элементов управления и добавьте их в модель.

    ТекстТип управленияИмя объекта
    «Ариал»пункт спискаАриал
    «ХОРОШО»КнопкаХОРОШО
  4. Откройте диалоговое окно «Сохранение файла», просмотрите и добавьте следующий список элементов управления и добавьте их в модель.

    ТекстТип управленияИмя объекта
    «»РедактироватьИмя файла:1
    «ХОРОШО»КнопкаХОРОШО

    После добавления всех этих элементов ваша модель должна выглядеть следующим образом:

    файл модели.png

4. Начать реализацию сценариев

  1. Открытым step_definations\definitions1.js файла, нажимайте серые кнопки на каждом шаге, чтобы сгенерировать заглушку кода определения шага.

    автоскрипт.png

    обратите внимание, что теперь кнопка рядом с текстом шага оранжевого цвета, что означает, что шаги имеют соответствующие функции определения шагов, но они еще не реализованы.

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

    Теперь вы можете открыть model1.tmodel файл, выберите объект из дерева модели, выберите вкладку «Действия/Свойства», а затем скопируйте метод из списка и добавьте их в скрипт.

  2. Чтобы реализовать определения шагов, сначала выполните шаг «Данный Открыто приложение «Блокнот», вы можете использовать API «Util.launchProcess» для запуска процесса «Блокнот»:

    Given(/^Notepad application is opened$/, async function () {
       if (!await model.getWindow("Notepad").exists(0)) {
          Util.launchProcess('c:\\Windows\\notepad.exe');
       }
    });
    
  3. После написания кода вы можете протестировать его, щелкнув шаг правой кнопкой мыши и нажав кнопку «Выполнить этот шаг» на панели инструментов шага:

    run_first_step.png

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

  4. Прежде чем выполнять остальные шаги, мы должны добавить функции ловушек, чтобы свернуть окно CukeTest при запуске скрипта и восстановить окно CukeTest после завершения запуска, мы можем добиться этого в BeforeAll а также AfterAll крючки. Для получения дополнительной информации о хуках вы можете прочитать BDD Web Automation 04: Hooks and TimeOut. Добавьте файл «support/hooks.js» и поместите следующее содержимое:

    const {BeforeAll, AfterAll, setDefaultTimeout} = require('cucumber')
    const cuketest = require('cuketest');
    
    setDefaultTimeout(20 * 1000);
    
    BeforeAll(async function() {
        await cuketest.minimize();
        await cuketest.delay(1000);
    })
    
    AfterAll(async function () {
        await cuketest.delay(1000);
        await cuketest.maximize();
    })
    

    В hooks.js мы установили время ожидания шага равным 20 секундам вместо 5 секунд по умолчанию, что немного меньше для скрипта автоматизации Windows. Также в BeforeAllмы сворачиваем окно CukeTest перед запуском любых сценариев, ждем 1 секунду, пока минимизация действительно не вступит в силу, чтобы она не мешала пользовательскому интерфейсу тестируемого приложения при выполнении автоматических операций.

5. Реализуйте все шаги автоматизации

  1. Теперь мы можем реализовать второй шаг:

       When input text "hello world" in the Notepad
    

    В этом подразделе функции определения шага измените имя параметра на «текст» и перетащите объект «Текстовый редактор» из диспетчера моделей в функцию, выберите set метод и заполняем в нем параметр text, код такой:

    When(/^input text "([^"]*)" in the Notepad$/, async function (text) {
       await model.getDocument("Text Editor").set(text);
    });
    

    Предположим, вы открыли Блокнот, теперь вы можете щелкнуть правой кнопкой мыши текст шага и выбрать «Выполнить этот шаг», как вы сделали для первого шага, он свернет CukeTest, установите содержимое Блокнота как «hello world», а затем восстановить окно CukeTest. Если этот шаг выполнен успешно, вы можете добавить остальные шаги аналогичным образом.

  2. Чтобы сохранить абзац, я вставляю весь приведенный ниже код Definitions1.js:

    const { Given, When, Then } = require('cucumber');
    const { TestModel } = require('leanpro.win');
    const { Util } = require('leanpro.common');
    const fs = require('fs');
    const cuketest = require('cuketest')
    const assert = require('assert')
    
    let model = TestModel.loadModel(__dirname + "/model1.tmodel");
    
    Given(/^Notepad application is opened$/, async function () {
        if (!await model.getWindow("Notepad").exists(0)) {
            Util.launchProcess('c:\\Windows\\notepad.exe');
        }
    });
    
    When(/^input text "([^"]*)" in the Notepad$/, async function (text) {
        await model.getDocument("Text Editor").set(text);
    });
    
    When(/^select \[File\] \-> \[Save\] to show the file save dialog$/, async function () {
        await model.getMenuItem("File").click();
        await model.getMenuItem("Save1").click();
    });
    
    When(/^enter the file name "([^"]*)" and click \[OK\]$/, async function (fileName) {
        this.fileName = __dirname + '\\' + fileName;
        if (fs.existsSync(this.fileName)) {
            fs.unlinkSync(this.fileName); 
        }
    
        await cuketest.delay(1000)
    
        await model.getEdit("File name:1").set(this.fileName);
        await model.getButton("Save").click();
    });
    
    Then(/^the file should be saved successfully$/, async function () {
        await cuketest.delay(1000)
        assert.ok(fs.existsSync(this.fileName), `${this.fileName} should exists`);
    });
    
    When(/^select \[format\] \-> \[font\] to open font dialog$/, async function () {
        await model.getMenuItem("Format").click();
        await model.getMenuItem("Font...").click();
        await cuketest.delay(1000);
    });
    
    When(/^select \[Arial\] font from the Font dropdown box$/, async function () {
        await model.getList("Font:1").select('Arial');
        await cuketest.delay(1000);
    });
    
    Then(/^Click \[OK\] button to dismiss the Font dialog$/, async function () {
        await model.getButton("OK").click();
    });
    

    чтобы убедиться, что он успешно работает при повторном запуске, он удалит существующий файл перед сохранением.

6. Беги

Нажмите кнопку запуска, он запустит эти два сценария, а затем откроет отчет о тестировании, как показано ниже:

отчет.png
отчет1.png

Резюме

В этой статье мы успешно создали сценарий BDD, который может автоматизировать Блокнот и генерировать отчет о тестировании. Благодаря тестовой модели, управляющей тестовыми объектами, код упрощается и его легче поддерживать. CukeTest предоставляет возможность отладки, которая может выполнять сценарий шаг за шагом.

В следующей статье мы поговорим о том, как организовать объектные модели в Менеджере моделей, чтобы сделать их более организованными. Также мы поговорим о том, как обновить свойства тестового объекта, чтобы он мог работать в Windows с другим языком отображения.

Некоторые другие материалы об автоматизации Windows с использованием Node.js:

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *