Внесение изменений в локаторы и названия тулбаров после изменений в UI версии 1.31

ra4/management_rack
nsubbot 2026-02-10 14:35:24 +03:00
parent ce9ff3e27d
commit f8f85300d3
10 changed files with 22 additions and 53 deletions

View File

@ -18,10 +18,7 @@ class SettingsFormLocators:
SETTTINGS_FORM_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]" SETTTINGS_FORM_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]"
SETTTINGS_FORM_TITLE = f"{SETTTINGS_FORM_SCROLL_CONTAINER}//div[contains(@class, 'v-toolbar__title')]" SETTTINGS_FORM_TITLE = f"{SETTTINGS_FORM_SCROLL_CONTAINER}//div[contains(@class, 'v-toolbar__title')]"
SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/following-sibling::div" SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_SMS_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_LDAP_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_KEYCLOAK_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_INPUT_FIELD = "div.v-text-field__slot > input" SETTINGS_FORM_INPUT_FIELD = "div.v-text-field__slot > input"
SETTINGS_FORM_INPUT_VALUE_SUFFIX = ".v-text-field__suffix" SETTINGS_FORM_INPUT_VALUE_SUFFIX = ".v-text-field__suffix"

View File

@ -44,7 +44,7 @@ class KeycloakAuthSettingsTab(BasePage):
# Форма для отображения/редактирования полей настроек KEYCLOAK Аутентификации # Форма для отображения/редактирования полей настроек KEYCLOAK Аутентификации
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_KEYCLOAK_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)

View File

@ -46,7 +46,7 @@ class LDAPAuthSettingsTab(BasePage):
# Форма для отображения/редактирования полей настроек LDAP Аутентификации # Форма для отображения/редактирования полей настроек LDAP Аутентификации
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_LDAP_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
# Метка "tls" # Метка "tls"
label_tls_locator = container_locator.get_by_text("tls") label_tls_locator = container_locator.get_by_text("tls")

View File

@ -29,12 +29,9 @@ class PushNotificationsSettingsTab(BasePage):
super().__init__(page) super().__init__(page)
self.toolbar = ToolbarComponent(page, "Push уведомления")
# Форма для отображения/редактирования полей настроек Push уведомлений # Форма для отображения/редактирования полей настроек Push уведомлений
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
self.settings_form.add_toolbar_title("Общие") self.settings_form.add_toolbar_title("Push уведомления")
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
@ -137,8 +134,6 @@ class PushNotificationsSettingsTab(BasePage):
expected_input_field_names = ["Сообщение", "Пользователи"] expected_input_field_names = ["Сообщение", "Пользователи"]
self.should_be_toolbar()
self.should_be_form_toolbar() self.should_be_form_toolbar()
self.settings_form.check_button_visibility("submit_button") self.settings_form.check_button_visibility("submit_button")
@ -160,16 +155,6 @@ class PushNotificationsSettingsTab(BasePage):
f"Push notifications settings input form item with name '{name}' is missing" f"Push notifications settings input form item with name '{name}' is missing"
) )
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара страницы.
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
loc = self.page.get_by_role("navigation").filter(
has_text=re.compile("Push уведомления")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'Push уведомления' is missing")
def should_be_form_toolbar(self) -> None: def should_be_form_toolbar(self) -> None:
"""Проверяет наличие тулбара формы редактирования настроек. """Проверяет наличие тулбара формы редактирования настроек.

View File

@ -1,4 +1,4 @@
"""Модуль вкладки 'Статус обслуживания'. """Модуль вкладки 'Статус компонентов'.
Содержит класс ServiceStatusTab для работы с таблицей сервисов. Содержит класс ServiceStatusTab для работы с таблицей сервисов.
Позволяет проверять состояние и взаимодействовать с элементами вкладки. Позволяет проверять состояние и взаимодействовать с элементами вкладки.
@ -14,7 +14,7 @@ from pages.base_page import BasePage
class ServiceStatusTab(BasePage): class ServiceStatusTab(BasePage):
"""Класс для работы с вкладкой 'Статус обслуживания'. """Класс для работы с вкладкой 'Статус компонентов'.
Предоставляет методы для взаимодействия с таблицей сервисов и проверки Предоставляет методы для взаимодействия с таблицей сервисов и проверки
её состояния. её состояния.
@ -24,7 +24,7 @@ class ServiceStatusTab(BasePage):
""" """
def __init__(self, page: Page) -> None: def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки 'Статус обслуживания'.""" """Инициализирует компоненты вкладки 'Статус компонентов'."""
super().__init__(page) super().__init__(page)

View File

@ -27,24 +27,22 @@ class SessionSettingsTab(BasePage):
super().__init__(page) super().__init__(page)
self.toolbar = ToolbarComponent(page, "Настройки") self.toolbar = ToolbarComponent(page, "Время жизни сеанса")
toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("Настройки")). \ toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
locator("//button[@data-testid='SESSION_SETTINGS__btn__edit']") locator("//button[@data-testid='SESSION_SETTINGS__btn__edit']")
self.toolbar.add_tooltip_button(toolbar_button_edit, "edit") self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_save = self.page.get_by_role("navigation").filter(has_text=re.compile("Настройки")). \ toolbar_button_save = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
locator("//button[@data-testid='SESSION_SETTINGS__btn__submit']") locator("//button[@data-testid='SESSION_SETTINGS__btn__submit']")
self.toolbar.add_tooltip_button(toolbar_button_save, "save") self.toolbar.add_tooltip_button(toolbar_button_save, "save")
toolbar_button_cancel = self.page.get_by_role("navigation").filter(has_text=re.compile("Настройки")). \ toolbar_button_cancel = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
locator("//button[@data-testid='SESSION_SETTINGS__btn__cancelEdit']") locator("//button[@data-testid='SESSION_SETTINGS__btn__cancelEdit']")
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel") self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
# Форма для отображения/редактирования полей настроек сессии пользователя # Форма для отображения/редактирования полей настроек сессии пользователя
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
self.settings_form.add_toolbar_title("Время жизни сеанса")
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
@ -208,8 +206,6 @@ class SessionSettingsTab(BasePage):
self.should_be_toolbar() self.should_be_toolbar()
self.should_be_toolbar_buttons() self.should_be_toolbar_buttons()
self.should_be_form_toolbar()
actual_input_field_names = self.input_fields_locators.keys() actual_input_field_names = self.input_fields_locators.keys()
assert set(actual_input_field_names) == set(expected_input_field_names), \ assert set(actual_input_field_names) == set(expected_input_field_names), \
f"Misscomparison input field names: Expected {expected_input_field_names}, Actual {actual_input_field_names}" f"Misscomparison input field names: Expected {expected_input_field_names}, Actual {actual_input_field_names}"
@ -242,8 +238,8 @@ class SessionSettingsTab(BasePage):
AssertionError: Если тулбар или кнопка редактирования отсутствуют. AssertionError: Если тулбар или кнопка редактирования отсутствуют.
""" """
loc = self.page.get_by_role("navigation").filter( loc = self.page.get_by_role("navigation").filter(
has_text=re.compile("Настройки")).locator("div").nth(1) has_text=re.compile("Время жизни сеанса")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'Настройки' is missing") self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'Время жизни сеанса' is missing")
self.toolbar.check_button_visibility("edit") self.toolbar.check_button_visibility("edit")
def should_be_toolbar_buttons(self) -> None: def should_be_toolbar_buttons(self) -> None:
@ -265,15 +261,6 @@ class SessionSettingsTab(BasePage):
self.toolbar.get_button_by_name("cancel").click() self.toolbar.get_button_by_name("cancel").click()
self.toolbar.check_button_visibility("edit") self.toolbar.check_button_visibility("edit")
def should_be_form_toolbar(self) -> None:
"""Проверяет наличие тулбара формы редактирования настроек.
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.settings_form.should_be_toolbar()
def verify_form_data(self, session_settings: dict) -> None: def verify_form_data(self, session_settings: dict) -> None:
"""Проверяет соответствие содержимого полей формы данным из БД. """Проверяет соответствие содержимого полей формы данным из БД.

View File

@ -47,7 +47,7 @@ class SMSNotificationsSettingsTab(BasePage):
# Форма для отображения/редактирования полей настроек СМС уведомлений # Форма для отображения/редактирования полей настроек СМС уведомлений
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_SMS_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
loc = self.input_fields_locators.get("ip") loc = self.input_fields_locators.get("ip")

View File

@ -28,7 +28,7 @@ class TestServiceStatusTable:
mp.should_be_navigation_panel() mp.should_be_navigation_panel()
mp.click_main_navigation_panel_item("Настройки") mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Обслуживание и диагностика") mp.click_subpanel_item("Обслуживание и диагностика")
mp.click_subpanel_item("Статус обслуживания") mp.click_subpanel_item("Статус компонентов")
def test_scrolling(self, browser: Page) -> None: def test_scrolling(self, browser: Page) -> None:
"""Проверяет прокрутку таблицы статусов сервисов. """Проверяет прокрутку таблицы статусов сервисов.

View File

@ -76,7 +76,7 @@ class TestNavigationPanel:
mp.click_main_navigation_panel_item("Настройки") mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Обслуживание и диагностика") mp.click_subpanel_item("Обслуживание и диагностика")
mp.click_subpanel_item("Статус обслуживания") mp.click_subpanel_item("Статус компонентов")
mp.wait_for_timeout(2000) mp.wait_for_timeout(2000)
mp.click_subpanel_item("Сеансы") mp.click_subpanel_item("Сеансы")

View File

@ -1,4 +1,4 @@
"""Модуль тестов вкладки 'Статус обслуживания'. """Модуль тестов вкладки 'Статус компонентов'.
Содержит тесты для проверки отображения и функциональности Содержит тесты для проверки отображения и функциональности
элементов вкладки статусов сервисов. элементов вкладки статусов сервисов.
@ -15,10 +15,10 @@ from pages.login_page import LoginPage
# @pytest.mark.smoke # @pytest.mark.smoke
class TestServiceStatusTab: class TestServiceStatusTab:
"""Класс тестов для проверки вкладки 'Статус обслуживания'. """Класс тестов для проверки вкладки 'Статус компонентов'.
Тесты покрывают следующие сценарии: Тесты покрывают следующие сценарии:
1. test_service_status_tab_content: Проверяет содержимое вкладки 'Статус обслуживания' 1. test_service_status_tab_content: Проверяет содержимое вкладки 'Статус компонентов'
2. test_service_status_table_row_highlighting: Проверяет выделение строк в таблице сервисов 2. test_service_status_table_row_highlighting: Проверяет выделение строк в таблице сервисов
3. test_service_status_tab_resize: Проверяет возможность расширения/сжатия рабочей области вкладки 3. test_service_status_tab_resize: Проверяет возможность расширения/сжатия рабочей области вкладки
4. test_service_status_tab_reload: Проверяет возможность обновления контента после нажатия кнопки 'Обновить' 4. test_service_status_tab_reload: Проверяет возможность обновления контента после нажатия кнопки 'Обновить'
@ -47,12 +47,12 @@ class TestServiceStatusTab:
# Клик по пункту 'Обслуживание и диагностика' в панели навигации настроек # Клик по пункту 'Обслуживание и диагностика' в панели навигации настроек
mp.click_subpanel_item("Обслуживание и диагностика") mp.click_subpanel_item("Обслуживание и диагностика")
# Клик по пункту 'Статус обслуживания' в панели навигации обслуживания # Клик по пункту 'Статус компонентов' в панели навигации обслуживания
mp.click_subpanel_item("Статус обслуживания") mp.click_subpanel_item("Статус компонентов")
# @pytest.mark.develop # @pytest.mark.develop
def test_service_status_tab_content(self, browser: Page): def test_service_status_tab_content(self, browser: Page):
"""Проверяет содержимое вкладки 'Статус обслуживания'. """Проверяет содержимое вкладки 'Статус компонентов'.
Args: Args:
browser: Экземпляр страницы Playwright. browser: Экземпляр страницы Playwright.