В процессе автоматизации тестирования веб-приложений часто возникает необходимость работы с системами, требующими двухфакторной аутентификации (2FA). Это дополнительный уровень безопасности, который требует от пользователя подтверждения своей личности двумя способами: обычно это что-то, что он знает (например, пароль), и что-то, что он имеет (например, одноразовый код, отправленный на мобильное устройство или через приложение).
Для тестирования таких приложений с использованием Puppeteer потребуется настроить обработку этого дополнительного шага аутентификации. Puppeteer — это мощный инструмент для автоматизации браузера, который позволяет взаимодействовать с веб-страницами как реальный пользователь. Рассмотрим, как можно автоматизировать процесс прохождения двухфакторной аутентификации с использованием Puppeteer.
Прежде чем приступить к реализации, нужно убедиться, что Puppeteer правильно настроен. Для этого в проекте должен быть установлен Puppeteer, который можно добавить с помощью команды:
npm install puppeteer
После этого необходимо импортировать библиотеку и настроить браузер:
const puppeteer = require(&
const browser = await puppeteer.launch({ headless: false }); // Открыть браузер в режиме с интерфейсом
const page = await browser.newPage();
Теперь можно приступать к автоматизации процесса авторизации с двухфакторной аутентификацией.
Первым шагом является выполнение обычной авторизации с логином и паролем. Это выполняется с использованием методов Puppeteer для взаимодействия с полями ввода на странице:
await page.goto('https://example.com/login'); // Переход на страницу входа
await page.type('#username', 'yourUsername'); // Ввод логина
await page.type('#password', 'yourPassword'); // Ввод пароля
await page.click('#loginButton'); // Нажатие кнопки входа
После того как пользователь введет логин и пароль, приложение обычно перенаправит его на страницу двухфакторной аутентификации, где требуется ввести одноразовый код. В зависимости от реализации 2FA, код может быть получен через SMS, через приложение для генерации кодов (например, Google Authenticator), или по ссылке.
Для обработки SMS-услуг, например, с использованием сервиса Twilio, можно интегрировать автоматическую обработку кода. Puppeteer сам по себе не может взаимодействовать с телефоном или получать SMS-сообщения, но вы можете использовать API внешнего сервиса для извлечения кода, а затем вставить его на страницу.
Пример:
const smsCode = await getSmsCodeFromApi(); // API для получения SMS-кода
await page.type('#2fa-code', smsCode); // Ввод кода в поле
await page.click('#submit2fa'); // Отправка формы
Если используется приложение для генерации одноразовых кодов, например,
Google Authenticator, необходимо извлечь код с помощью соответствующей
библиотеки для работы с TOTP (Time-based One-Time Password). Такие
библиотеки, как otplib или speakeasy, могут
помочь получить текущий код.
Пример с использованием otplib:
npm install otplib
const { authenticator } = require('otplib');
const secret = 'YOUR_SECRET_KEY'; // Секретный ключ для генерации кода
const token = authenticator.generate(secret); // Генерация одноразового кода
await page.type('#2fa-code', token); // Ввод кода на странице
await page.click('#submit2fa'); // Отправка формы
При взаимодействии с двухфакторной аутентификацией важно предусмотреть возможные ошибки и ситуации, в которых может понадобиться повторить ввод или выполнить дополнительные шаги. Например, если код введен неверно, можно проверить наличие ошибки на странице и предпринять необходимые действия.
const errorMessage = await page.$eval('.error-message', el => el.textContent);
if (errorMessage.includes('Invalid code')) {
// Повторить попытку
const newCode = await getSmsCodeFromApi();
await page.type('#2fa-code', newCode);
await page.click('#submit2fa');
}
После успешного прохождения двухфакторной аутентификации можно продолжать тестирование приложения. Важно правильно завершить сессию и закрыть браузер:
await page.close();
await browser.close();
page.waitForSelector() или
page.waitForTimeout().
Автоматизация двухфакторной аутентификации с использованием Puppeteer требует внимательности и адаптации под конкретные реалии тестируемого приложения. Важно понимать, как именно работает система 2FA, и подбирать правильные подходы для получения и ввода кода. Puppeteer предоставляет мощные инструменты для взаимодействия с веб-страницами, что позволяет эффективно тестировать приложения с двухфакторной аутентификацией.