# Исходный код components_derived.user_card

    """Модуль компонента карточки пользователя.

    Содержит класс для работы с карточкой пользователя через Playwright.
    """

    from playwright.sync_api import Page
    from tools.logger import get_logger
    from locators.user_card_locators import UserCardLocators
    from elements.text_element import Text
    from elements.button_element import Button
    from data.roles_dict import roles_dict
    from data.environment import host
    from components.base_component import BaseComponent
    from components_derived.modal_change_password import ChangePasswordModalWindow

    logger = get_logger("USER_CARD")

    class UserCard(BaseComponent):
        """Компонент карточка.

        Предоставляет методы для взаимодействия с элементами карточки.
        """

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

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

            super().__init__(page)

            card_locator = page.locator(UserCardLocators.CARD_USER)

            # Обновленные локаторы согласно новой структуре карточки
            self.current_user_name = Text(
                page,
                card_locator.locator("xpath=/div/div[1]"),  # Изменено с div[2] на div[1]
                "current user name"
            )
            self.current_user_role = Text(
                page,
                card_locator.locator("xpath=/div/div[2]"),  # Изменено с div[3] на div[2]
                "current user role"
            )
            self.login_time = Text(
                page,
                card_locator.locator("xpath=/div/div[3]"),  # Изменено с div[4] на div[3]
                "login time"
            )
            self.session_time = Text(
                page,
                card_locator.locator("xpath=/div/div[4]"),  # Изменено с div[5] на div[4]
                "session time"  # Исправлено имя с "current user name" на "session time"
            )
            self.logout_button = Button(
                page,
                page.get_by_role("button", name="Выйти"),
                "logout button"
            )
            self.change_password_button = Button(
                page,
                page.get_by_role("button", name="Изменить пароль"),
                "change password button"
            )
            self.close_button = Button(
                page,
                page.get_by_role("button", name="Закрыть"),
                "close button"
            )

            # окна, отрываемые после нажатия кнопок
            self.change_password_modal_window = ChangePasswordModalWindow(page)

        # Действия:

        def click_change_password_button(self) -> ChangePasswordModalWindow:
            """Нажимает кнопку открытия окна изменения пароля.

            Выполняет клик по кнопке 'Изменить пароль' в карточке пользователя.
            """

            self.change_password_button.click()
            return self.change_password_modal_window

        def click_logout_button(self) -> None:
            """Нажимает кнопку выхода из системы.

            Выполняет клик по кнопке 'Выйти' в карточке пользователя.
            """

            self.logout_button.click()

        def click_close_button(self) -> None:
            """Нажимает кнопку закрытия окна карточки пользователя.

            Выполняет клик по кнопке 'Закрыть' в карточке пользователя.
            """

            self.close_button.click()

        # Проверки:

        def check_content(self) -> None:
            """Проверяет наличие и корректность элементов карточки пользователя
               в зависимости от его роли в системе."""

            current_user_credential = host.get_current_user_credential()

            name = current_user_credential["login"]
            text_to_check = f"Имя пользователя: {name}"
            self.current_user_name.check_have_text(
                text_to_check,
                f"Expected text {text_to_check} is missing in user card"
            )

            role = roles_dict.get(current_user_credential["role"])
            if role is None:
                assert False, "Unknown user role in current user credential"
            text_to_check = f"Роль: {role}"
            self.current_user_role.check_have_text(
                text_to_check,
                f"Expected text {text_to_check} is missing in user card"
            )

            login_time_str = self.login_time.get_text(0)
            assert login_time_str.find("Время входа:") != -1, (
                "Expected text 'Время входа:' is missing in user card"
            )
            session_time_str = self.session_time.get_text(0)
            assert session_time_str.find("Время сессии:") != -1, (
                "Expected text 'Время сессии:' is missing in user card"
            )

            self.logout_button.check_visibility(
                "Logout button is missing on user card"
            )
            self.change_password_button.check_visibility(
                "Change password button is missing on user card"
            )

            self.close_button.check_visibility(
                "Close button is missing on user card"
            )

        def check_card_is_closed(self) -> None:
            """Проверяет, что карточка пользователя отсутствует.

            Raises:
                AssertionError: Если карточка пользователя все еще открыта.
            """
            card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("xpath=../..")
            class_attr = card_locator.get_attribute('class')
            assert 'menuable__content__active' not in class_attr, "User card should be closed"