e-nms_qa_automation/components/table_component.py

68 lines
2.7 KiB
Python

from playwright.sync_api import Page, expect, Locator
from components.base_component import BaseComponent
from tools.logger import get_logger
logger = get_logger("TABLE")
class TableComponent(BaseComponent):
"""Компонент таблицы."""
def __init__(self, page: Page):
super().__init__(page)
# Действия:
def read(self, locator: str | Locator) -> list[list[str]]:
"""Читает данные из таблицы."""
table_data = []
table = self.get_locator(locator)
# Чтение заголовка таблицы
header_cells = table.locator("//thead/tr")
header_cell_text = header_cells.nth(0).inner_text()
header_data = header_cell_text.split('\n')
table_data.append(header_data)
# Чтение ячеек таблицы
rows = table.locator("//tbody/tr")
for i in range(rows.count()):
row = rows.nth(i)
cells = row.locator("td")
row_data = []
for j in range(cells.count()):
cell_text = cells.nth(j).inner_text()
row_data.append(cell_text)
table_data.append(row_data)
return table_data
# Проверки:
def check_first_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость первой строки таблицы."""
table = self.get_locator(locator)
first_row = table.locator("//tbody/tr").first
expect(first_row).to_be_visible(), "The first table row is not visible"
def check_last_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость последней строки таблицы."""
table = self.get_locator(locator)
last_row = table.locator("//tbody/tr").last
expect(last_row).to_be_visible(), "The last table row is not visible"
def check_row_highlighting(self, locator: str | Locator, row_index: int) -> None:
"""Проверяет подсветку строки при наведении."""
table = self.get_locator(locator)
row = table.locator("//tbody/tr").nth(row_index)
row.scroll_into_view_if_needed()
hover_element = row.locator(".body-row-hover")
initial_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")
row.hover()
self.page.wait_for_timeout(300)
new_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")
assert initial_color == new_color, "Color of row did not change when hovering the cursor"