import os import pytest from dotenv import load_dotenv from playwright.sync_api import Page # Загружаем переменные из .env (файл находится в корне проекта) load_dotenv() # Базовый URL портала — берётся из .env или дефолт BASE_URL = os.getenv("BASE_URL", "https://vet.goznak.ru") # Словарь с учетными данными для разных ролей — берутся из .env CREDENTIALS = { "vetdept": { "login": os.getenv("VETDEPT_LOGIN"), "password": os.getenv("VETDEPT_PASSWORD"), }, "vetstation": { "login": os.getenv("VETSTATION_LOGIN"), "password": os.getenv("VETSTATION_PASSWORD"), }, "prefecture": { "login": os.getenv("PREFECTURE_LOGIN"), "password": os.getenv("PREFECTURE_PASSWORD"), }, } @pytest.fixture(scope="function") def role_page(page: Page, request): """ Фикстура, которая определяет роль теста и автоматически авторизует пользователя. Учётные данные загружаются из файла .env (не хранятся в коде). """ role = None for marker in request.node.iter_markers(): if marker.name in CREDENTIALS: role = marker.name break # Если маркер не найден, честно говорим об этом (вместо молчаливого NameError) if role is None: pytest.fail("ОШИБКА: У теста нет маркера роли (например, @pytest.mark.vetstation)!") creds = CREDENTIALS[role] # Проверяем что .env заполнен if not creds["login"] or not creds["password"]: pytest.fail( f"ОШИБКА: Переменные окружения для роли '{role}' не заданы. " f"Скопируй .env.example в .env и заполни данные." ) print(f"\n[АВТОЛОГИН] Выполняется вход под ролью: {role}") page.goto(BASE_URL) page.get_by_role("textbox", name="Email").fill(creds["login"]) page.get_by_role("textbox", name="Введите пароль").fill(creds["password"]) page.get_by_role("button", name="Войти в аккаунт").click() page.wait_for_selector("#app", timeout=10000) yield page page.context.clear_cookies()