Актуализированы тесты проверки сортировки столбца таблицы и пагинации табличных данных

sidebar_filter
nsubbot 2025-10-22 08:32:33 +03:00
parent c5099b814b
commit 9ffa043dc4
3 changed files with 48 additions and 21 deletions

View File

@ -1,7 +1,6 @@
"""Модуль компонента контейнера с перечнем событий. Содержит класс для работы с контейнерами,
их элементами и проверками."""
from datetime import datetime
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.toolbar_locators import ToolbarLocators
@ -83,15 +82,6 @@ class EventsContainerComponent(BaseComponent):
loc = self.container_locator.locator(self.table_locator)
self.events_table.click_arrow_button(loc, index)
def datetime2timestamp(self, date_string: str) -> float:
""" Конвертация строкового представления даты и времени в Unix timestamp """
# Формат, соответствующий строке с датой и временем
format_string = "%d.%m.%Y %H:%M:%S"
date_object = datetime.strptime(date_string, format_string)
return date_object.timestamp()
def get_current_data_set_number(self) -> int:
"""Получение номера текущего набора данных"""
@ -176,18 +166,20 @@ class EventsContainerComponent(BaseComponent):
self.events_table.check_table_headers(actual_headers, expected_headers)
def check_events_table_column_descending_order(self,
index: int) -> bool:
index: int,
convert2timestamp=False) -> bool:
"""Проверка, что заданный столбец таблицы упорядочен по убыванию.
Args:
index: Индекс столбца.
convert2timestamp: Конвертировать строковое представление даты и времени в Unix timestamp.
Returns:
True, если столбец таблицы упорядочен по убыванию. Иначе: False
"""
loc = self.container_locator.locator(self.table_locator)
return self.events_table.check_column_descending_order(loc, index)
return self.events_table.check_column_descending_order(loc, index, convert2timestamp)
def check_events_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы.

View File

@ -1,5 +1,6 @@
"""Модуль компонента таблицы. Содержит класс для работы с табличными данными."""
from datetime import datetime
from playwright.sync_api import Page, expect, Locator
from tools.logger import get_logger
from components.base_component import BaseComponent
@ -33,6 +34,25 @@ class TableComponent(BaseComponent):
assert arrow_button.is_enabled(), f"Arrow button is missing in {index} header cell"
arrow_button.click()
def datetime2timestamp(self, date_string: str) -> float|None:
""" Конвертация строкового представления даты и времени в Unix timestamp
Args:
date_string: Строка с датой и временем в формате d.m.Y H:M:S.
Returns:
float: Unix timestamp.
None: конвертация невозможна
"""
# Формат, соответствующий строке с датой и временем
format_string = "%d.%m.%Y %H:%M:%S"
try:
date_object = datetime.strptime(date_string, format_string)
return date_object.timestamp()
except ValueError:
return None
def get_arrow_button_state(self, table_locator: str | Locator, index: int) -> str:
""" Получение состояния кнопки-стрелочки вверх/вниз в ячейке заголовка таблицы
@ -201,12 +221,14 @@ class TableComponent(BaseComponent):
def check_column_descending_order(self,
locator: str | Locator,
index: int) -> bool:
index: int,
convert2timestamp=False) -> bool:
"""Проверка, что заданный столбец таблицы упорядочен по убыванию.
Args:
locator: Локатор таблицы.
index: Индекс столбца.
convert2timestamp: Конвертировать строковое представление даты и времени в Unix timestamp
Returns:
True, если столбец таблицы упорядочен по убыванию. Иначе: False
@ -223,9 +245,14 @@ class TableComponent(BaseComponent):
"Column index is out of range"
column = []
for i in range(len(table_content)):
column.append(table_content[i][index])
if convert2timestamp:
timestamp = self.datetime2timestamp(table_content[i][index])
assert timestamp, f"Error conversation to timestamp for {table_content[i][index]}"
column.append(timestamp)
else:
column.append(table_content[i][index])
return all([x > y for x, y in zip(column, column[1:])])
return all(column[i] >= column[i+1] for i in range(len(column) - 1))
def check_first_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость первой строки таблицы.

View File

@ -128,6 +128,7 @@ class TestSystemLogEventsContainer:
# Проверка видимости первой строки после прокрутки
system_log_events_container.check_events_table_first_row_visibility()
# @pytest.mark.develop
def test_events_table_column_sorting(self, browser: Page):
"""Проверяет сортировку колонки 'Время' в таблице событий.
@ -148,21 +149,23 @@ class TestSystemLogEventsContainer:
assert state == "down", "Arrow button should be down"
system_log_events_container.click_event_table_header_arrow(index)
browser.wait_for_timeout(300)
browser.wait_for_timeout(500)
state = system_log_events_container.get_arrow_button_state(index)
assert state == "up", "Arrow button should be up"
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index)
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index,
convert2timestamp=True)
assert not is_descending_order, "Column data should be in ascending order"
system_log_events_container.click_event_table_header_arrow(index)
browser.wait_for_timeout(300)
browser.wait_for_timeout(500)
state = system_log_events_container.get_arrow_button_state(index)
assert state == "down", "Arrow button should be down"
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index)
is_descending_order = system_log_events_container.check_events_table_column_descending_order(index,
convert2timestamp=True)
assert is_descending_order, "Column data should be in descending order"
@pytest.mark.develop
# @pytest.mark.develop
def test_events_table_pagination(self, browser: Page):
"""Проверяет возможность пагинации таблицы событий.
@ -193,8 +196,12 @@ class TestSystemLogEventsContainer:
# загрузка страниц от начала и до конца
# to_do: проверка, что происходит обновление содержимого таблицы
counter = 1
while not is_chevron_right_disabled:
# temporarily
max_pages = 20
while not is_chevron_right_disabled and counter <= max_pages:
# while not is_chevron_right_disabled:
system_log_events_container.click_chevron_right()
browser.wait_for_timeout(1500)
counter += 1
is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled()
@ -209,6 +216,7 @@ class TestSystemLogEventsContainer:
# to_do: проверка, что происходит обновление содержимого таблицы
while not is_chevron_left_disabled:
system_log_events_container.click_chevron_left()
browser.wait_for_timeout(1500)
counter -= 1
is_chevron_left_disabled = system_log_events_container.is_chevron_left_disabled()