Контексты с различными настройками
Playwright предоставляет мощный механизм для создания контекстов браузера, что позволяет тестировать веб-приложения в различных условиях. Контекст браузера — это независимая среда для взаимодействия с веб-страницей, аналогичная отдельной вкладке в браузере. Использование контекстов дает возможность тестировать несколько пользователей, сохранять отдельные сессии и cookies, а также конфигурировать разные настройки для каждого контекста.
Чтобы создать новый контекст в Playwright, используется метод
browser.newContext(). Этот метод позволяет задавать
различные параметры и опции, которые будут применяться только в рамках
этого контекста. Например, можно настроить сессии cookies, локальное
хранилище, данные сессии, а также изменить user-agent или даже язык.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext({
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
locale: 'ru-RU',
viewport: { width: 1280, height: 720 },
// другие настройки
});
const page = await context.newPage();
await page.goto('https://example.com');
// Тестирование...
await browser.close();
})();
В этом примере создается новый контекст с заданным user-agent, локалью и размером экрана. Эти настройки применяются только для этого контекста и не влияют на другие.
Контексты позволяют тестировать несколько пользователей одновременно, используя отдельные сессии и хранилища. Это полезно, например, при тестировании функционала, который зависит от сессии пользователя, таких как авторизация или работа с корзиной покупок.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
// Первый контекст (первый пользователь)
const context1 = await browser.newContext();
const page1 = await context1.newPage();
await page1.goto('https://example.com');
await page1.click('text="Войти"');
// Вход в систему и действия для первого пользователя...
// Второй контекст (второй пользователь)
const context2 = await browser.newContext();
const page2 = await context2.newPage();
await page2.goto('https://example.com');
await page2.click('text="Войти"');
// Вход в систему и действия для второго пользователя...
await browser.close();
})();
В данном примере создаются два контекста для имитации двух пользователей, каждый из которых может авторизоваться и взаимодействовать с веб-приложением независимо от другого.
Каждый контекст в Playwright может содержать свои собственные cookies. Это позволяет имитировать ситуации, когда два пользователя имеют разные настройки cookies, например, один пользователь авторизован, а другой нет.
const { firefox } = require('playwright');
(async () => {
const browser = await firefox.launch();
// Создаем контекст с cookies
const context1 = await browser.newContext({
cookies: [{
name: 'session_id',
value: 'abc123',
domain: 'example.com',
path: '/',
httpOnly: true,
secure: true
}]
});
const page1 = await context1.newPage();
await page1.goto('https://example.com');
// Тестирование с авторизацией...
await browser.close();
})();
Здесь создается контекст с заданным cookie, что позволяет проверить, как приложение ведет себя при наличии определенной сессии.
Playwright позволяет настраивать сетевые запросы в контексте. Это может быть полезно для симуляции различных условий, таких как плохое соединение, задержки в сети или перехват и модификация запросов и ответов.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
// Создаем контекст с настройками сети
const context = await browser.newContext();
await context.setOffline(true); // Оффлайн-режим
const page = await context.newPage();
await page.goto('https://example.com');
// Проверка поведения сайта в оффлайн-режиме
await browser.close();
})();
Кроме того, можно перехватывать и изменять сетевые запросы с помощью
методов route() и on('route').
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
context.on('route', route => {
if (route.request().url().includes('example.com/api')) {
route.fulfill({
status: 200,
body: '{"message": "Success"}'
});
} else {
route.continue();
}
});
const page = await context.newPage();
await page.goto('https://example.com');
// Тестирование с перехваченными запросами
await browser.close();
})();
Playwright также позволяет совмещать контексты с различными настройками для более сложных сценариев тестирования. Например, можно протестировать сценарий, когда один пользователь находится в одном контексте с определенной настройкой, а другой — в другом, с другими параметрами.
const { firefox } = require('playwright');
(async () => {
const browser = await firefox.launch();
// Контекст с cookies для авторизованного пользователя
const context1 = await browser.newContext({
cookies: [{
name: 'session_id',
value: 'abc123',
domain: 'example.com',
path: '/',
httpOnly: true,
secure: true
}]
});
const page1 = await context1.newPage();
await page1.goto('https://example.com');
await page1.click('text="Корзина"');
// Действия для авторизованного пользователя
// Контекст для неавторизованного пользователя
const context2 = await browser.newContext();
const page2 = await context2.newPage();
await page2.goto('https://example.com');
await page2.click('text="Корзина"');
// Действия для неавторизованного пользователя
await browser.close();
})();
Здесь два контекста, с различными состояниями сессий, имитируют два разных пользователя, каждый из которых взаимодействует с корзиной в своем контексте.
Можно настроить контексты с пользовательскими заголовками для имитации различных условий, например, изменения региона или использования прокси-серверов.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
// Контекст с пользовательскими заголовками
const context = await browser.newContext({
extraHTTPHeaders: {
'X-Region': 'EU',
'X-Custom-Header': 'TestValue'
}
});
const page = await context.newPage();
await page.goto('https://example.com');
// Тестирование с пользовательскими заголовками
await browser.close();
})();
Пользовательские заголовки могут быть полезны для проверки различных настроек региональных ограничений или тестирования API с определенными требованиями к заголовкам.
Контексты в Playwright предоставляют гибкий механизм для тестирования различных состояний, конфигураций и сценариев с несколькими пользователями. Настройка контекстов с различными параметрами позволяет эмулировать реальные условия и обеспечивает широкий спектр возможностей для тестирования веб-приложений.