WebdriverIO предоставляет гибкие возможности для работы с cookies в процессе автоматизированного тестирования. Куки — это небольшие файлы данных, которые сохраняются в браузере при взаимодействии с веб-страницами. Они могут использоваться для хранения информации о сессии, настроек пользователей или для других целей. Управление куками важно, чтобы тесты были стабильными, воспроизводимыми и независимыми от предыдущих сессий.
WebdriverIO включает методы для работы с куками, позволяя их читать,
создавать, изменять и удалять. Для работы с куками используется объект
browser, который предоставляет несколько API-методов для
управления куками.
Для получения всех куков на текущей странице используется метод
browser.getCookies(). Этот метод возвращает массив
объектов, каждый из которых представляет отдельный cookie.
const cookies = await browser.getCookies();
console.log(cookies);
Результат будет содержать список всех куков, например:
[
{
"name": "session_id",
"value": "1234567890",
"domain": ".example.com",
"path": "/",
"secure": true,
"httpOnly": true,
"sameSite": "Strict"
},
{
"name": "user_preferences",
"value": "{\"theme\":\"dark\"}",
"domain": ".example.com",
"path": "/",
"secure": false,
"httpOnly": false,
"sameSite": "Lax"
}
]
Для добавления нового cookie можно использовать метод
browser.setCookies(). Он принимает объект с параметрами
cookie: имя, значение, домен, путь, срок действия и другие
параметры.
await browser.setCookies({
name: 'user_token',
value: 'abc123xyz',
domain: '.example.com',
path: '/',
secure: true,
httpOnly: true,
sameSite: 'Strict'
});
При добавлении куки необходимо учитывать следующие параметры:
name — имя куки.value — значение куки.domain — домен, к которому относится cookie.path — путь на сервере, к которому относится
cookie.secure — если true, cookie будет
отправляться только через HTTPS.httpOnly — если true, cookie нельзя будет
получить через JavaScript.sameSite — настройка, которая помогает предотвратить
атаки CSRF, ограничивая отправку куки только с запросами с того же
домена.Изменение существующих cookie осуществляется также через метод
browser.setCookies(). При этом важно, что для изменения
cookie нужно указать все параметры, так как WebdriverIO перезаписывает
cookie с указанным именем, если оно уже существует.
await browser.setCookies({
name: 'user_token',
value: 'newTokenValue',
domain: '.example.com'
});
Для удаления cookie используется метод
browser.deleteCookies(), который позволяет удалить один или
несколько cookies. Если необходимо удалить все cookies, можно вызвать
browser.deleteCookies() без параметров.
await browser.deleteCookies('user_token'); // удаляет только user_token
await browser.deleteCookies(); // удаляет все cookies
Для того чтобы проверить наличие конкретного cookie, можно
использовать метод browser.getCookie(), который принимает
имя cookie и возвращает его данные, если оно существует, или
null, если cookie не найдено.
const cookie = await browser.getCookie('session_id');
if (cookie) {
console.log('Cookie найдено:', cookie);
} else {
console.log('Cookie не найдено');
}
Управление куками необходимо для создания изолированных тестов.
Например, если требуется, чтобы каждый тест запускался с новыми cookies,
можно удалить все cookies перед началом теста, используя метод
browser.deleteCookies(). Также можно установить необходимые
cookies, чтобы симулировать определённое состояние пользователя.
beforeEach(async () => {
await browser.deleteCookies(); // удаление всех cookies
await browser.setCookies({ name: 'auth_token', value: 'test_token', domain: '.example.com' });
});
expires в объект cookie, указав срок
действия.await browser.setCookies({
name: 'persistent_cookie',
value: 'some_value',
domain: '.example.com',
expires: Math.floor(Date.now() / 1000) + 3600 // cookie истекает через 1 час
});
Cookies могут использоваться для выполнения специфичных для пользователя тестов, таких как авторизация и управление состоянием сессии. Например, при автоматизированном тестировании веб-приложений можно предварительно установить cookie, имитируя успешную авторизацию пользователя.
beforeEach(async () => {
await browser.setCookies({
name: 'auth_token',
value: 'valid_token',
domain: '.example.com'
});
});
it('Должен загрузить страницу с учётными данными', async () => {
await browser.url('https://example.com/dashboard');
const userProfile = await $('div.profile');
expect(await userProfile.isDisplayed()).toBe(true);
});
Использование cookies позволяет проводить тестирование с конкретным состоянием пользователя, не требуя каждого раза повторной авторизации, что значительно ускоряет процесс тестирования.
WebdriverIO предоставляет полный набор инструментов для работы с cookies. Это включает создание, изменение, удаление и получение cookie, а также возможность управления их параметрами. Управление cookies может существенно улучшить стабильность и предсказуемость тестов, а также сэкономить время на повторных авторизациях или настройках сессий.