В Protractor управление cookies является важной частью автоматизации
тестирования веб-приложений. Cookies используются для хранения
пользовательских сессий, настроек и других данных, необходимых для
корректного функционирования веб-сайтов. Protractor предоставляет
удобные методы для работы с cookies через объект
browser.manage().cookies(), который позволяет создавать,
получать, удалять и проверять cookies.
Для получения всех cookies используется метод getAll(),
который возвращает массив объектов, содержащих свойства каждой
cookie:
browser.manage().cookies.getAll().then(function(cookies) {
console.log(cookies);
});
Каждый объект cookie имеет следующие ключевые свойства:
name — имя cookievalue — значение cookiepath — путь, к которому применима cookiedomain — домен, для которого cookie действительнаsecure — флаг безопасности (true, если cookie
передается только по HTTPS)httpOnly — флаг, запрещающий доступ к cookie из
JavaScriptДля получения конкретной cookie используется метод
get(name):
browser.manage().cookies.get('session_id').then(function(cookie) {
console.log(cookie);
});
Если cookie с указанным именем отсутствует, метод возвращает
null.
Добавление cookie выполняется методом add(cookieObj).
Передаваемый объект должен содержать хотя бы name и
value. Дополнительно можно указать path,
domain, secure и expiry (в
секундах с момента UNIX-эпохи):
browser.manage().cookies.add({
name: 'user',
value: 'JohnDoe',
path: '/',
secure: true,
httpOnly: true
});
Добавленные cookies будут активны в текущей сессии браузера. Это удобно для эмуляции авторизации или сохранения пользовательских настроек без необходимости прохождения полной процедуры логина.
Protractor позволяет удалять отдельные cookies или все сразу.
Удаление конкретной cookie:
browser.manage().cookies.delete('user');
Если требуется удалить все cookies:
browser.manage().cookies.deleteAll();
Удаление cookies полезно при тестировании функционала выхода из аккаунта или проверки поведения приложения при отсутствии пользовательских данных.
Проверка наличия cookie может выполняться через
get(name), возвращая null при отсутствии. Для
автоматизации тестов часто используется цепочка методов
then или async/await:
let cookie = await browser.manage().cookies.get('session_id');
if (cookie) {
console.log('Cookie существует');
} else {
console.log('Cookie отсутствует');
}
Асинхронность Все методы работы с cookies
возвращают промисы, что требует использования .then() или
async/await. Это позволяет избежать гонок при работе с
браузером.
Сессии и контексты Cookies привязаны к текущему окну/сессии браузера. Если тест открывает новые вкладки или окна, cookies нужно учитывать отдельно.
HTTPOnly cookies JavaScript не имеет доступа к
cookies с флагом httpOnly. Protractor может работать с
ними, только если браузер получает cookie через HTTP-запрос.
Совместимость с разными браузерами Некоторые
браузеры могут ограничивать доступ к cookies при использовании
определённых протоколов, например file://. Для надежного
тестирования рекомендуется запускать тесты через http://
или https://.
Эмуляция авторизации через cookie:
await browser.manage().cookies.add({
name: 'auth_token',
value: 'abcdef123456',
path: '/',
secure: true
});
await browser.get('https://example.com/dashboard');
Очистка cookies перед тестом:
beforeEach(async () => {
await browser.manage().cookies.deleteAll();
});
Проверка удаления cookie:
await browser.manage().cookies.delete('auth_token');
let cookie = await browser.manage().cookies.get('auth_token');
expect(cookie).toBeNull();
Использование cookies в Protractor позволяет управлять сессиями,
ускорять тестирование авторизации и контролировать состояние приложения
между тестами. Корректное понимание методов get,
add и delete обеспечивает гибкость в
автоматизации и предотвращает непредсказуемое поведение тестов.