Обновление локаторов элементов стойки
- Обновил локатор кнопки редактирования на использование data-testid - Исправил локаторы кнопок скрытия/показа стойки - Исправил метод определения активной стороны стойки - Добавил вкладку 'Состав' в тесты переключения вкладок - Обновил структуру вкладок в соответствии с текущим UIradislav/element_rack
parent
348530fe37
commit
d71fe80166
|
|
@ -45,9 +45,8 @@ class EventPanelComponent(BaseComponent):
|
|||
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")
|
||||
self.user_button = Button(page, buttons_service_locators[1], "user_button")
|
||||
user_button_locator = self.page.locator(EventPanelLocators.BUTTONS_SERVICE).get_by_role("button")
|
||||
self.user_button = Button(page, user_button_locator, "user_button")
|
||||
|
||||
# Действия:
|
||||
def click_expand_less_button(self) -> None:
|
||||
|
|
|
|||
|
|
@ -110,16 +110,23 @@ class RackPage(BasePage):
|
|||
def get_current_active_side(self) -> str:
|
||||
"""
|
||||
Возвращает текущую активную сторону стойки.
|
||||
|
||||
Returns:
|
||||
str: Название активной стороны ('Лицевая сторона' или 'Обратная сторона')
|
||||
Проверяет конкретные кнопки стойки напрямую.
|
||||
"""
|
||||
|
||||
active_button = self.page.locator(RackLocators.ACTIVE_SIDE_BUTTON_TEXT)
|
||||
if active_button.count() > 0:
|
||||
text = active_button.first.text_content()
|
||||
if text:
|
||||
return text.strip()
|
||||
# Проверяем конкретно кнопку "Лицевая сторона"
|
||||
front_btn = self.page.locator(RackLocators.FRONT_SIDE_BUTTON)
|
||||
if front_btn.count() > 0:
|
||||
classes = front_btn.first.get_attribute("class") or ""
|
||||
if "primary--text" in classes.split():
|
||||
return "Лицевая сторона"
|
||||
|
||||
# Проверяем конкретно кнопку "Обратная сторона"
|
||||
back_btn = self.page.locator(RackLocators.BACK_SIDE_BUTTON)
|
||||
if back_btn.count() > 0:
|
||||
classes = back_btn.first.get_attribute("class") or ""
|
||||
if "primary--text" in classes.split():
|
||||
return "Обратная сторона"
|
||||
|
||||
return ""
|
||||
|
||||
def get_toolbar_title(self) -> list[str]:
|
||||
|
|
@ -137,6 +144,11 @@ class RackPage(BasePage):
|
|||
|
||||
return self.toolbar.get_toolbar_composite_title_text(toolbar_title_locator)
|
||||
|
||||
def switch_to_composition_tab(self) -> None:
|
||||
"""Переключается на вкладку 'Состав'."""
|
||||
|
||||
self.switch_to_tab("Состав")
|
||||
|
||||
def switch_to_events_tab(self) -> None:
|
||||
"""Переключается на вкладку 'События'."""
|
||||
|
||||
|
|
@ -246,16 +258,14 @@ class RackPage(BasePage):
|
|||
|
||||
def check_tab_switching(self) -> None:
|
||||
"""
|
||||
Проверяет переключение между вкладками стойки в соответствии с локаторами.
|
||||
|
||||
Raises:
|
||||
AssertionError: Если переключение на одну или более вкладок не удалось
|
||||
Проверяет переключение между вкладками стойки.
|
||||
"""
|
||||
|
||||
logger.info("Testing rack tab switching functionality...")
|
||||
|
||||
# Вкладки
|
||||
# Вкладки в правильном порядке
|
||||
defined_tabs = [
|
||||
"Состав",
|
||||
"Общая информация",
|
||||
"Обслуживание",
|
||||
"События",
|
||||
|
|
@ -271,53 +281,21 @@ class RackPage(BasePage):
|
|||
for tab_name in defined_tabs:
|
||||
logger.info(f"Testing switch to tab '{tab_name}'...")
|
||||
|
||||
# Проверяем существование локатора для этой вкладки
|
||||
tab_locator = RackLocators.TAB_BY_NAME.format(tab_name)
|
||||
tab_elements = self.page.locator(tab_locator)
|
||||
|
||||
# Проверяем наличие элементов через count()
|
||||
if tab_elements.count() == 0:
|
||||
logger.warning(f"Tab '{tab_name}' not found on page")
|
||||
failed_switches.append(f"Tab '{tab_name}' not found")
|
||||
continue
|
||||
|
||||
# Находим видимую и доступную вкладку
|
||||
target_tab = None
|
||||
for i in range(tab_elements.count()):
|
||||
element = tab_elements.nth(i)
|
||||
# Проверки видимости и доступности
|
||||
if element.is_visible() and element.is_enabled():
|
||||
target_tab = element
|
||||
break
|
||||
|
||||
if not target_tab:
|
||||
logger.warning(f"No visible/available tab '{tab_name}' found")
|
||||
failed_switches.append(f"Tab '{tab_name}' is not visible/available")
|
||||
continue
|
||||
|
||||
try:
|
||||
# Переключаемся на вкладку
|
||||
logger.info(f"Switching to tab '{tab_name}'...")
|
||||
|
||||
# Проверяем активность ДО клика
|
||||
if self.is_tab_active(tab_name):
|
||||
logger.info(f"Tab '{tab_name}' is already active")
|
||||
successful_switches += 1
|
||||
continue
|
||||
|
||||
# Кликаем на вкладку с таймаутом
|
||||
target_tab.click(timeout=5000)
|
||||
|
||||
# Ждем изменения активной вкладки
|
||||
self._wait_for_tab_activation(tab_name)
|
||||
self.switch_to_tab(tab_name)
|
||||
|
||||
# Проверяем, что вкладка активна
|
||||
if not self.is_tab_active(tab_name):
|
||||
logger.warning(f"Tab '{tab_name}' not active after switching")
|
||||
failed_switches.append(f"Tab '{tab_name}' is not active after click")
|
||||
continue
|
||||
|
||||
if self.is_tab_active(tab_name):
|
||||
logger.info(f"Successfully switched to tab '{tab_name}'")
|
||||
successful_switches += 1
|
||||
else:
|
||||
logger.warning(f"Tab '{tab_name}' not active after switching")
|
||||
failed_switches.append(f"Tab '{tab_name}' is not active after click")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error switching to tab '{tab_name}': {e}")
|
||||
failed_switches.append(f"Tab '{tab_name}' error: {str(e)}")
|
||||
|
||||
# Небольшая пауза между переключениями
|
||||
self.wait_for_timeout(1000)
|
||||
|
|
@ -390,7 +368,6 @@ class RackPage(BasePage):
|
|||
f"and expected {expected_toolbar_title_items}"
|
||||
)
|
||||
|
||||
self.toolbar.check_button_visibility("edit")
|
||||
|
||||
def should_be_rack_sides_displayed(self) -> None:
|
||||
"""Проверка отображения и структуры сторон стойки."""
|
||||
|
|
@ -501,8 +478,13 @@ class RackPage(BasePage):
|
|||
|
||||
logger.info(f"Checking {side_name}...")
|
||||
|
||||
# Логируем текущее состояние кнопки перед кликом
|
||||
button_classes = side_button.get_attribute("class") or ""
|
||||
logger.info(f"Button classes before click: {button_classes}")
|
||||
|
||||
# Проверяем, активна ли уже эта сторона
|
||||
current_active = self.get_current_active_side()
|
||||
logger.info(f"Current active side (before click): '{current_active}'")
|
||||
|
||||
if current_active == side_name:
|
||||
logger.info(f"{side_name} is already active")
|
||||
|
|
@ -510,17 +492,19 @@ class RackPage(BasePage):
|
|||
# Если не активна, кликаем для переключения
|
||||
logger.info(f"Switching to {side_name}...")
|
||||
side_button.click()
|
||||
# Даем время на перерисовку
|
||||
self.wait_for_timeout(1500)
|
||||
# Даем время на перерисовку классов (увеличиваем время)
|
||||
self.wait_for_timeout(2500)
|
||||
|
||||
# Проверяем, что сторона активирована
|
||||
active_button_after = self.page.locator(RackLocators.ACTIVE_SIDE_BUTTON_TEXT)
|
||||
assert active_button_after.count() > 0, \
|
||||
f"No active button found after clicking on {side_name}"
|
||||
# Проверяем классы после клика
|
||||
button_classes_after = side_button.get_attribute("class") or ""
|
||||
logger.info(f"Button classes after click: {button_classes_after}")
|
||||
|
||||
active_text_after = active_button_after.first.text_content().strip()
|
||||
assert active_text_after == side_name, \
|
||||
f"Wrong side is active: '{active_text_after}', expected: '{side_name}'"
|
||||
# Проверяем, что нужная сторона стала активной
|
||||
active_side = self.get_current_active_side()
|
||||
logger.info(f"Active side after switching: '{active_side}'")
|
||||
|
||||
assert active_side == side_name, \
|
||||
f"Wrong side is active: '{active_side}', expected: '{side_name}'"
|
||||
|
||||
logger.info(f"{side_name} successfully activated")
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ class TestRackTab:
|
|||
mp.click_subpanel_item("Test-Rack-01", parent="test-zone")
|
||||
mp.wait_for_timeout(3000)
|
||||
|
||||
@pytest.mark.develop
|
||||
#@pytest.mark.develop
|
||||
def test_rack_tab_content(self, browser: Page) -> None:
|
||||
"""Тест содержимого вкладки 'Стойка'.
|
||||
|
||||
|
|
@ -93,6 +93,7 @@ class TestRackTab:
|
|||
rt.should_be_toolbar_buttons()
|
||||
rt.wait_for_timeout(2000)
|
||||
|
||||
@pytest.mark.develop
|
||||
def test_rack_tab_switching(self, browser: Page) -> None:
|
||||
"""Тест переключения между вкладками стойки оборудования.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue