e-nms_qa_automation/pages/ztp_config_tab.py

218 lines
10 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль вкладки 'Конфигурация' в модуле Zero Touch Provisioning.
Содержит класс ZTPConfigTab для работы с таблицей конфигурации ZTP.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.table_locators import TableLocators
from elements.tooltip_button_element import TooltipButton
from components.toolbar_component import ToolbarComponent
from components.table_component import TableComponent
from pages.base_page import BasePage
logger = get_logger("ZTP_CONFIG_TAB")
class ZTPConfigTab(BasePage):
"""Класс для работы с вкладкой 'Конфигурация' в модуле Zero Touch Provisioning.
Предоставляет методы для взаимодействия с таблицей конфигурации ZTP
и проверки состояния элементов интерфейса. Включает функциональность для:
- Проверки содержимого и структуры таблицы конфигурации
- Прокрутки таблицы и проверки видимости строк
- Выделения строк таблицы
- Работы с кнопкой синхронизации (Reload) в заголовке таблицы
- Проверки видимости и подсказок кнопок синхронизации
Args:
page (Page): Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки 'Конфигурация'.
Args:
page: Экземпляр страницы Playwright для взаимодействия с браузером.
"""
super().__init__(page)
# Компонент тулбара вкладки конфигурации
self.toolbar = ToolbarComponent(page, "Конфигурация")
# Компонент таблицы конфигурации ZTP
self.ztp_config_table = TableComponent(page)
# Действия:
def click_sync_button(self, index: int) -> None:
"""Нажимает кнопку 'Reload' в указанной ячейке заголовка таблицы.
Перед кликом проверяет наличие кнопки.
Args:
index: Индекс ячейки в заголовке таблицы.
Raises:
AssertionError: Если индекс выходит за пределы или кнопка не найдена.
"""
# Проверяем наличие кнопки перед кликом
sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"
# Выполняем клик по кнопке
sync_button.click()
logger.info("Нажата кнопка синхронизации (Reload)")
def get_rows_count(self) -> int:
"""Возвращает количество строк в таблице конфигурации (без заголовка).
Returns:
int: Количество строк с данными конфигурации ZTP.
Raises:
AssertionError: Если таблица пуста или не загружена.
"""
return self.ztp_config_table.get_rows_count(TableLocators.TABLE_WORK_AREA)
def scroll_config_table_up(self) -> None:
"""Прокручивает таблицу конфигурации вверх до начала."""
self.ztp_config_table.scroll_up(TableLocators.TABLE_SCROLL_CONTAINER)
def scroll_config_table_down(self) -> None:
"""Прокручивает таблицу конфигурации вниз до конца."""
self.ztp_config_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)
# Проверки:
def check_config_table_content(self) -> None:
"""Проверяет содержимое таблицы конфигурации ZTP.
Проверяет соответствие заголовков таблицы ожидаемым значениям
и наличие данных в таблице.
Raises:
AssertionError: Если таблица пуста или заголовки не соответствуют ожидаемым.
"""
# Ожидаемые заголовки столбцов таблицы конфигурации ZTP
expected_headers = [
'sync',
'IDENTIFIER',
'MAC',
'DHCPRELAY',
'ШАБЛОН',
'IPSETTODEVICE',
'СТАТУС',
'ДЕЙСТВИЯ'
]
self.ztp_config_table.check_content(
TableLocators.TABLE_WORK_AREA,
expected_headers,
False
)
def check_sync_button_visibility(self, index: int) -> None:
"""Проверяет видимость кнопки синхронизации (Reload) в указанной ячейке заголовка.
Args:
index: Индекс ячейки в заголовке таблицы.
Raises:
AssertionError: Если кнопка не видна на странице.
"""
sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"
# Прокручиваем к элементу для гарантии видимости
sync_button.scroll_into_view_if_needed()
# Проверяем видимость кнопки
assert sync_button.is_visible(), f"Sync button in header cell {index} is not visible"
logger.info("Кнопка синхронизации (Reload) видима")
def check_sync_button_tooltip(self, index: int, expected_tooltip: str = "reload") -> None:
"""Проверяет текст подсказки кнопки синхронизации (Reload).
Использует стандартный механизм проверки подсказок из ToolbarComponent.
Args:
index: Индекс ячейки в заголовке таблицы.
expected_tooltip: Ожидаемый текст подсказки (по умолчанию 'reload').
Raises:
AssertionError: Если подсказка не соответствует ожидаемой или отсутствует.
"""
# Убеждаемся, что кнопка существует
sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"
sync_tooltip_button = TooltipButton(self.page, sync_button, "sync_button")
# Проверка подсказки
sync_tooltip_button.check_tooltip_with_text(expected_tooltip)
logger.info(
"Подсказка кнопки синхронизации (Reload) в ячейке %d: '%s'",
index,
expected_tooltip
)
def check_config_table_vertical_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки таблицы конфигурации.
Returns:
bool: True если таблица поддерживает вертикальную прокрутку, иначе False.
"""
return self.ztp_config_table.is_scrollable_vertically(
TableLocators.TABLE_SCROLL_CONTAINER
)
def check_config_table_first_row_visibility(self) -> None:
"""Проверяет видимость первой строки таблицы конфигурации.
Raises:
AssertionError: Если первая строка таблицы не видна.
"""
self.ztp_config_table.check_first_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_config_table_last_row_visibility(self) -> None:
"""Проверяет видимость последней строки таблицы конфигурации.
Raises:
AssertionError: Если последняя строка таблицы не видна.
"""
self.ztp_config_table.check_last_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_config_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы конфигурации.
Args:
row_index: Индекс проверяемой строки (0-based, без учета заголовка).
Raises:
AssertionError: Если строка не выделена после взаимодействия.
"""
self.ztp_config_table.check_row_highlighting(
TableLocators.TABLE_WORK_AREA, row_index
)
def should_be_toolbar(self) -> None:
"""Проверяет наличие и видимость тулбара на вкладке конфигурации.
Raises:
AssertionError: Если тулбар отсутствует на странице.
"""
self.toolbar.check_toolbar_presence("Toolbar is missing")
def should_be_config_table(self) -> None:
"""Проверяет наличие и видимость таблицы конфигурации ZTP.
Raises:
AssertionError: Если таблица конфигурации отсутствует на странице.
"""
self.ztp_config_table.check_visibility(
TableLocators.TABLE_WORK_AREA, "Configuration table is missing"
)