Перейти к основному содержимому

Аутентификация

Введение

Playwright выполняет тесты в изолированных средах, называемых контекстами браузера. Эта модель изоляции улучшает воспроизводимость и предотвращает каскадные сбои тестов. Тесты могут загружать существующее аутентифицированное состояние. Это устраняет необходимость аутентификации в каждом тесте и ускоряет выполнение тестов.

Основные концепции

Независимо от выбранной вами стратегии аутентификации, вы, вероятно, будете хранить аутентифицированное состояние браузера в файловой системе.

Мы рекомендуем создать каталог playwright/.auth и добавить его в ваш .gitignore. Ваша процедура аутентификации создаст аутентифицированное состояние браузера и сохранит его в файл в этом каталоге playwright/.auth. Впоследствии тесты будут повторно использовать это состояние и начинать уже аутентифицированными.

mkdir -p playwright/.auth
echo $'\nplaywright/.auth' >> .gitignore

Вход в систему перед каждым тестом

API Playwright может автоматизировать взаимодействие с формой входа.

Следующий пример выполняет вход в GitHub. После выполнения этих шагов контекст браузера будет аутентифицирован.

page = context.new_page()
page.goto('https://github.com/login')

# Взаимодействие с формой входа
page.get_by_label("Username or email address").fill("username")
page.get_by_label("Password").fill("password")
page.get_by_role("button", name="Sign in").click()
# Продолжение теста

Повторный вход в систему для каждого теста может замедлить выполнение тестов. Чтобы этого избежать, повторно используйте существующее аутентифицированное состояние.

Повторное использование аутентифицированного состояния

Playwright предоставляет способ повторного использования аутентифицированного состояния в тестах. Таким образом, вы можете войти в систему только один раз, а затем пропустить шаг входа для всех тестов.

Веб-приложения используют аутентификацию на основе cookies или токенов, где аутентифицированное состояние хранится в виде cookies, в локальном хранилище или в IndexedDB. Playwright предоставляет метод browser_context.storage_state(), который можно использовать для получения состояния хранилища из аутентифицированных контекстов, а затем создания новых контекстов с предварительно заполненным состоянием.

Состояние cookies, локального хранилища и IndexedDB может использоваться в разных браузерах. Они зависят от модели аутентификации вашего приложения, которая может требовать некоторой комбинации cookies, локального хранилища или IndexedDB.

Следующий фрагмент кода получает состояние из аутентифицированного контекста и создает новый контекст с этим состоянием.

# Сохранение состояния хранилища в файл.
storage = context.storage_state(path="state.json")

# Создание нового контекста с сохраненным состоянием хранилища.
context = browser.new_context(storage_state="state.json")

Продвинутые сценарии

Хранилище сессий

Повторное использование аутентифицированного состояния охватывает аутентификацию на основе cookies, локального хранилища и IndexedDB. Редко хранилище сессий используется для хранения информации, связанной с аутентифицированным состоянием. Хранилище сессий специфично для определенного домена и не сохраняется между загрузками страниц. Playwright не предоставляет API для сохранения хранилища сессий, но следующий фрагмент кода может быть использован для сохранения/загрузки хранилища сессий.

import os
# Получение хранилища сессий и сохранение в переменную окружения
session_storage = page.evaluate("() => JSON.stringify(sessionStorage)")
os.environ["SESSION_STORAGE"] = session_storage

# Установка хранилища сессий в новом контексте
session_storage = os.environ["SESSION_STORAGE"]
context.add_init_script("""(storage => {
if (window.location.hostname === 'example.com') {
const entries = JSON.parse(storage)
for (const [key, value] of Object.entries(entries)) {
window.sessionStorage.setItem(key, value)
}
}
})('""" + session_storage + "')")