Playwright предоставляет гибкие возможности для тестирования веб-приложений с разными уровнями доступа. Одной из таких возможностей является управление правами доступа на уровне контекста браузера, что позволяет точно имитировать поведение пользователей с различными правами и ограничениями. Это особенно полезно при тестировании приложений с ролевым доступом, а также для проверки безопасности и функциональности пользовательских ролей.
Контексты в Playwright представляют собой независимые экземпляры браузера, которые могут использовать разные куки, хранилища данных, сессии и настройки. Это полезно для изоляции тестов, например, когда нужно проверять взаимодействие с приложением от имени разных пользователей с различными правами доступа.
Создание нового контекста происходит с помощью метода
browser.newContext(). Важно, что каждый контекст может быть
настроен индивидуально, включая установку различных прав доступа,
которые будут ограничивать действия пользователя в рамках теста.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Для работы с правами доступа на уровне контекста можно использовать несколько подходов: от эмуляции ролей до изменения доступных API. Рассмотрим подробнее, как можно управлять правами пользователя в разных сценариях.
Одним из способов управления правами доступа является использование куки-файлов и локального хранилища. Эмуляция роли пользователя часто достигается путём установки специальных значений в этих хранилищах, что позволяет имитировать работу с различными уровнями доступа.
В Playwright для этого можно использовать метод
context.addCookies() для задания нужных cookies, а также
методы для работы с localStorage и
sessionStorage.
Пример эмуляции пользователя с администраторскими правами:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Добавление куки для администратора
await context.addCookies([{
name: 'role',
value: 'admin',
domain: 'example.com',
path: '/',
httpOnly: true
}]);
const page = await context.newPage();
await page.goto('https://example.com/dashboard');
await browser.close();
})();
Этот подход позволяет задать роль пользователя ещё до загрузки страницы, что особенно полезно для тестирования сценариев, в которых доступ к различным разделам приложения ограничен в зависимости от роли.
Playwright также предоставляет возможность имитировать доступ к
различным API и взаимодействовать с ними через
context.route(). Это позволяет перехватывать сетевые
запросы и изменять их поведение, например, для симуляции ошибки доступа
или ограничений на доступ к определённым ресурсам.
Пример создания маршрута для перехвата запросов с API:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Перехват API запросов и возвращение ошибки авторизации
await context.route('**/api/protected-resource', route => {
route.fulfill({
status: 403, // Ошибка доступа
body: JSON.stringify({ error: 'Access Denied' }),
});
});
const page = await context.newPage();
await page.goto('https://example.com/protected');
await browser.close();
})();
С помощью этого подхода можно проверять обработку отказов в доступе и тестировать реакцию интерфейса на такие сценарии.
Часто возникает необходимость протестировать сценарий, в котором один пользователь выполняет действия, доступные только ему, а затем другой пользователь с другими правами пытается сделать то же самое. Playwright позволяет использовать несколько контекстов браузера в одном тесте для эмуляции таких сценариев.
Пример изоляции пользователей с разными правами:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
// Создание контекста для администратора
const adminContext = await browser.newContext();
const adminPage = await adminContext.newPage();
await adminPage.goto('https://example.com/admin-dashboard');
// Создание контекста для обычного пользователя
const userContext = await browser.newContext();
const userPage = await userContext.newPage();
await userPage.goto('https://example.com/user-dashboard');
await browser.close();
})();
Таким образом, можно проводить тесты, где одновременно тестируются разные уровни доступа, и проверяется, как система реагирует на различные типы пользователей.
В Playwright можно ограничить действия пользователя через настройки контекста, такие как геолокация, язык, устройство и сеть. Эти ограничения могут быть использованы не только для тестирования с ограниченными правами доступа, но и для проверки поведения приложения в различных ситуациях.
Например, для эмуляции пользователя в определённом географическом
регионе можно использовать метод
context.setGeolocation():
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Установка геолокации для теста
await context.setGeolocation({ latitude: 37.7749, longitude: -122.4194 }); // Сан-Франциско
const page = await context.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Это позволяет проверить, как система реагирует на запросы из разных регионов с учётом прав доступа, например, для ограниченного контента в определённых странах.
Использование контекстов браузера в Playwright для управления правами доступа является мощным инструментом для тестирования сложных сценариев. Возможность эмуляции ролей пользователей, перехвата сетевых запросов и настройки ограничений на уровне контекста позволяет создавать тесты, которые точно отражают поведение приложения в реальных условиях с разными правами доступа.