Обновление локаторов элементов стойки v2

radislav/element_rack
Radislav 2025-12-15 16:38:59 +03:00
parent 4523ff6db3
commit e87b428f09
3 changed files with 49 additions and 21 deletions

View File

@ -16,27 +16,28 @@ class RackLocators:
- Контейнеры и структурные элементы - Контейнеры и структурные элементы
""" """
# Основной контейнер вкладок стойки (верхние вкладки) # Основной контейнер вкладок стойки (верхние вкладки)
TABS_CONTAINER = "//div[starts-with(@data-testid, 'CABINET_SHOW__') and contains(@class, 'v-tabs__div')]" TABS_CONTAINER = "//div[@data-testid='CABINET_SHOW__tabs' and contains(@class, 'v-tabs')]"
# Все элементы верхних вкладок стойки # Все элементы верхних вкладок стойки
ALL_TABS = "//div[starts-with(@data-testid, 'CABINET_SHOW__') and contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item')]" ALL_TABS = "//div[@data-testid='CABINET_SHOW__tabs']//a[contains(@class, 'v-tabs__item')]"
# Кнопка редактирования свойств стойки # Кнопка редактирования свойств стойки
EDIT_BUTTON ="//button[@data-testid='CABINET_SHOW__btn__edit']" EDIT_BUTTON ="//button[@data-testid='CABINET_SHOW__btn__edit']"
# Кнопка "Скрыть стойку" # Кнопка "Скрыть стойку"
HIDE_RACK_BUTTON = "//div[@data-testid='CABINET_SHOW__div__hideCabinet']" HIDE_RACK_BUTTON = "//div[@data-testid='CABINET_SHOW__div__hideCabinet' and contains(@class, 'cabinet_hide_button_trigger_show')]"
# Кнопка "Показать стойку" # Кнопка "Показать стойку"
SHOW_RACK_BUTTON = "//div[@data-testid='CABINET_SHOW__div__hideCabinet']" SHOW_RACK_BUTTON = "//div[@data-testid='CABINET_SHOW__div__hideCabinet' and contains(@class, 'cabinet_hide_button_trigger_hide')]"
# Универсальный локатор для любой вкладки по имени # Универсальный локатор для любой вкладки по имени
TAB_BY_NAME = "//div[starts-with(@data-testid, 'CABINET_SHOW__') and contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item') and .//*[contains(., '{}')]]" TAB_BY_NAME = "//div[starts-with(@data-testid, 'CABINET_SHOW__') and contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item') and .//*[contains(., '{}')]]"
# Конкретные вкладки по тексту # Конкретные вкладки по тексту
COMPOSITION_TAB = "//div[@data-testid='CABINET_SHOW__composition_tab']//a[contains(@class, 'v-tabs__item')]" COMPOSITION_TAB = "//div[@data-testid='CABINET_SHOW__composition_tab']//a[contains(@class, 'v-tabs__item')]"
GENERAL_INFO_TAB = "//div[@data-testid='CABINET_SHOW__general_info_tab']//a[contains(@class, 'v-tabs__item')]" GENERAL_INFO_TAB = "//div[@data-testid='CABINET_SHOW__main_tab']//a[contains(@class, 'v-tabs__item')]"
MAINTENANCE_TAB = "//div[@data-testid='CABINET_SHOW__service_tab']//a[contains(@class, 'v-tabs__item')]" MAINTENANCE_TAB = "//div[@data-testid='CABINET_SHOW__service_tab']//a[contains(@class, 'v-tabs__item')]"
EVENTS_TAB = "//div[@data-testid='CABINET_SHOW__events_tab']//a[contains(@class, 'v-tabs__item')]" EVENTS_TAB = "//div[@data-testid='CABINET_SHOW__events_tab']//a[contains(@class, 'v-tabs__item')]"
SERVICES_TAB = "//div[@data-testid='CABINET_SHOW__services_tab']//a[contains(@class, 'v-tabs__item')]" SERVICES_TAB = "//div[@data-testid='CABINET_SHOW__services_tab']//a[contains(@class, 'v-tabs__item')]"
@ -45,7 +46,7 @@ class RackLocators:
ACTIVE_TAB_CLASSES = ["accent--text", "v-tabs__item--active"] ACTIVE_TAB_CLASSES = ["accent--text", "v-tabs__item--active"]
# Локатор для активной вкладки # Локатор для активной вкладки
ACTIVE_TAB = "//div[starts-with(@data-testid, 'CABINET_SHOW__') and contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item--active')]" ACTIVE_TAB = "//div[@data-testid='CABINET_SHOW__tabs']//a[contains(@class, 'v-tabs__item--active')]"
# Контейнер формы # Контейнер формы
FORM_CONTAINER = "//div[contains(@class, 'container')]" FORM_CONTAINER = "//div[contains(@class, 'container')]"
@ -82,7 +83,10 @@ class RackLocators:
# ================ ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОЙКИ =================== # ================ ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОЙКИ ===================
# Основной контейнер стойки # Общий контейнер стойки (включает кнопки переключения сторон и MAIN_CONTAINER)
RACK_CONTAINER = "//div[contains(@class, 'layout active') and contains(@class, 'row') and contains(@class, 'shrink')]"
# Основной контейнер стойки (изображение стойки)
MAIN_CONTAINER = "//div[contains(@class, 'layout cabinet')]" MAIN_CONTAINER = "//div[contains(@class, 'layout cabinet')]"
# Кнопки переключения сторон # Кнопки переключения сторон

View File

@ -433,34 +433,57 @@ class RackPage(BasePage):
def should_have_hide_rack_button(self) -> None: def should_have_hide_rack_button(self) -> None:
""" """
Упрощенная проверка кнопки "Скрыть стойку". Проверка кнопки "Скрыть стойку".
Проверяет только кликабельность и наличие элемента. Проверяет видимость, тултип, кликабельность и эффект скрытия стойки.
""" """
logger.info("Checking 'Hide rack' button...") logger.info("Checking 'Hide rack' button...")
# Проверяем видимость # Проверяем видимость кнопки
self.toolbar.check_button_visibility("hide_rack") self.toolbar.check_button_visibility("hide_rack")
self.toolbar.check_button_tooltip("hide_rack", "Скрыть стойку") self.toolbar.check_button_tooltip("hide_rack", "Скрыть стойку")
# Проверяем, что кнопка кликабельна # Получаем общий контейнер стойки до клика
rack_container = self.page.locator(RackLocators.RACK_CONTAINER)
# Проверяем, что контейнер существует
expect(rack_container).to_be_visible(timeout=5000)
# Кликаем на кнопку "Скрыть стойку"
self.toolbar.get_button_by_name("hide_rack").click() self.toolbar.get_button_by_name("hide_rack").click()
self.wait_for_timeout(1000) self.wait_for_timeout(2000) # Даем время для применения стилей
# Проверяем, что общий контейнер стойки теперь скрыт (имеет display: none)
expect(rack_container).to_have_css("display", "none", timeout=5000)
logger.info("Rack container successfully hidden (display: none)")
logger.info("'Hide rack' button test completed successfully")
def should_have_show_rack_button(self) -> None: def should_have_show_rack_button(self) -> None:
""" """
Проверка кнопки "Показать стойку". Проверка кнопки "Показать стойку".
Проверяет наличие, тултип и кликабельность. Проверяет наличие, тултип, кликабельность и эффект показа стойки.
""" """
logger.info("Checking 'Show rack' button...") logger.info("Checking 'Show rack' button...")
# Проверяем видимость # Проверяем видимость кнопки
self.toolbar.check_button_visibility("show_rack") self.toolbar.check_button_visibility("show_rack")
self.toolbar.check_button_tooltip("show_rack", "Показать стойку") self.toolbar.check_button_tooltip("show_rack", "Показать стойку")
# Проверяем кликабельность # Получаем общий контейнер стойки
rack_container = self.page.locator(RackLocators.RACK_CONTAINER)
# Проверяем, что контейнер существует
expect(rack_container).to_be_attached(timeout=5000)
# Кликаем на кнопку "Показать стойку"
self.toolbar.get_button_by_name("show_rack").click() self.toolbar.get_button_by_name("show_rack").click()
self.wait_for_timeout(1000) self.wait_for_timeout(2000) # Даем время для применения стилей
# Проверяем, что общий контейнер стойки теперь видим (display не равен "none")
expect(rack_container).not_to_have_css("display", "none", timeout=5000)
logger.info("Rack container successfully shown (display is not 'none')")
logger.info("'Show rack' button test completed successfully")
# Вспомогательные методы # Вспомогательные методы

View File

@ -57,7 +57,7 @@ class TestRackTab:
mp.click_subpanel_item("Test-Rack-01", parent="test-zone") mp.click_subpanel_item("Test-Rack-01", parent="test-zone")
mp.wait_for_timeout(3000) mp.wait_for_timeout(3000)
#@pytest.mark.develop @pytest.mark.develop
def test_rack_tab_content(self, browser: Page) -> None: def test_rack_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки 'Стойка'. """Тест содержимого вкладки 'Стойка'.
@ -89,11 +89,8 @@ class TestRackTab:
# Проверка кнопки "Показать стойку" # Проверка кнопки "Показать стойку"
rt.should_have_show_rack_button() rt.should_have_show_rack_button()
# Переход в режим редактирования
rt.should_be_toolbar_buttons()
rt.wait_for_timeout(2000) rt.wait_for_timeout(2000)
@pytest.mark.develop
def test_rack_tab_switching(self, browser: Page) -> None: def test_rack_tab_switching(self, browser: Page) -> None:
"""Тест переключения между вкладками стойки оборудования. """Тест переключения между вкладками стойки оборудования.
@ -116,3 +113,7 @@ class TestRackTab:
# Проверяем переключение между всеми вкладками стойки # Проверяем переключение между всеми вкладками стойки
rt.check_tab_switching() rt.check_tab_switching()
# Переход в режим редактирования
rt.should_be_toolbar_buttons()
rt.wait_for_timeout(2000)