# UserCard - Документация тестов eNODE-Мониторинг

Skip to content

# UserCard

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

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

## `UserCard`

Bases: `BaseComponent`

Компонент карточка.

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

Source code in `components_derived\user_card.py`

     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153

    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"

### `__init__(page)`

Инициализирует компонент карточки.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`page` | `Page` | Экземпляр страницы Playwright. | required

Source code in `components_derived\user_card.py`

    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74

    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)

### `check_card_is_closed()`

Проверяет, что карточка пользователя отсутствует.

Raises:

Type | Description
--- | ---
`AssertionError` | Если карточка пользователя все еще открыта.

Source code in `components_derived\user_card.py`

    145
    146
    147
    148
    149
    150
    151
    152
    153

    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"

### `check_content()`

Проверяет наличие и корректность элементов карточки пользователя в зависимости от его роли в системе.

Source code in `components_derived\user_card.py`

    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143

    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"
        )

### `click_change_password_button()`

Нажимает кнопку открытия окна изменения пароля.

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

Source code in `components_derived\user_card.py`

    77
    78
    79
    80
    81
    82
    83
    84

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

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

        self.change_password_button.click()
        return self.change_password_modal_window

### `click_close_button()`

Нажимает кнопку закрытия окна карточки пользователя.

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

Source code in `components_derived\user_card.py`

     94
     95
     96
     97
     98
     99
    100

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

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

        self.close_button.click()

### `click_logout_button()`

Нажимает кнопку выхода из системы.

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

Source code in `components_derived\user_card.py`

    86
    87
    88
    89
    90
    91
    92

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

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

        self.logout_button.click()