Feature файлы в контексте тестирования с Protractor являются ключевым
элементом для описания функциональности приложения на языке Gherkin. Они
представляют собой текстовые файлы с расширением .feature,
где тестируемое поведение формулируется в виде сценариев (scenarios).
Основное назначение feature файлов — разделение описания поведения
приложения от реализации тестов, что делает тесты более читабельными и
поддерживаемыми.
Каждый feature файл начинается с ключевого слова Feature, за которым следует краткое описание функциональности. Например:
Feature: Авторизация пользователя
Проверка корректного входа в систему с валидными и невалидными данными.
После описания функциональности следуют сценарии. Сценарий (Scenario) описывает отдельный путь использования функционала и состоит из последовательности шагов.
Шаги в feature файле начинаются с ключевых слов Given, When, Then, And, But. Их назначение:
Пример сценария:
Scenario: Успешный вход в систему
Given пользователь находится на странице логина
When пользователь вводит корректные учетные данные
And нажимает кнопку "Войти"
Then пользователь видит главную страницу
Feature файлы поддерживают параметры, позволяющие переиспользовать один сценарий для разных входных данных. Для этого используются Scenario Outline и блок Examples. Пример:
Scenario Outline: Авторизация с различными учетными данными
Given пользователь находится на странице логина
When пользователь вводит логин "<username>" и пароль "<password>"
And нажимает кнопку "Войти"
Then отображается сообщение "<message>"
Examples:
| username | password | message |
| admin | 12345 | Добро пожаловать, admin |
| test | wrong | Неверный логин или пароль |
Такой подход сокращает дублирование и повышает читаемость тестов.
Feature файлы обычно структурируют по функциональным блокам приложения, а не по техническим аспектам реализации. Основные рекомендации по организации:
Пример структуры проекта:
/features
login.feature
registration.feature
shopping_cart.feature
/features/step_definitions
loginSteps.js
registrationSteps.js
cartSteps.js
Каждый шаг сценария в feature файле должен соответствовать функции в step definition. Protractor с Cucumber позволяет связывать шаги с функциями через регулярные выражения. Пример:
const { Given, When, Then } = require('cucumber');
const { browser, element, by } = require('protractor');
Given('пользователь находится на странице логина', async () => {
await browser.get('https://example.com/login');
});
When('пользователь вводит логин {string} и пароль {string}', async (username, password) => {
await element(by.id('username')).sendKeys(username);
await element(by.id('password')).sendKeys(password);
});
Then('отображается сообщение {string}', async (message) => {
const alertText = await element(by.css('.alert')).getText();
if (alertText !== message) throw new Error(`Ожидалось "${message}", но получено "${alertText}"`);
});
Ключевой момент: соблюдение точного соответствия текста шага в feature файле и регулярного выражения в step definition критично для корректного выполнения тестов.
#, но их
следует использовать экономно, чтобы не загромождать файл.Protractor с Cucumber автоматически проверяет синтаксис feature файлов при запуске тестов. Ошибки чаще всего возникают из-за:
Использование линтеров для Gherkin может предотвратить большинство подобных ошибок.
Feature файлы становятся центром коммуникации между разработчиками, тестировщиками и менеджерами, так как описывают функциональность на естественном языке, но при этом остаются исполнимыми через Protractor и Cucumber.