Исходный код pages.ztp_config_tab
"""Модуль вкладки 'Конфигурация' в модуле 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"
)