diff --git a/components/eventbar_component.py b/components/eventbar_component.py index d26a22f..266017f 100644 --- a/components/eventbar_component.py +++ b/components/eventbar_component.py @@ -28,13 +28,22 @@ class EventPanelComponent(BaseComponent): self.states_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_STATES), "states_tab") self.actions_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_ACTIONS), "actions_tab") self.events_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_EVENTS), "events_tab") - self.maintenance_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab") + self.maintenance_tab = TabButton(page, + self.page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab") self.system_log_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_SYSTEM_LOG), "system_log_tab") - self.unknown_reason_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0), "unknown_reason_button") - self.warning_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1), "warning_button") - self.damage_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2), "damage_button") - self.failure_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3), "failure_button") + self.unknown_reason_button = TooltipButton(page, + self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0), + "unknown_reason_button") + self.warning_button = TooltipButton(page, + self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1), + "warning_button") + self.damage_button = TooltipButton(page, + self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2), + "damage_button") + self.failure_button = TooltipButton(page, + self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3), + "failure_button") buttons_service_locators = self.page.locator(EventPanelLocators.BUTTONS_SERVICE).get_by_role("button").all() self.search_button = Button(page, buttons_service_locators[0], "search_button") @@ -53,7 +62,7 @@ class EventPanelComponent(BaseComponent): button_locator = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\ get_by_role("button").filter(has_text='expand_more') - button_locator.click() + button_locator.click(force=True) def click_system_log_tab(self) -> SystemLogEventsContainer: """Выполняет нажатие tab-кнопки Системный журнал.""" @@ -68,7 +77,7 @@ class EventPanelComponent(BaseComponent): """Выполняет нажатие кнопки пользователя.""" self.should_be_user_button() - self.user_button.click() + self.user_button.click(force=True) user_card = UserCard(self.page) return user_card @@ -155,8 +164,10 @@ class EventPanelComponent(BaseComponent): self.states_tab.check_have_text('Состояния', "Tab button with text Состояния is missing on event panel") self.actions_tab.check_have_text('Действия',"Tab button with text Действия is missing on event panel") self.events_tab.check_have_text('События', "Tab button with text События is missing on event panel") - self.maintenance_tab.check_have_text('Обслуживание', "Tab button with text Обслуживание is missing on event panel") - self.system_log_tab.check_have_text('Системный журнал', "Tab button with text Системный журнал is missing on event panel") + self.maintenance_tab.check_have_text('Обслуживание', + "Tab button with text Обслуживание is missing on event panel") + self.system_log_tab.check_have_text('Системный журнал', + "Tab button with text Системный журнал is missing on event panel") def should_be_event_buttons(self) -> None: """Проверяет наличие блока кнопок-счетчиков событий.""" diff --git a/components_derived/modal_add_local_user.py b/components_derived/modal_add_local_user.py index 80c8178..fd04d28 100644 --- a/components_derived/modal_add_local_user.py +++ b/components_derived/modal_add_local_user.py @@ -39,7 +39,6 @@ class AddLocalUserModalWindow(ModalWindowComponent): # Локаторы элементов формы text_field_locator = ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA - label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA # Настройка заголовка и кнопки закрытия тулбара self.window_title = "Добавить нового пользователя" @@ -52,42 +51,30 @@ class AddLocalUserModalWindow(ModalWindowComponent): self.add_toolbar_title(self.window_title) self.add_toolbar_button(locator_button_toolbar_close, "close") - # Добавление элементов формы по порядку расположения в окне - checkbox_1 = Checkbox( - page, - self.page.locator(input_form_locator).get_by_role("checkbox").nth(0), - "active_directory" - ) - - self.add_content_item("active_directory_checkbox", checkbox_1) - - label_1 = Text( - page, - self.page.locator(label_locator).nth(0), - "active_directory_checkbox_label" - ) - self.add_content_item("active_directory_checkbox_label", label_1) - # Поле Имя - loc = f"{input_form_locator}/div[2]/{text_field_locator}" + loc = f"{input_form_locator}/div[1]/{text_field_locator}" name_input = TextInput(page, self.page.locator(loc), "name_input") self.add_content_item("name_input", name_input) - # Чекбокс "Блокировка" - индекс 1 - checkbox_2 = Checkbox( - page, - self.page.locator(input_form_locator).get_by_role("checkbox").nth(1), - "blocking" - ) - self.add_content_item("blocking_checkbox", checkbox_2) - # Метка "Блокировка" - индекс 1 - label_2 = Text( + # Метка "Блокировка" + label_blocking_locator = self.page.locator(input_form_locator). \ + locator("//label").get_by_text("Блокировка") + label_blocking = Text( page, - self.page.locator(label_locator).nth(1), + label_blocking_locator, "blocking_checkbox_label" ) - self.add_content_item("blocking_checkbox_label", label_2) + + self.add_content_item("blocking_checkbox_label", label_blocking) + + # Чекбокс "Блокировка" + checkbox_blocking = Checkbox( + page, + label_blocking_locator.locator("../..").get_by_role("checkbox"), + "blocking" + ) + self.add_content_item("blocking_checkbox", checkbox_blocking) # Поле Роль role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0) @@ -96,41 +83,42 @@ class AddLocalUserModalWindow(ModalWindowComponent): self.add_content_item("roles_list", DropdownList(page)) # Поле Пароль - loc = f"{input_form_locator}/div[5]/{text_field_locator}" + loc = f"{input_form_locator}/div[4]/{text_field_locator}" password_input = TextInput(page, self.page.locator(loc), "password_input") self.add_content_item("password_input", password_input) # Поле Комментарий - loc = f"{input_form_locator}/div[6]/{text_field_locator}" + loc = f"{input_form_locator}/div[5]/{text_field_locator}" commentary_input = TextInput(page, self.page.locator(loc), "commentary_input") self.add_content_item("commentary_input", commentary_input) # Поле E-mail - loc = f"{input_form_locator}/div[7]/{text_field_locator}" + loc = f"{input_form_locator}/div[6]/{text_field_locator}" email_input = TextInput(page, self.page.locator(loc), "email_input") self.add_content_item("email_input", email_input) # Поле Номер для СМС - loc = f"{input_form_locator}/div[8]/{text_field_locator}" + loc = f"{input_form_locator}/div[7]/{text_field_locator}" phone_input = TextInput(page, self.page.locator(loc), "phone_input") self.add_content_item("phone_input", phone_input) - # Чекбокс "Подписка на Push-уведомления" - индекс 2 - checkbox_3 = Checkbox( + # Метка "Подписка на Push-уведомления" + label_push_locator = self.page.locator(input_form_locator). \ + locator("//label").get_by_text("Подписка на Push-уведомления") + label_push = Text( page, - self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA) - .get_by_role("checkbox").nth(2), - "push_notification" - ) - self.add_content_item("push_notification_checkbox", checkbox_3) - - # Метка "Подписка на Push-уведомления" - индекс 2 - label_3 = Text( - page, - self.page.locator(label_locator).nth(2), + label_push_locator, "push_notification_checkbox_label" ) - self.add_content_item("push_notification_checkbox_label", label_3) + self.add_content_item("push_notification_checkbox_label", label_push) + + # Чекбокс "Подписка на Push-уведомления" - индекс 2 + checkbox_push = Checkbox( + page, + label_push_locator.locator("../..").get_by_role("checkbox"), + "push_notification" + ) + self.add_content_item("push_notification_checkbox", checkbox_push) # Добавление кнопок действий locator_button_add = self.page.get_by_role("button", name="Добавить") @@ -143,16 +131,6 @@ class AddLocalUserModalWindow(ModalWindowComponent): self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ") # Действия: - def check_active_directory_checkbox(self): - """Включает чек-бокс Active Directory.""" - - self.get_content_item("active_directory_checkbox").check(force=True) - - def uncheck_active_directory_checkbox(self): - """Выключает чек-бокс Active Directory.""" - - self.get_content_item("active_directory_checkbox").uncheck(force=True) - def check_blocking_checkbox(self): """Включает чек-бокс Блокировка.""" @@ -255,28 +233,16 @@ class AddLocalUserModalWindow(ModalWindowComponent): self.check_by_window_title() - is_checked = self.get_content_item("active_directory_checkbox").is_checked() - if is_checked: - assert False, ( - "The checkbox 'Active Directory' should not be checked for " - "the add local user window" - ) - self.check_toolbar_button_visibility("close") self.check_toolbar_button_tooltip("close", "Закрыть") - + input_fields = ["name_input", "password_input", "commentary_input", "email_input", "phone_input"] for name in self.content_items: item = self.get_content_item(name) - if name == "active_directory_checkbox_label": - item.check_have_text( - "Active Directory", - "Label 'Active Directory' is missing" - ) - elif name == "blocking_checkbox_label": + if name == "blocking_checkbox_label": item.check_have_text( "Блокировка", "Label 'Блокировка' is missing" diff --git a/elements/base_element.py b/elements/base_element.py index fd06eed..8ce5126 100644 --- a/elements/base_element.py +++ b/elements/base_element.py @@ -43,11 +43,14 @@ class BaseElement: return "base element" # Действия: - def click(self) -> None: + def click(self, force=False) -> None: """Выполняет клик по элементу.""" logger.info(f"Clicking {self.type_of} '{self.name}'") - self.locator.click() + if force: + self.locator.click(force=True) + else: + self.locator.click() def get_text(self, index: int) -> str: """Возвращает текст элемента по указанному индексу.""" diff --git a/pages/users_tab.py b/pages/users_tab.py index 76c2d6f..dd4ab56 100644 --- a/pages/users_tab.py +++ b/pages/users_tab.py @@ -87,11 +87,12 @@ class UsersTab(BasePage): add_user_window = self.get_modal_window("add_local_user") - auth_type = user_data.get("auth_type") - if auth_type == "active_directory": - add_user_window.check_active_directory_checkbox() - self.add_modal_window("add_AD_user", "") - add_user_window = self.get_modal_window("add_AD_user") + # skip as unsupported + # auth_type = user_data.get("auth_type") + # if auth_type == "active_directory": + # add_user_window.check_active_directory_checkbox() + # self.add_modal_window("add_AD_user", "") + # add_user_window = self.get_modal_window("add_AD_user") add_user_window.new_user(user_data) diff --git a/tests/e2e/sessions/test_current_sessions_tab.py b/tests/e2e/sessions/test_current_sessions_tab.py index 5ebcd05..301cdb9 100644 --- a/tests/e2e/sessions/test_current_sessions_tab.py +++ b/tests/e2e/sessions/test_current_sessions_tab.py @@ -88,7 +88,7 @@ class TestCurrentSessionsTab: ut.open_edit_user_page_by_user(user_name, "Администратор") ut.delete_user(user_name) - # @pytest.mark.develop + @pytest.mark.develop def test_sessions_tab_content(self, browser: Page) -> None: """Тест содержимого вкладки 'Сеансы'. diff --git a/tests/e2e/users/test_add_user.py b/tests/e2e/users/test_add_user.py index ef495f4..c82a037 100644 --- a/tests/e2e/users/test_add_user.py +++ b/tests/e2e/users/test_add_user.py @@ -4,7 +4,6 @@ работы с пользователями системы. """ import pytest - from typing import Dict from playwright.sync_api import Page from pages.users_tab import UsersTab @@ -80,12 +79,16 @@ class TestUsersTabAddUser: """ ut = UsersTab(browser) - + ut.open_add_user_window() ut.check_add_user_window_content() - ut.transform_to_add_AD_user_window() - ut.check_add_AD_user_window_content() - ut.close_add_AD_user_window() + + # skip as unsupported + # ut.transform_to_add_AD_user_window() + # ut.check_add_AD_user_window_content() + # ut.close_add_AD_user_window() + + ut.close_add_user_window() # @pytest.mark.develop def test_add_user_window_close_buttons(self, browser: Page) -> None: @@ -97,20 +100,21 @@ class TestUsersTabAddUser: ut = UsersTab(browser) browser.wait_for_timeout(500) - + ut.open_add_user_window() ut.close_add_user_window_by_toolbar_button() ut.open_add_user_window() ut.close_add_user_window() - ut.open_add_user_window() - ut.transform_to_add_AD_user_window() - ut.close_add_AD_user_window_by_toolbar_button() + # skip as unsupported + # ut.open_add_user_window() + # ut.transform_to_add_AD_user_window() + # ut.close_add_AD_user_window_by_toolbar_button() - ut.open_add_user_window() - ut.transform_to_add_AD_user_window() - ut.close_add_AD_user_window() + # ut.open_add_user_window() + # ut.transform_to_add_AD_user_window() + # ut.close_add_AD_user_window() # @pytest.mark.develop def test_add_local_user(self, browser: Page, cleanup_users: None) -> None: @@ -125,6 +129,7 @@ class TestUsersTabAddUser: self._add_user(browser, user_data) # @pytest.mark.develop + @pytest.mark.skip(reason="This test is temporarily disabled as test unsupported feature") def test_add_AD_user(self, browser: Page, cleanup_users: None) -> None: """Проверяет добавление пользователя Active Directory. @@ -158,7 +163,7 @@ class TestUsersTabAddUser: if not user_exists: # Создаем пользователя впервые ut.open_add_user_window() - + if ut.add_new_user(user_data): # Ждем обновления таблицы с использованием ожиданий Playwright browser.wait_for_timeout(2000)