Рубрики
Без рубрики

CUCURE.JS Учебник с примерами для javaScript Selenium

Этот учебник Cucumber.js поможет вам автоматизировать тестирование браузера с помощью Selenium & JavaScript через облачную селеновую решетку браузеров 2000+ для мобильных и рабочего стола. Прочитай сейчас!

Автор оригинала: Nate-Grey.

Актуальность использования BDD Framework, таких как Cucumber.js, часто допрашивается нашими коллегаторами автоматизации. Многие чувствуют, что это просто добавляет больше работы на свой стол. Тем не менее, использование BDD Framework имеет свои собственные преимущества, которые могут помочь вам принять автоматизацию вашего селена. Не в стороне, эти BDD Frameworks помогают всем своим заинтересованным сторонам легко интерпретировать логику за скриптом автоматизации теста Selenium. Использование CuCumber.js для вашего тестирования Selenium JavaScript может помочь вам указать критерий принятия, который был бы легко для понимания любого не программатора. Это также может помочь вам быстро оценить логику, подразумеваемую в вашу Selenium Test Automation Suite, не проходя через огромные куски кода.

С данным, когда-затем структурой, структура развития поведения, как CuCumber.js, сделали тесты намного проще для понимания. Чтобы положить это в контекст, давайте сделаем небольшой сценарий, вы должны проверить банкомат, если оно функционирует хорошо. Мы напишем условия, которые, учитывая баланс счета, составляют 1000 долларов, а карта действительна, и машина содержит достаточно денег, когда владелец учетной записи запрашивает 200 долларов, а баланс CashPoint должен доставлять $ 800 долларов, а карт должен быть 800 долларов вернулся.

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

Что такое Cucumber.js и что делает его таким популярным?

Давайте начнем наш учебник Cucumber.js с небольшим краном о структуре. CuCumber.js – очень прочная и эффективная и эффективная система тестирования Selenium JavaScript, которая работает над процессом разработки драйверов поведения. Эта тестовая библиотека обеспечивает легкую интеграцию с Selenium и предоставляет нам возможность определить наши тесты на простым языке, который даже понятен укладкой. Библиотека тестирования JavaScript Selenium javaScript Cucumber.js следует данному – когда-то структуру, которая помогает представить тесты на простым языке, который также делает наши тесты – точка общения и сотрудничества. Эта функция улучшает читаемость теста, и, следовательно, помогает понять каждый случай использования лучше. Он используется для тестирования подразделения разработчиками, но основным использованным для интеграции и завершения конечных испытаний. Более того, он сотрудничает на тесты и делает его настолько разборчивым, что вряд ли необходимо для документации по тестируемым случаям и даже можно переваривать бизнес-пользователей.

Настройка CuCumber.js для тестирования Selenium JavaScript

Итак, прежде чем мы продолжим наш учебник Cucumber.js, чтобы начать писать и выполнять наши автоматизированные тестовые сценарии, используя огурец, нам нужно настроить нашу систему с помощью Framework Cucumber.js и устанавливать все необходимые библиотеки и пакеты, чтобы начать тестирование Selenium JavaScript Отказ

Узел JS и узловой пакет Manager (NPM): Это пакет фундамента и наиболее важен для любых систем тестирования JavaScript Selenium. Его можно скачать через NPM Manager I.E., устанавливая управляющий узел пакета из официального веб-сайта Nodejs.org: http://www.nodejs.org/en/download/package-manager Или использование установщика пакета для разных операционных систем, загруженных с веб-сайта здесь Для Mac OS, Windows или Linux. Мы можем выполнить команду NPM в командной строке и проверьте, установлена ли она в системе.

Библиотечный модуль Cucumber.js: Следующим обязательным условием, необходимым для нашего тестового исполнения, является библиотека Cucumber.js. Нам понадобится пакет Cucumber.js как зависимость в разработке. После успешной установки и проверки узла JS в системе мы использовали бы управляемый узел Package I.E. NPM, который он предоставляет установить библиотечный пакет CuCumber.js в репозитории NPM.

Итак, чтобы установить последнюю версию модуля CuCumber.js, мы будем использовать команду NPM, как показано ниже

$ npm install -g cucumber 
and
npm install  --save-dev cucumber

Здесь параметр ‘g’ Указывает на глобальную установку модуля, что означает, что он не ограничивает использование модуля к текущему проекту, и он также может быть доступен с инструментами командной строки. Команда выполнена с помощью параметра ‘-Save-dev «Поместим исполняемый файл огурца в базовом каталоге I.E./NODE_MODULES/.BIN Directory и выполните команды в нашей инструменте командной строки, используя ключевое слово CUCUME.

Java – SDK: Поскольку все тестовые рамки Selenium внутренне используют Java, затем мы будем двигаться вперед и установить комплект разработки Java в наших системах. Рекомендуется использовать JDK, имеющуюся версию 6.0 и выше и настроить/настроить переменные системы системы для Java.

Веб-драйвер Selenium: Отказ Чтобы автоматизировать системный браузер, нам нужно будет установить библиотеку веб-драйверов Selenium Web, используя команду ниже NPM ниже. В большинстве случаев он автоматически устанавливается в нашем базовом каталоге NPM Node_Modules в качестве зависимости при установке других библиотек.

$ npm install selenium-webdriver

Драйвер браузера: Наконец, требуется установить драйвер браузера. Это может быть любой браузер, где мы хотели бы выполнить тестовые сценарии, и, следовательно, соответствующий драйвер должен быть установлен. Этот исполняемый файл должен быть добавлен в нашу переменную среды пути, а также помещена внутри одной папки Bin. Здесь мы устанавливаем хромированный драйвер

[] (JavaScript: void (0))

Автоматизатор-проб - сейчас

Работа над тестовой структурой CuCumber.js?

Теперь, когда мы создали нашу систему для нашего учебного пособия Cucumber.js, мы будем двигаться вперед с созданием нашей структуры проекта и создать каталог с именем Cucumber_test. Затем мы создадим две подпапки I.E функции и step_finition, которые будут содержать соответствующие скрипты, написанные для наших функций и определение шага.

Особенности $ MKDIR

$ mkdir step_definitions.

Наконец, папка будет иметь сгенерированный файл package.json в базовом каталоге пакета и сохранять все зависимости Dev для этих модулей. Другое важное, что связано с файлом package.json – добавить атрибут теста в параметре скриптов.

{
  "scripts": {
    "test": "./node_modules/.bin/cucumber-js"
  }
}

Добавляя этот фрагмент на наш файл Package.json. Мы можем запускать все тесты огурца из командной строки, просто набрав в «Test NPM» в командной строке. Наша финальная структура папки проекта стоит ниже.

cucumber_test
        | - - feature
                    | - - feature_test.feature
        	      | - - step_definition
                                     | - - steps_def.js
      | - - support
          | - - support.js
        | - - package.json

Ниже приведена процедура работы проекта Cucumber.js:

  • Мы начинаем с написания файлов .feature, которые имеют сценарии и каждый из этих сценариев с определенной структурой.
  • Далее мы записываем файлы определения шага, которые обычно определяют функции, которые совпадают с шагами в наших сценариях.
  • Кроме того, мы реализуем эти функции согласно нашему требованию или автоматизируйте тесты в браузере с драйвером селена.
  • Наконец, мы запускаем тесты, выполняющие исполняемый файл CuCumber.js, присутствующий в папке Node_Modules/.bin.

Запуск нашего первого тестового скрипта Cucumber.js

Следующим шагом в этом учебном пособии Cucumber.js является выполнение образца приложения. Мы начнем с создания каталога проекта с именем CUCUMBER_TEST, а затем скрипт имени подпапок с именем тестового сценария Single_test.js внутри него.

Затем мы добавим сценарий с помощью файла .feature. Которые будут поданы нашему приложению, поскольку мы указываем Cucumber.js для запуска файла функций. Наконец, Framework CuCumber.js анализирует файл и вызовет код, который соответствует информации в файле функции.

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

Пожалуйста, обратите внимание на файл package.json, который мы будем использовать в наших предстоящих демонстрациях.

Package.json.

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

{
  "name": "Cucumber.js Javascript test with Selenium",
  "version": "1.0.0",
  "description": "CucumberJS Tutorial for Selenium JavaScript Testing",
  "main": "index.js",
  "scripts": {
    "test": "./node_modules/.bin/cucumber-js"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "author": "",
  "license": "ISC",
  "description": {
    "url": ""
  },
  "homepage": "",
  "dependencies": {
    "assert": "^1.4.1",
    "chromedriver": "^2.24.1",
    "cucumber": "^1.3.0",
    "geckodriver": "^1.1.3"
  },
  "devDependencies": {
    "selenium-webdriver": "^3.6.0"
  }
}

Теперь первый шаг проекта должен определить нашу функцию, которую мы собираемся реализовать I.E в этом файле, мы опишем поведение, которое мы хотели бы от нашего приложения, который посещает веб-сайт в нашем случае. Эта функция позволяет просвечивать браузер для элементов. Следовательно, мы обновим наш файл функций с кодом. Ниже приведен то, как выглядит наш файл функций, который содержит данный, когда и затем сценарии.

feature_test.feature.

Теперь у нас будут первые основные сценарии для посещения веб-сайта, определенного в файле функций, за которым следует другие сценарии. Эти сценарии будут следовать данным, когда тогда шаблон.

  • Дано: он устанавливает начальный контекст или предварительные условия.
  • Когда: это напоминает событие, которое должно происходить в сценарии.
  • Тогда: это ожидаемый результат тестового сценария.

Особенность: функция для проверки определенных действий при посещении веб-сайта SELENIUM DEV

Сценарий: при посещении домашней страницы Selenium.dev Далее я посетил официальную веб-страницу Selenium на сайте www.selenium.dev, когда на странице Seleniumhq Browser есть плитка, что я должен выбрать поиск в боковой панели.

spead_def.js.

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

/* This Cucumber.js tutorial file contains the step definition or the description of each of the behavior that is expected from the application */
 
'use strict';
 
const { Given, When, Then } = require('cucumber');
 
const assert = require('assert')
 
const webdriver = require('selenium-webdriver');
 
// // The step definitions are defined for each of the scenarios // //
 
// // The "given" condition for our test scenario // //
Given(/^I have visited the Selenium official web page on "([^"]*)"$/, function (url, next) {
    
this.driver.get('https://www.selenium.dev').then(next);
 
  });
 
// // The "when" condition for our test scenario // //
  When(/^There is a title on the page as "SeleniumHQ Browser Automation" "([^"]*)"$/, function (titleMatch, next) {
    this.driver.getTitle()
      .then(function(title) {
        assert.equal(title, titleMatch, next, 'Expected title to be ' + titleMatch);
 
// // The "then" condition for our test scenario // //
Then(/^I should be able to click Search in the sidebar $/, function (text, next) {
     this.driver.findElement({ id: 'searchText' }).click();
     this.driver.findElement({ id: 'searchText' }).sendKeys(text).then(next);
  });

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

support.js.

Файл поддержки и крюки используется с определением шага для инициализации переменных и выполнения определенных валейций.

// // This Cucumber.js tutorial support file to perform validations and initialization for our app // //
 
 
const { setWorldConstructor } = require('cucumber')
 
const { seleniumWebdriver } = require('selenium-webdriver');
 
var firefox = require('selenium-webdriver/firefox');
 
var chrome = require('selenium-webdriver/chrome');
 
class CustomWorld {
  constructor() {
    this.variable = 0
  }
 
function CustomWorld() {
 
  this.driver = new seleniumWebdriver.Builder()
                  .forBrowser('chrome')
                  .build();
}
 
setWorldConstructor(CustomWorld)
 
module.exports = function() {
 
  this.World = CustomWorld;
 
  this.setDefaultTimeout(30 * 1000);
};

Cooks.js.

Он выпускает драйвер, когда тестовое исполнение завершено.

module.exports = function() {
  this.After(function() {
    return this.driver.quit();
  });
};

Наконец, когда мы выполняем тест, мы можем видеть в командной строке, что наш тест успешно выполнен. Тест на NPM

тестовый сценарий

Теперь давайте посмотрим на другой пример, который выполнит поисковый запрос в Google и проверить название веб-сайта, чтобы утвердить, запущен ли правильный сайт в браузере.

sciplay_test2.feature.

Особенность: функция, чтобы проверить на посещение веб-сайта поиска Google

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

spead_def2.js.

/* This Cucumber.js Tutorial file contains the step definition or the description of each of the behavior that is expected from the application which in our case is the webpage that we are visiting for selenium javascript testing .*/
 
var assert = require('assert');
 
// // This scenario has only "given" and "then" condition defined // //
 
module.exports = function () {
  this.Given(/^I have visited the Google homepage$/, function() {
    return this.driver.get('http://www.google.com');
  });
 
  this.Then(/^I should be able to see Google in title bar$/, function() {
    this.driver.getTitle().then(function (title) {
      assert.equal(title, "Google");
      return title;
    });
  });
};

Support2.js.

// This Cucumber.js tutorial support file is used to perform validations and initialization for our application // 
 
var seleniumWebdriver = require('selenium-webdriver');
 
var firefox = require('selenium-webdriver/firefox');
 
var chrome = require('selenium-webdriver/chrome');
 
function CustomWorld() {
 
  this.driver = new seleniumWebdriver.Builder()
                  .forBrowser('chrome')
                  .build();
}
 
module.exports = function() {
 
  this.World = CustomWorld;
 
  this.setDefaultTimeout(30 * 1000);
};

Крючки2.js.

module.exports = function() {
  this.After(function() {
    return this.driver.quit();
  });
};

Опять же, когда мы выполняем тест, мы можем видеть в командной строке, что наш тест успешно выполнен. Тест на NPM

Test-Senario1.

Кедос! Вы успешно выполнили свой первый сценарий Cucumber.js для автоматизации тестирования Selenium. Тем не менее, этот учебник Cucumber.js не заканчивается там! Теперь, когда вы знакомы с Selenium и Cucumber.js, я хочу, чтобы вы думали о проблемах масштабируемости здесь.

До сих пор вы успешно выполнили скрипт Cucumber.js над вашей операционной системой. Тем не менее, если вы хотите выполнить автоматическое тестирование браузера, как бы вы провели тестирование вашего веб-приложения на сотни различных комбинаций браузеров + ОС?

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

Все это может стоить вам денег и времени в поддержании внутренней инфраструктуры селена. Так что ты можешь сделать?

Вы можете использовать Селенская сетка на облаке. Существуют различные преимущества над выбором сетки Selenium на основе облаков по локальной установке. Самое ключевое преимущество заключается в том, что оно освобождает вас от хлопот поддержания собственной инфраструктуры селена. Это сохранение усилий для установки и управления ненужными виртуальными машинами и браузерами. Таким образом, все, что вам нужно сосредоточиться, запустит ваши сценарии автоматизации тестирования Selenium. Давайте попробуем выполнить наш сценарий Cucumber.js над онлайн-селеной сеткой на облаке.

Запуск сценария CuCumber.js над онлайн-селеной сеткой

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

Lambdatest позволяет вам проверить ваш сайт на 2000+ комбинациях браузеров и операционных систем, размещенных на облаке. Не только расширяя ваше тестовое покрытие, но и экономящее время вокруг общего тестового выполнения.

Чтобы запустить тот же скрипт на сетке лямбдатестра селена, вам нужно немного настроить сценарий проверки JavaScript Selenium JavaScript. Как вы уже хотите указать URL-адрес HUB для удаленной WebDriver, который выполнит ваш скрипт на нашей сетке SELENIUM. Добавьте имя пользователя и доступ к ключу. Для этого мы должны добавить токен клавиши доступа, а также детали имени пользователя в файлах конфигурации I.E. Cred.conf.js, представленный в каталоге CONF. Имя пользователя и токен ключа доступа могут быть экспортированы двумя способами, как указано ниже.

cred.conf.js.

exports.cred = {
    username: process.env.LT_USERNAME || 'rahulr',
    access_key: process.env.LT_ACCESS_KEY || 'AbcdefgSTAYSAFEhijklmnop'
}

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

export LT_USERNAME=irohitgoyal
 
export LT_ACCESS_KEY= AbcdefgSTAYSAFEhijklmnop

Далее мы посмотрим на файл функций. Мы будем выполнять наш тест на браузере Google Chrome. В нашем тестовом случае мы откроем сайт Lambdatest для выполнения определенных операций, таких как запуск поисковой системы, подтверждающий контент и т. Д. Итак, наша структура каталогов будет довольно простым, как показано ниже:

feature_test.feature.

Особенность: Google Search Поиск на веб-сайте и проверьте определенные действия сценария: выполните определенные действия на главной странице, когда я посещаю веб-сайт Google на «https://google.com», когда домашняя страница имеет поле с «поиском Google», когда Домашняя страница имеет поле «Я чувствую себя счастливчику» присутствует, когда я перемещаю курсор и выбираю текстовое поле, чтобы сделать поиск в Google, затем нажмите на «поиск Google» в текстовом поле, то я должен увидеть название «Google» на домашняя страница

Теперь нам нужно подумать о наших желаемых возможностях. Мы можем использовать функцию генераторных возможностей Lambdatest Selenium, чтобы выбрать детали спецификации окружающей среды, и позволяет нам выбрать различные комбинации, которые он предлагает, мы можем использовать это, чтобы выбрать комбинацию, которую мы хотим выполнить тестирование нашего SELENIUM JavaScript для этого учебного пособия SELENIUM.

лямбдатест - генератор

Таким образом, в нашем сценарии испытаний нужные класс возможностей будут выглядеть нечто подобное, как показано ниже:

const desiredCapabilities = {
  'build': 'Cucumber-JS-Selenium-Webdriver-Test', // the build name that is to be display in the test logs
  'browserName': 'chrome', // the browser that we would use to perform test
  'version':'74.0', // the browser version that we would use.
  'platform': 'WIN10', // The type of the Operating System that we would use
  'video': true, // flag to check whether to capture the video selenium javascript testing 
.
  'network': true, // flag to check whether to capture the network logs
  'console': true, // flag to check whether to capture the console logs
  'visual': true // flag to check whether to the capture visual for selenium javascript testing 
};

С помощью этого набора мы сейчас смотрим на определения шага и runner runner.js.

step_def.js.

/*
This Cucumber.js tutorial file contains the step definition or the description of each of the behavior that is expected from the application which in our case is the webpage that we are visiting.
It is aligned with the feature file and reads all the instructions from it and finds the matching case to execute it for selenium javascript testing 
 
.
*/
 
 
'use strict';
 
const assert = require('cucumber-assert');
const webdriver = require('selenium-webdriver');
 
module.exports = function() {
 
  this.When(/^I visit website of Google on "([^"]*)"$/, function (url, next) {
    this.driver.get('https://google.com ').then(next);
  });
 
  this.When(/^the homepage has the field with "Google Search" is present
$/, function (next) {
      this.driver.findElement({ name: 'li1' })
      .click().then(next);
  });
 
  this.When(/^the homepage has the field with "I'm Feeling Lucky" is present $/, function (next) {
      this.driver.findElement({ name: 'li3' })
      .click().then(next);
  });
 
  this.When(/^I move the cursor and select the textbox to make a search on Google $/, function (text, next) {
      this.driver.findElement({ id: 'buttonText' }).click();
      this.driver.findElement({ id: 'buttonText' }).sendKeys(text).then(next);
  });
 
  this.Then(/^click the "Google Search" on the text box "([^"]*)"$/, function (button, next) {
    this.driver.findElement({ id: button }).click().then(next);
  });
 
  this.Then(/^I must see title "Google" on the homepage "([^"]*)"$/, function (titleMatch, next) {
    this.driver.getTitle()
      .then(function(title) {
        assert.equal(title, titleMatch, next, 'Expected title to be ' + titleMatch);
      });
  });
};

огурец-runner.js.

#!/usr/bin/env/node
 
//
It resembles our runner file for parallel tests. This file is responsible to create multiple child processes, and  it is equal to the total number of test environments passed for selenium javascript testing 
 
.
//
 
let childProcess = require ('child_process') ;
let configFile  = '../conf/' + ( process.env.CONFIG_FILE  || 'single' ) + '.conf.js';
let config = require (configFile ).config;
 
process.argv[0] = 'node';
process.argv[1] = './node_modules/.bin/cucumber-js';
 
const getValidJson = function(jkInput) {
    let json = jkInput;
    json = json.replace(/\\n/g, "");
    json = json.replace('\\/g', '');
    return json;
};
 
let lt_browsers = null;
if(process.env.LT_BROWSERS) {
    let input = getValidJson(process.env.LT_BROWSERS);
    lt_browsers = JSON.parse(input);
}
 
for( let i in (lt_browsers || config.capabilities) ){
  let env = Object.create( process.env );
  env.TASK_ID = i.toString();
  let p = childProcess.spawn('/usr/bin/env', process.argv, { env: env } ); 
  p.stdout.pipe(process.stdout);
}

Теперь, поскольку наши тестовые скрипты готовы выполнять в облачной сетке, последняя вещь, которую мы обязаны сделать, это запускать тесты из каталога базового проекта, используя команду ниже:

Тест на NPM

Эта команда проверит проверку тестов и выполняет наш тестовый набор по всем тестовым группам, которые мы определили. И, если мы открываем Lambdatest Selenium Grid и перейдите к панели инструментов автоматизации, мы можем проверить, что пользовательский интерфейс показывает, что тест успешно и передан с положительными результатами.

Ниже приведен образец скриншота:

Образец-скриншот

Не забудьте использовать параллельное тестирование

Параллельное тестирование с Selenium может помочь вам значительно обрезать ваши циклы тестирования. Представьте себе, если у нас есть как минимум 50 тестовых случаев для выполнения, и каждый из них работает для среднего времени выполнения 1 минуты. В идеале, это потребуется около 50 минут, чтобы выполнить тестовый люкс. Но если мы выполним 2 тестовых случая в 2 параллельных одновременных сеансах, общее время тестирования падает до 25 минут. Следовательно, мы можем увидеть резкое снижение времени испытания. Чтобы выполнить параллельное тестирование с помощью селена для этого учебника Cucumber.js, выполните команду ниже $ npm бегать параллельно Отказ

Нижняя граница

CuCumber.js Предоставляет нам возможность писать тесты таким образом, чтобы все было легко читать всеми. Создание структуры очень гибкой и позволяя нам создавать читаемое человеком описания пользовательских требований в качестве основы для тестов веб-приложений. С Cucumber.js мы можем взаимодействовать с нашей веб-страницей в браузере и сделать различные утверждения, чтобы убедиться, что изменения, которые мы выполняли, фактически отражены в нашем веб-приложении в каждом комбинации браузерных ОС, используя селеную сетку. Тем не менее, есть намного больше, что можно сделать с помощью Cucumber.js. Поскольку эта тестовая структура разработана над интерфейсом Selenium, он дает нам безграничных возможностей с точки зрения тестирования Selenium JavaScript. Дайте нам знать, если вам понравился этот учебник Cucumber.js и если есть какая-либо тема, на которой вы хотите, чтобы мы написали. Счастливое тестирование и оставаться в безопасности!