Skip to content

# UserSettingsDialogWindow

Модуль диалогового окна просмотра сессионных данных пользователя.

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

## `UserSettingsDialogWindow`

Bases: `BaseComponent`

Компонент диалоговое окно просмотра сессионных данных пользователя.

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

Source code in `components_derived\dialog_user_settings.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
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    class UserSettingsDialogWindow(BaseComponent):
        """Компонент диалоговое окно просмотра сессионных данных пользователя.

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

        def __init__(self, page: Page):
            """Инициализирует компонент диалоговое окно просмотра сессионных данных пользовател.

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

            super().__init__(page)

            dialog_window_locator = page.locator(UserCardLocators.DIALOG_USER_SETTINGS)

            self.dialog_window_title = Text(page,
                                            dialog_window_locator.\
                                            locator(UserCardLocators.TITLE_DIALOG_USER_SETTINGS),
                                            "dialog window title")
            self.close_button = Button(page,
                                       dialog_window_locator.\
                                       locator(UserCardLocators.HEADER_DIALOG_USER_SETTINGS). \
                                       get_by_role("button"),
                                       "close button")

            self.user_settings_table = TableComponent(page)

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

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

            self.close_button.click()

        def get_delete_button_from_row(self, row_index: int) -> TooltipButton:
            """Возвращает кнопку удаления сеанса для указанной строки.

            Args:
                row_index: Индекс строки в таблице.

            Returns:
                TooltipButton: Кнопка с подсказкой.

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

            row_locator = self.user_settings_table.get_row_locator(
                UserCardLocators.TABLE_WORK_AREA,
                row_index
            )
            assert isinstance(row_locator, Locator), f"Row with index {row_index} is missing"

            button_locator = row_locator.get_by_role("button")
            return TooltipButton(self.page, button_locator, "delete_button")

        # Проверки:
        def check_content(self) -> None:
            """Проверяет содержимое окно просмотра сессионных данных пользователя."""

            self.dialog_window_title.check_have_text("Настройки", \
                                                     "Title 'Настройки' is missing on user settings window top")
            self.close_button.check_visibility("Close button is missing on user settings window top")

            self.should_be_user_settings_table()
            self.check_user_settings_table_content()

        def check_window_absence(self) -> None:
            """Проверка отсутствия окна на странице.

            Raises:
                AssertionError: если окнo присутствует на странице.
            """

            self.check_absence(UserCardLocators.DIALOG_USER_SETTINGS, \
                               "User settings dialog window is present")

        def check_window_visibility(self) -> None:
            """Проверка видимости окна на странице.

            Raises:
                AssertionError: если окнo отсутствует на странице.
            """

            self.check_visibility(UserCardLocators.DIALOG_USER_SETTINGS, \
                                  "User settings dialog window is missing")

        def check_user_settings_table_content(self) -> None:
            """Проверяет содержимое таблицы сессионных данных пользователя.

            Raises:
                AssertionError: Если таблица пуста или заголовки неверны.
            """

            expected_headers = [
                'ПОЛЬЗОВАТЕЛЬ',
                'IP АДРЕС',
                'ВРЕМЯ НАЧАЛА СЕССИИ',
                'ДЕЙСТВИЯ'
            ]

            table_content = self.user_settings_table.read(UserCardLocators.TABLE_WORK_AREA)
            len_table_content = len(table_content)

            if len_table_content == 0:
                assert False, "The contents of the table are missing"

            actual_headers = table_content[0]

            assert actual_headers == expected_headers,\
                   f"Expected table headers {expected_headers} are not equal {actual_headers}"

            if len_table_content == 1:
                assert False, "Table body is missing"

            for index in range(len_table_content - 1):
                self.should_be_delete_button_on_user_settings_table_row(index, "Удалить")

        def should_be_user_settings_table(self) -> None:
            """Проверяет наличие таблицы сессионных данных пользователя.

            Raises:
                AssertionError: Если таблица отсутствует.
            """

            self.user_settings_table.check_visibility(
                                UserCardLocators.TABLE_WORK_AREA,
                                "User settings table is missing")

        def should_be_delete_button_on_user_settings_table_row(self,
                                                                    row_index: int,
                                                                    tooltip: str
                                                                   ) -> None:
            """Проверяет наличие кнопки удаления в строке таблицы.

            Args:
                row_index: Индекс проверяемой строки.
                tooltip: Ожидаемый текст подсказки.

            Raises:
                AssertionError: Если кнопка отсутствует или подсказка неверна.
            """

            delete_button = self.get_delete_button_from_row(row_index)

            # Ожидаем исчезновения предыдущих подсказок перед проверкой
            delete_button.wait_for_tooltip_to_disappear()

            delete_button.check_visibility(
                f"Delete session button is missing on {row_index} row"
            )
            delete_button.check_tooltip_with_text(tooltip)

            # Ожидаем исчезновения подсказки после проверки
            delete_button.wait_for_tooltip_to_disappear()

### `__init__(page)`

Инициализирует компонент диалоговое окно просмотра сессионных данных пользовател.

Parameters:

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

Source code in `components_derived\dialog_user_settings.py`

    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    def __init__(self, page: Page):
        """Инициализирует компонент диалоговое окно просмотра сессионных данных пользовател.

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

        super().__init__(page)

        dialog_window_locator = page.locator(UserCardLocators.DIALOG_USER_SETTINGS)

        self.dialog_window_title = Text(page,
                                        dialog_window_locator.\
                                        locator(UserCardLocators.TITLE_DIALOG_USER_SETTINGS),
                                        "dialog window title")
        self.close_button = Button(page,
                                   dialog_window_locator.\
                                   locator(UserCardLocators.HEADER_DIALOG_USER_SETTINGS). \
                                   get_by_role("button"),
                                   "close button")

        self.user_settings_table = TableComponent(page)

### `check_content()`

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

Source code in `components_derived\dialog_user_settings.py`

    81
    82
    83
    84
    85
    86
    87
    88
    89
    def check_content(self) -> None:
        """Проверяет содержимое окно просмотра сессионных данных пользователя."""

        self.dialog_window_title.check_have_text("Настройки", \
                                                 "Title 'Настройки' is missing on user settings window top")
        self.close_button.check_visibility("Close button is missing on user settings window top")

        self.should_be_user_settings_table()
        self.check_user_settings_table_content()

### `check_user_settings_table_content()`

Проверяет содержимое таблицы сессионных данных пользователя.

Raises:

Type | Description
--- | ---
`AssertionError` | Если таблица пуста или заголовки неверны.

Source code in `components_derived\dialog_user_settings.py`

    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
    def check_user_settings_table_content(self) -> None:
        """Проверяет содержимое таблицы сессионных данных пользователя.

        Raises:
            AssertionError: Если таблица пуста или заголовки неверны.
        """

        expected_headers = [
            'ПОЛЬЗОВАТЕЛЬ',
            'IP АДРЕС',
            'ВРЕМЯ НАЧАЛА СЕССИИ',
            'ДЕЙСТВИЯ'
        ]

        table_content = self.user_settings_table.read(UserCardLocators.TABLE_WORK_AREA)
        len_table_content = len(table_content)

        if len_table_content == 0:
            assert False, "The contents of the table are missing"

        actual_headers = table_content[0]

        assert actual_headers == expected_headers,\
               f"Expected table headers {expected_headers} are not equal {actual_headers}"

        if len_table_content == 1:
            assert False, "Table body is missing"

        for index in range(len_table_content - 1):
            self.should_be_delete_button_on_user_settings_table_row(index, "Удалить")

### `check_window_absence()`

Проверка отсутствия окна на странице.

Raises:

Type | Description
--- | ---
`AssertionError` | если окнo присутствует на странице.

Source code in `components_derived\dialog_user_settings.py`

    91
    92
    93
    94
    95
    96
    97
    98
    99
    def check_window_absence(self) -> None:
        """Проверка отсутствия окна на странице.

        Raises:
            AssertionError: если окнo присутствует на странице.
        """

        self.check_absence(UserCardLocators.DIALOG_USER_SETTINGS, \
                           "User settings dialog window is present")

### `check_window_visibility()`

Проверка видимости окна на странице.

Raises:

Type | Description
--- | ---
`AssertionError` | если окнo отсутствует на странице.

Source code in `components_derived\dialog_user_settings.py`

    101
    102
    103
    104
    105
    106
    107
    108
    109
    def check_window_visibility(self) -> None:
        """Проверка видимости окна на странице.

        Raises:
            AssertionError: если окнo отсутствует на странице.
        """

        self.check_visibility(UserCardLocators.DIALOG_USER_SETTINGS, \
                              "User settings dialog window is missing")

### `click_close_button()`

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

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

Source code in `components_derived\dialog_user_settings.py`

    50
    51
    52
    53
    54
    55
    56
    def click_close_button(self):
        """Нажимает кнопку закрытия окна.

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

        self.close_button.click()

### `get_delete_button_from_row(row_index)`

Возвращает кнопку удаления сеанса для указанной строки.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`row_index` | `int` | Индекс строки в таблице. | required

Returns:

Name | Type | Description
--- | --- | ---
`TooltipButton` | `TooltipButton` | Кнопка с подсказкой.

Raises:

Type | Description
--- | ---
`AssertionError` | Если строка не найдена.

Source code in `components_derived\dialog_user_settings.py`

    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    def get_delete_button_from_row(self, row_index: int) -> TooltipButton:
        """Возвращает кнопку удаления сеанса для указанной строки.

        Args:
            row_index: Индекс строки в таблице.

        Returns:
            TooltipButton: Кнопка с подсказкой.

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

        row_locator = self.user_settings_table.get_row_locator(
            UserCardLocators.TABLE_WORK_AREA,
            row_index
        )
        assert isinstance(row_locator, Locator), f"Row with index {row_index} is missing"

        button_locator = row_locator.get_by_role("button")
        return TooltipButton(self.page, button_locator, "delete_button")

### `should_be_delete_button_on_user_settings_table_row(row_index, tooltip)`

Проверяет наличие кнопки удаления в строке таблицы.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`row_index` | `int` | Индекс проверяемой строки. | required
`tooltip` | `str` | Ожидаемый текст подсказки. | required

Raises:

Type | Description
--- | ---
`AssertionError` | Если кнопка отсутствует или подсказка неверна.

Source code in `components_derived\dialog_user_settings.py`

    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    def should_be_delete_button_on_user_settings_table_row(self,
                                                                row_index: int,
                                                                tooltip: str
                                                               ) -> None:
        """Проверяет наличие кнопки удаления в строке таблицы.

        Args:
            row_index: Индекс проверяемой строки.
            tooltip: Ожидаемый текст подсказки.

        Raises:
            AssertionError: Если кнопка отсутствует или подсказка неверна.
        """

        delete_button = self.get_delete_button_from_row(row_index)

        # Ожидаем исчезновения предыдущих подсказок перед проверкой
        delete_button.wait_for_tooltip_to_disappear()

        delete_button.check_visibility(
            f"Delete session button is missing on {row_index} row"
        )
        delete_button.check_tooltip_with_text(tooltip)

        # Ожидаем исчезновения подсказки после проверки
        delete_button.wait_for_tooltip_to_disappear()

### `should_be_user_settings_table()`

Проверяет наличие таблицы сессионных данных пользователя.

Raises:

Type | Description
--- | ---
`AssertionError` | Если таблица отсутствует.

Source code in `components_derived\dialog_user_settings.py`

    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    def should_be_user_settings_table(self) -> None:
        """Проверяет наличие таблицы сессионных данных пользователя.

        Raises:
            AssertionError: Если таблица отсутствует.
        """

        self.user_settings_table.check_visibility(
                            UserCardLocators.TABLE_WORK_AREA,
                            "User settings table is missing")