ДжазТим — надежный технологический партнер

Agile разработка ПО на Java

Автоматизация тестирования на Node.JS

Введение

В этой статье пойдет речь про использование Selenium-Webdriver — это инструмент для автоматизации действий веб-браузера на платформе Node.JS.

На одном из проектов перед нами была поставлена задача — выполнить разработку Web UI автотестов. Одним из пожеланий являлось — запуск тестов на стороне frontend разработчиков с использованием возможностей только Node.JS, без использования сторонних приложений.

Исторически сложилось, что для автоматизации тестирования долгое время эталоном считались Java и Python. Поэтому, если провести опрос среди автоматизаторов, то с большой долей вероятности они выберут один из этих языков программирования.

Почему данная статья важна? Ведь в интернете можно найти множество статей и примеров по тому, как можно реализовать UI тесты с использованием Selenium-js. Однако при их детальном изучении оказывается, что примеры в них приводятся достаточно простые, а вот примеры с использованием PageObject модели найти гораздо сложнее. Поэтому, если хочется узнать немного больше, то поехали.

О трудностях выбора

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

Mocha

Для Node.JS написано огромное количество библиотек, поэтому, для того чтобы не потеряться в этом многообразии, мы выделили для себя несколько фреймворков:

Опыт работы с Java в данной области подталкивал нас искать похожее решение на JS, и мы выбрали Mocha. Поэтому было принято решение отказаться от других более экзотических фреймворков.

Используя Mocha, мы получаем необходимый минимум и ничего лишнего. Ну а кроме этого, Mocha — это один из популярнейших фреймворков на Node.JS с достаточно активным сообществом и большим количеством документации. Но при всех достоинствах у него есть и недостаток — это отсутствие assert-ов.

Поэтому для проверок было решено использовать стороннюю библиотеку Chai. Подключение несложное — нужно ввести всего одну строку, а бонусом к этому будет возможность использовать любой из стилей assertions: assert, expect, should.

Selenium-webdriver

Так как на этапе выбора фреймворка мы отказались от Protractor, далее предстояло выбрать “механизм общения” тестов с браузером. И тут тоже JavaScript может похвастаться разнообразием, вот самые основные кандидаты:

Выбор пал на Selenium-webdriver, так как это классическое решение для данной задачи, приёмы работы с которым практически не отличаются от приёмов в Selenium на Java.

Примеры кода

В данном разделе будут приведены образцы кода, выполненного на заданных технологиях.

BaseDialog

Данный класс является частью PageObject модели тестируемого приложения. В нём описана базовая функциональность для любого диалогового окна тестируемого приложения. Также данный класс наследуется от BasePage, в котором описана вся базовая функциональность по работе с любыми web-элементами. Каждый web-элемент, с которым мы хотим взаимодействовать в тестируемом приложении, должен быть отражен в данной модели (страницы, вкладки, диалоги кнопки и т.д.).

SaveDialog

Данный класс также является частью PageObject, он реализует базовый класс BaseDialog. Как видно из скрина, в новом диалоге добавлена обработка ещё одной кнопки “Save”.

Базовый класс диалогов BaseDialog имеет множество реализаций (например: диалог ошибки, диалог удаления и т.д.).

BaseSteps

На этом скриншоте мы видим часть класса BaseSteps. Данный класс содержит набор общих методов, которые понадобятся для реализации любого сценария (например: логин в приложение, логаут и т.д.). Класс является основой слоя степов.

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

TestExample

Здесь можно оценить примерный вид обычного теста выполненного с использованием PageObject.

Как видно на скриншоте, сам тест очень компактный. В нём чётко видны входные параметры, некое действие с ними, и в завершении одна контрольная проверка того, что данные сформированы верно.

Выводы

Можно ли использовать для web UI тестирования инструменты Node.JS? Конечно можно, но нужно быть готовым к различного рода трудностям, таким как:

А вот перечень преимуществ, которые мы получили при данном подходе:

Полезные ссылки