Protractor, как инструмент для автоматизированного тестирования веб-приложений на базе Angular и не только, предоставляет удобные механизмы работы с браузерными cookies и сессиями. Правильное управление этими данными критично для обеспечения стабильности тестов, а также для проверки аспектов безопасности приложения.
В Protractor доступ к cookie осуществляется через объект
browser.manage().getCookie(),
browser.manage().addCookie(),
browser.manage().deleteCookie() и другие методы. Основные
моменты:
const myCookie = await browser.manage().getCookie('session_id');
console.log(myCookie.value);
getCookie(name) возвращает объект с информацией о
cookie: name, value, path,
domain, secure, expiry.getCookies() возвращает массив всех cookie, доступных
текущему домену.await browser.manage().addCookie({
name: 'test_cookie',
value: '123456',
path: '/',
secure: true
});
secure: true гарантирует передачу cookie только по
HTTPS.httpOnly в браузерах управляется сервером, но важно
учитывать его наличие при тестировании сессий.await browser.manage().deleteCookie('test_cookie');
await browser.manage().deleteAllCookies();
Сессии веб-приложений чаще всего связаны с cookie (например,
session_id) или с токенами в localStorage/sessionStorage.
Protractor позволяет управлять этими хранилищами:
await browser.executeScript('window.sessionStorage.clear();');
await browser.executeScript('window.localStorage.clear();');
sessionStorage и localStorage
гарантирует независимость тестов и предотвращает “утечку” состояния
между ними.Иногда тесты требуют авторизованного состояния без прохождения UI-логина. Это достигается добавлением нужных cookie или токенов:
await browser.manage().addCookie({ name: 'auth_token', value: 'abcdef12345' });
await browser.get('/dashboard');
secure: true – cookie передается только по HTTPS.httpOnly – cookie недоступно через JavaScript, что
предотвращает XSS-атаки. Для тестов нужно учитывать, что Protractor не
может напрямую модифицировать httpOnly cookie.expiry задает время жизни cookie. Тесты могут
проверять корректное завершение сессии при истечении времени:await browser.manage().addCookie({
name: 'short_lived',
value: 'test',
expiry: Math.floor(Date.now() / 1000) + 5 // истечет через 5 секунд
});
deleteAllCookies() перед каждым тестом
предотвращает межтестовое взаимодействие и повышает надежность
результатов.secure или с
разными доменами.describe('Тестирование сессий', () => {
beforeEach(async () => {
await browser.manage().deleteAllCookies();
await browser.executeScript('window.sessionStorage.clear();');
});
it('должен авторизовать пользователя через cookie', async () => {
await browser.manage().addCookie({ name: 'auth_token', value: 'secure123', secure: true });
await browser.get('/dashboard');
const url = await browser.getCurrentUrl();
expect(url).toContain('/dashboard');
});
it('должен завершать сессию после удаления cookie', async () => {
await browser.manage().addCookie({ name: 'session_id', value: 'abc123' });
await browser.manage().deleteCookie('session_id');
await browser.get('/dashboard');
const url = await browser.getCurrentUrl();
expect(url).toContain('/login');
});
});
Эффективное управление cookie и сессиями позволяет создавать стабильные тесты, проверять авторизацию и безопасность, а также эмулировать различные сценарии пользовательского взаимодействия без риска нарушить работу приложения.