В компонент таблица добавлена функция поиска кнопки в ячейке заголовка таблицы
parent
1dcfa548da
commit
aac422e2b2
|
|
@ -29,11 +29,7 @@ class TableComponent(BaseComponent):
|
|||
index: Индекс ячейки в заголовке.
|
||||
"""
|
||||
|
||||
table = self.get_locator(table_locator)
|
||||
header_cells_count = table.locator("//thead/tr/th").count()
|
||||
assert index in range(header_cells_count), "Header cell index is out of range"
|
||||
|
||||
arrow_button = table.locator("//thead/tr/th").nth(index).get_by_role("button")
|
||||
arrow_button = self.get_header_cell_button(table_locator, index)
|
||||
assert arrow_button.is_enabled(), f"Arrow button is missing in {index} header cell"
|
||||
arrow_button.click()
|
||||
|
||||
|
|
@ -48,11 +44,7 @@ class TableComponent(BaseComponent):
|
|||
up, если это стрелочка вверх. down, если это стрелочка вниз.
|
||||
"""
|
||||
|
||||
table = self.get_locator(table_locator)
|
||||
header_cells_count = table.locator("//thead/tr/th").count()
|
||||
assert index in range(header_cells_count), "Header cell index is out of range"
|
||||
|
||||
arrow_button = table.locator("//thead/tr/th").nth(index).get_by_role("button")
|
||||
arrow_button = self.get_header_cell_button(table_locator, index)
|
||||
assert arrow_button.is_enabled(), f"Arrow button is missing in {index} header cell"
|
||||
|
||||
state = arrow_button.inner_text()
|
||||
|
|
@ -63,6 +55,25 @@ class TableComponent(BaseComponent):
|
|||
else:
|
||||
assert False, f"Got unsupported arrow state: {state}"
|
||||
|
||||
def get_header_cell_button(self, table_locator: str | Locator, index: int) -> Locator:
|
||||
""" Поиск кнопки в ячейке заголовка таблицы
|
||||
|
||||
Args:
|
||||
table_locator: Локатор таблицы.
|
||||
index: Индекс ячейки в заголовке.
|
||||
|
||||
Returns:
|
||||
Локатор строки кнопки.
|
||||
|
||||
Raises:
|
||||
AssertionError: Если индекс вне диапазона.
|
||||
"""
|
||||
|
||||
table = self.get_locator(table_locator)
|
||||
header_cells_count = table.locator("//thead/tr/th").count()
|
||||
assert index in range(header_cells_count), "Header cell index is out of range"
|
||||
return table.locator("//thead/tr/th").nth(index).get_by_role("button")
|
||||
|
||||
def get_row_locator(self, table_locator: str | Locator, row_index: int) -> Locator | None:
|
||||
"""Возвращает локатор строки по индексу.
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,10 @@
|
|||
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
|
||||
"""
|
||||
|
||||
from playwright.sync_api import Page, Locator
|
||||
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
|
||||
|
|
@ -43,8 +44,26 @@ class ZTPConfigTab(BasePage):
|
|||
# Компонент таблицы конфигурации ZTP
|
||||
self.ztp_config_table = TableComponent(page)
|
||||
|
||||
# Словарь для хранения кнопок синхронизации по индексам
|
||||
self.sync_buttons = {}
|
||||
# Действия:
|
||||
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:
|
||||
"""Возвращает количество строк в таблице конфигурации (без заголовка).
|
||||
|
|
@ -65,6 +84,7 @@ class ZTPConfigTab(BasePage):
|
|||
"""Прокручивает таблицу конфигурации вниз до конца."""
|
||||
self.ztp_config_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)
|
||||
|
||||
# Проверки:
|
||||
def check_config_table_content(self) -> None:
|
||||
"""Проверяет содержимое таблицы конфигурации ZTP.
|
||||
|
||||
|
|
@ -92,64 +112,6 @@ class ZTPConfigTab(BasePage):
|
|||
False
|
||||
)
|
||||
|
||||
def should_be_config_table(self) -> None:
|
||||
"""Проверяет наличие и видимость таблицы конфигурации ZTP.
|
||||
|
||||
Raises:
|
||||
AssertionError: Если таблица конфигурации отсутствует на странице.
|
||||
"""
|
||||
self.ztp_config_table.check_visibility(
|
||||
TableLocators.TABLE_WORK_AREA, "Configuration table is missing"
|
||||
)
|
||||
|
||||
def get_sync_button(self, index: int) -> Locator:
|
||||
"""Получает кнопку синхронизации (Reload) по индексу ячейки заголовка таблицы.
|
||||
|
||||
Args:
|
||||
index: Индекс ячейки в заголовке таблицы (0-based).
|
||||
|
||||
Returns:
|
||||
Locator: Локатор кнопки синхронизации (Reload) для взаимодействия.
|
||||
|
||||
Raises:
|
||||
AssertionError: Если индекс выходит за пределы диапазона ячеек
|
||||
или кнопка не найдена в указанной ячейке.
|
||||
"""
|
||||
table_locator = TableLocators.TABLE_WORK_AREA
|
||||
|
||||
# Получаем локатор таблицы через компонент таблицы
|
||||
table = self.ztp_config_table.get_locator(table_locator)
|
||||
|
||||
# Проверяем количество ячеек в заголовке таблицы
|
||||
header_cells_count = table.locator("//thead/tr/th").count()
|
||||
assert index in range(header_cells_count), "Header cell index is out of range"
|
||||
|
||||
# Ищем кнопку в указанной ячейке заголовка
|
||||
sync_button = table.locator("//thead/tr/th").nth(index).get_by_role("button")
|
||||
assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"
|
||||
|
||||
return sync_button
|
||||
|
||||
def add_sync_button_to_toolbar(self, index: int) -> None:
|
||||
"""Добавляет кнопку синхронизации (Reload) в тулбар для управления подсказками.
|
||||
|
||||
Регистрирует кнопку в компоненте тулбара, что позволяет использовать
|
||||
стандартные методы проверки подсказок.
|
||||
|
||||
Args:
|
||||
index: Индекс ячейки в заголовке таблицы.
|
||||
"""
|
||||
sync_button = self.get_sync_button(index)
|
||||
button_name = f"sync_button_{index}"
|
||||
|
||||
# Добавляем кнопку в тулбар компонент как кнопку с подсказкой
|
||||
self.toolbar.add_tooltip_button(sync_button, button_name)
|
||||
|
||||
# Сохраняем связь между индексом и именем кнопки для последующего доступа
|
||||
self.sync_buttons[index] = button_name
|
||||
|
||||
logger.info("Кнопка синхронизации (Reload) добавлена в тулбар как '%s'", button_name)
|
||||
|
||||
def check_sync_button_visibility(self, index: int) -> None:
|
||||
"""Проверяет видимость кнопки синхронизации (Reload) в указанной ячейке заголовка.
|
||||
|
||||
|
|
@ -159,7 +121,8 @@ class ZTPConfigTab(BasePage):
|
|||
Raises:
|
||||
AssertionError: Если кнопка не видна на странице.
|
||||
"""
|
||||
sync_button = self.get_sync_button(index)
|
||||
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()
|
||||
|
|
@ -181,14 +144,14 @@ class ZTPConfigTab(BasePage):
|
|||
Raises:
|
||||
AssertionError: Если подсказка не соответствует ожидаемой или отсутствует.
|
||||
"""
|
||||
# Убеждаемся, что кнопка зарегистрирована в тулбаре
|
||||
if index not in self.sync_buttons:
|
||||
self.add_sync_button_to_toolbar(index)
|
||||
# Убеждаемся, что кнопка существует
|
||||
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"
|
||||
|
||||
button_name = self.sync_buttons[index]
|
||||
sync_tooltip_button = TooltipButton(self.page, sync_button, "sync_button")
|
||||
|
||||
# Проверка подсказки
|
||||
self.toolbar.check_button_tooltip(button_name, expected_tooltip)
|
||||
sync_tooltip_button.check_tooltip_with_text(expected_tooltip)
|
||||
|
||||
logger.info(
|
||||
"Подсказка кнопки синхронизации (Reload) в ячейке %d: '%s'",
|
||||
|
|
@ -196,26 +159,6 @@ class ZTPConfigTab(BasePage):
|
|||
expected_tooltip
|
||||
)
|
||||
|
||||
def click_sync_button(self, index: int) -> None:
|
||||
"""Нажимает кнопку 'Reload' в указанной ячейке заголовка таблицы.
|
||||
|
||||
Перед кликом проверяет видимость кнопки.
|
||||
|
||||
Args:
|
||||
index: Индекс ячейки в заголовке таблицы.
|
||||
|
||||
Raises:
|
||||
AssertionError: Если индекс выходит за пределы или кнопка не найдена.
|
||||
"""
|
||||
sync_button = self.get_sync_button(index)
|
||||
|
||||
# Проверяем видимость перед кликом
|
||||
self.check_sync_button_visibility(index)
|
||||
|
||||
# Выполняем клик по кнопке
|
||||
sync_button.click()
|
||||
logger.info("Нажата кнопка синхронизации (Reload)")
|
||||
|
||||
def check_config_table_vertical_scrolling(self) -> bool:
|
||||
"""Проверяет возможность вертикальной прокрутки таблицы конфигурации.
|
||||
|
||||
|
|
|
|||
|
|
@ -96,10 +96,6 @@ class TestZTPConfigTab:
|
|||
browser.wait_for_timeout(3000)
|
||||
|
||||
# Тестирование кнопки синхронизации в первой ячейке заголовка (индекс 0)
|
||||
|
||||
# Регистрация кнопки в системе управления тулбаром
|
||||
config_tab.add_sync_button_to_toolbar(0)
|
||||
|
||||
# Проверка видимости кнопки
|
||||
config_tab.check_sync_button_visibility(0)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue