# Исходный код components.alert_component

    """Модуль для работы с компонентом alert-окна в Playwright.

    Содержит класс AlertComponent для взаимодействия с различными типами
    alert-окон (error, success, info, warning) и проверки их состояния.
    """

    from playwright.sync_api import Page, expect
    from tools.logger import get_logger
    from locators.alert_locators import AlertLocators
    from elements.text_element import Text
    from components.base_component import BaseComponent

    logger = get_logger("ALERT")

    class AlertComponent(BaseComponent):
        """Компонент для работы с alert-окнами Playwright.

        Поддерживает типы: error, success, info, warning.
        Позволяет проверять наличие, отсутствие и текст сообщений.
        """

        def __init__(self, page: Page) -> None:
            """Инициализирует компонент alert-окна.

            Args:
                page: Экземпляр страницы Playwright.
            """

            super().__init__(page)

            self.text = Text(page, AlertLocators.ALERT_MESSAGE, "Alert message")

        # Действия:

        def close_alert_by_text(self, text: str) -> None:
            """Закрывает alert-окно с заданным текстом с помощью кнопки закрытия.

            Args:
                text: Текст alert-окна, которое нужно закрыть.

            Raises:
                AssertionError: Если не удалось найти или закрыть alert-окно.
            """
            # Находим alert с нужным текстом
            alert_locator = self.page.get_by_role(
                AlertLocators.ALERT_ROLE
            ).filter(has_text=text)

            # Проверяем, что alert видим
            expect(alert_locator).to_be_visible()

            # Находим кнопку закрытия внутри alert
            close_button = alert_locator.locator(AlertLocators.ALERT_DISMISS_BUTTON)

            # Проверяем, что кнопка закрытия доступна и кликаем
            expect(close_button).to_be_visible()
            expect(close_button).to_be_enabled()

            # Кликаем по кнопке закрытия
            close_button.click()

            # Проверяем, что alert исчез после закрытия
            expect(alert_locator).to_be_hidden()

            logger.info(f"Alert with text '{text}' closed successfully")

        def get_alert_type(self) -> str:
            """Возвращает тип alert-окна.

            Returns:
                str: Тип alert-окна.

            Raises:
                ValueError: Если получен неподдерживаемый тип alert-окна.
            """

            class_attr = self.page.get_by_role(AlertLocators.ALERT_ROLE).locator(
                '>div'
            ).get_attribute('class')

            alert_type = None
            if 'v-alert' in class_attr:
                alert_type = class_attr.replace("v-alert ", "")

            alert_types = ["error", "success", "info", "warning"]
            if alert_type not in alert_types:
                raise ValueError("Unsupported type of alert window")

            return alert_type

        def get_text(self) -> str:
            """Возвращает текст сообщения из alert-окна.

            Returns:
                str: Текст сообщения.
            """

            return self.text.get_text(0)

        # Проверки:

        def check_alert_absence(self, text: str, timeout: int = 30000) -> None:
            """Проверяет отсутствие alert-окна с заданным текстом.

            Args:
                text: Текст для проверки.
                timeout: Время ожидания исчезновения (мс).

            Raises:
                AssertionError: Если окно не исчезает в течение заданного времени.
            """

            seconds = int(timeout/1000)
            msg = f"Alert window should disappear after {seconds} seconds"

            if text == "":
                expect(self.page.get_by_role(
                    AlertLocators.ALERT_ROLE
                )).to_be_hidden(timeout=timeout), msg
                logger.info(f"Alert window successfully disappeared")
            else:
                expect(self.page.get_by_role(
                    AlertLocators.ALERT_ROLE
                ).filter(has_text=text)).to_be_hidden(timeout=timeout), msg
                logger.info(f"Alert window with text '{text}' successfully disappeared")

        def check_alert_presence(self, text: str) -> None:
            """Проверяет наличие alert-окна с заданным текстом.

            Args:
                text: Текст для проверки. Если пустая строка - проверяет только
                      наличие окна.

            Raises:
                AssertionError: Если alert-окно не найдено.
            """

            msg = "Alert window is missing"
            if text == "":
                expect(self.page.get_by_role(AlertLocators.ALERT_ROLE)).to_be_visible(), msg
                logger.info(f"Alert window successfully displayed")
            else:
                expect(self.page.get_by_role(
                    AlertLocators.ALERT_ROLE
                ).filter(has_text=text)).to_be_visible(), msg
                logger.info(f"Alert window with text '{text}' successfully displayed")

        def check_text(self, alert_text: str) -> None:
            """Проверяет точное соответствие текста в alert-окне.

            Args:
                alert_text: Ожидаемый текст сообщения.

            Raises:
                AssertionError: Если текст не соответствует ожидаемому.
            """

            self.text.check_have_text(alert_text,
                                      "Unexpected message in alert window")