diff --git a/components_derived/dialog_user_settings.py b/components_derived/dialog_user_settings.py deleted file mode 100644 index 9363d4e..0000000 --- a/components_derived/dialog_user_settings.py +++ /dev/null @@ -1,180 +0,0 @@ -"""Модуль диалогового окна просмотра сессионных данных пользователя. - -Содержит класс для работы с диалоговым окном просмотра -сессионных данных пользователя через Playwright. -""" - -from playwright.sync_api import Page, Locator -from tools.logger import get_logger -from locators.user_card_locators import UserCardLocators -from elements.tooltip_button_element import TooltipButton -from elements.text_element import Text -from elements.button_element import Button -from components.table_component import TableComponent -from components.base_component import BaseComponent - -logger = get_logger("USER_SETTINGS_DIALOG") - - -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() diff --git a/components_derived/user_card.py b/components_derived/user_card.py index ce00123..6deda43 100644 --- a/components_derived/user_card.py +++ b/components_derived/user_card.py @@ -12,7 +12,6 @@ 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 -from components_derived.dialog_user_settings import UserSettingsDialogWindow logger = get_logger("USER_CARD") @@ -65,14 +64,13 @@ class UserCard(BaseComponent): page.get_by_role("button", name="Изменить пароль"), "change password button" ) - self.settings_button = Button( + self.close_button = Button( page, - page.get_by_role("button", name="Настройки"), - "settings button" + page.get_by_role("button", name="Закрыть"), + "close button" ) # окна, отрываемые после нажатия кнопок - self.user_settings_dialog_window = UserSettingsDialogWindow(page) self.change_password_modal_window = ChangePasswordModalWindow(page) # Действия: @@ -93,14 +91,13 @@ class UserCard(BaseComponent): self.logout_button.click() - def click_settings_button(self) -> UserSettingsDialogWindow: - """Нажимает кнопку открытия окна пользовательских сессий. + def click_close_button(self) -> None: + """Нажимает кнопку закрытия окна карточки пользователя. - Выполняет клик по кнопке 'Настройки' в карточке пользователя. + Выполняет клик по кнопке 'Закрыть' в карточке пользователя. """ - self.settings_button.click() - return self.user_settings_dialog_window + self.close_button.click() # Проверки: def check_content(self) -> None: @@ -141,8 +138,16 @@ class UserCard(BaseComponent): "Change password 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" - ) + 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" diff --git a/tests/e2e/users/test_user_card.py b/tests/e2e/users/test_user_card.py index cca7d2b..304912f 100644 --- a/tests/e2e/users/test_user_card.py +++ b/tests/e2e/users/test_user_card.py @@ -18,8 +18,8 @@ class TestUserCard: Тесты покрывают следующие сценарии: 1. test_user_card_content: Проверяет содержимое карточки пользователя - 2. test_open_close_user_settings_window: Проверяет возможность открытия и закрытия диалогового окна просмотра сессионных данных пользователя - 3. test_user_settings_window_content: Проверяет наличие и корректность элементов диалогового окна просмотра сессионных данных пользователя + 2. test_logout_button: Проверяет выход из приложения при нажатии кнопки 'Выйти' и переход на страницу login + 3. test_close_button: Проверяет закрытие карточки пользователя при нажатии на кнопку 'Закрыть' 4. test_change_password_window_content: Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя 5. test_change_password_successful: Проверяет успешное изменение пароля текущего пользователя 6. test_change_password_unsuccessful: Проверяет неуспешное изменение пароля текущего пользователя @@ -42,7 +42,7 @@ class TestUserCard: mp.click_main_navigation_panel_item("Настройки") mp.click_subpanel_item("Пользователи") browser.wait_for_timeout(500) - + ut.open_add_user_window() ut.add_new_user(user_data) @@ -96,8 +96,9 @@ class TestUserCard: user_card = mp.click_user_button() user_card.check_content() - def test_open_close_user_settings_window(self, browser: Page) -> None: - """Проверяет возможность открытия и закрытия диалогового окна просмотра сеанса данных пользователя. + # @pytest.mark.develop + def test_logout_button(self, browser: Page) -> None: + """Проверяет выход из приложения при нажатии кнопки 'Выйти' и переход на страницу login. Args: browser: Экземпляр страницы Playwright. @@ -109,14 +110,16 @@ class TestUserCard: mp = MainPage(browser) user_card = mp.click_user_button() - user_settings_window = user_card.click_settings_button() + mp.wait_for_timeout(300) - user_settings_window.check_window_visibility() - user_settings_window.click_close_button() - user_settings_window.check_window_absence() + user_card.click_logout_button() - def test_user_settings_window_content(self, browser: Page) -> None: - """Проверяет наличие и корректность элементов диалогового окна просмотра сеанса данных пользователя. + new_lp = LoginPage(browser) + new_lp.check_URL('login', "Login page should be opened") + + # @pytest.mark.develop + def test_close_button(self, browser: Page) -> None: + """Проверяет закрытие карточки пользователя при нажатии на кнопку 'Закрыть'. Args: browser: Экземпляр страницы Playwright. @@ -128,10 +131,10 @@ class TestUserCard: mp = MainPage(browser) user_card = mp.click_user_button() - user_settings_window = user_card.click_settings_button() + mp.wait_for_timeout(300) - user_settings_window.check_window_visibility() - user_settings_window.check_content() + user_card.click_close_button() + user_card.check_card_is_closed() def test_change_password_window_content(self, browser: Page) -> None: """Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя.