Skip to content

# UserCard

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

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

## `UserCard`

Bases: `BaseComponent`

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

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

Source code in `components_derived\user_card.py`

     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
    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[2]"),
                                          "current user name")
            self.current_user_role = Text(page,
                                          card_locator.locator("xpath=/div/div[3]"),
                                          "current user role")
            self.login_time = Text(page,
                                   card_locator.locator("xpath=/div/div[4]"),
                                   "login time")
            self.session_time = Text(page,
                                     card_locator.locator("xpath=/div/div[5]"),
                                     "current user name")
            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.settings_button = Button(
                page,
                page.get_by_role("button", name="Настройки"),
                "settings button"
            )

            # self.close_button = Button(
            #     page,
            #     page.get_by_role("button", name="Закрыть"),
            #     "close button"
            # )

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

        # Действия:
        # def click_close_button(self):
        #     """Нажимает кнопку выхода из карточки пользователя.

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

        #     self.close_button.click()

        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_settings_button(self) -> UserSettingsDialogWindow:
            """Нажимает кнопку открытия окна пользовательских сессий.

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

            self.settings_button.click()
            return self.user_settings_dialog_window

        # Проверки:
        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")

            admin_roles = ["Администратор",
                           "Специалист информационной безопасности"]
            if role in admin_roles:
                self.settings_button.check_visibility("Settings button is missing on user card")

### `__init__(page)`

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

Parameters:

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

Source code in `components_derived\user_card.py`

    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
    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[2]"),
                                      "current user name")
        self.current_user_role = Text(page,
                                      card_locator.locator("xpath=/div/div[3]"),
                                      "current user role")
        self.login_time = Text(page,
                               card_locator.locator("xpath=/div/div[4]"),
                               "login time")
        self.session_time = Text(page,
                                 card_locator.locator("xpath=/div/div[5]"),
                                 "current user name")
        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.settings_button = Button(
            page,
            page.get_by_role("button", name="Настройки"),
            "settings button"
        )

        # self.close_button = Button(
        #     page,
        #     page.get_by_role("button", name="Закрыть"),
        #     "close button"
        # )

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

### `check_content()`

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

Source code in `components_derived\user_card.py`

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

        admin_roles = ["Администратор",
                       "Специалист информационной безопасности"]
        if role in admin_roles:
            self.settings_button.check_visibility("Settings button is missing on user card")

### `click_change_password_button()`

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

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

Source code in `components_derived\user_card.py`

    84
    85
    86
    87
    88
    89
    90
    91
    def click_change_password_button(self) -> ChangePasswordModalWindow:
        """Нажимает кнопку открытия окна изменения пароля.

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

        self.change_password_button.click()
        return self.change_password_modal_window

### `click_logout_button()`

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

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

Source code in `components_derived\user_card.py`

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

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

        self.logout_button.click()

### `click_settings_button()`

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

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

Source code in `components_derived\user_card.py`

    101
    102
    103
    104
    105
    106
    107
    108
    def click_settings_button(self) -> UserSettingsDialogWindow:
        """Нажимает кнопку открытия окна пользовательских сессий.

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

        self.settings_button.click()
        return self.user_settings_dialog_window