"""Модуль контейнера для отображения событий вкладки Действия. Содержит класс для работы с контейнером для отображения событий вкладки Действия через Playwright. """ from playwright.sync_api import Page, Locator from tools.logger import get_logger from locators.event_panel_locators import EventPanelLocators from components.events_container_component import EventsContainerComponent from components_derived.modal_view_task import ViewTaskModalWindow logger = get_logger("ACTIONS_EVENTS_CONTAINER") class ActionsEventsContainer(EventsContainerComponent): """Компонент контейнера для отображения событий вкладки Действия. Предоставляет методы для взаимодействия с элементами контейнера для отображения событий вкладки Действия. """ def __init__(self, page: Page, locator: str | Locator): """Инициализирует компонент контейнера для отображения событий вкладки Действия. Args: page: Экземпляр страницы Playwright. """ super().__init__(page, locator) toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR). \ filter(has_text="Фильтр Реальное время Архив") self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button") self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.REAL_TIME_TOOLBAR_BUTTON), "real_time_button") self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.ARCHIVE_TOOLBAR_BUTTON), "archive_button") self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button") self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button") events_filter = self.get_events_filter() events_filter.add_filtering_parameter("filter_status", "Статус") events_filter.add_filtering_parameter("filter_task_name", "НАИМЕНОВАНИЕ ЗАДАЧИ") events_filter.add_filtering_parameter("filter_object", "Объект") events_filter.add_filtering_parameter("filter_user", "Пользователь") # Действия: def click_archive_button(self) -> None: """Нажимает кнопку Архив на тулбаре.""" self.toolbar.check_button_visibility("archive_button") self.click_tab_button("archive_button") def click_real_time_button(self) -> None: """Нажимает кнопку Реальное время на тулбаре.""" self.toolbar.check_button_visibility("real_time_button") self.click_tab_button("real_time_button") def click_events_table_row(self, index) -> ViewTaskModalWindow: """Выбор и нажатие на строку таблицы по ее индексу.""" loc = self.get_events_table_row_locator(index) loc.scroll_into_view_if_needed() loc.click() return ViewTaskModalWindow(self.page) # Проверки: def check_content(self) -> None: """Проверяет содержимое контейнера для отображения событий вкладки Действия.""" expected_real_time_headers = ['ВРЕМЯ НАЧАЛА', 'ВРЕМЯ ЗАВЕРШЕНИЯ','СТАТУС', 'НАИМЕНОВАНИЕ ЗАДАЧИ', 'ОБЪЕКТ', 'ПОЛЬЗОВАТЕЛЬ', 'ОПИСАНИЕ'] expected_archive_headers = ['ВРЕМЯ НАЧАЛА', 'ВРЕМЯ ЗАВЕРШЕНИЯ','СТАТУС', 'НАИМЕНОВАНИЕ ЗАДАЧИ', 'ОБЪЕКТ', 'ПОЛЬЗОВАТЕЛЬ', 'ПРОЦЕССИНГ'] self.should_be_toolbar() self.should_be_toolbar_buttons() if not self.is_tab_active("real_time_button"): self.click_tab_button("real_time_button") self.wait_for_timeout(1000) self.check_events_table_content(expected_real_time_headers) if not self.is_tab_active("archive_button"): self.click_tab_button("archive_button") self.wait_for_timeout(1000) self.check_events_table_content(expected_archive_headers) events_filter = self.click_filter_button() events_filter.check_content() filter_status_bar = events_filter.get_filtering_parameter("filter_status") filter_status_title = filter_status_bar.get_selection_bar_title() assert filter_status_title == "Статус", "Filtering parameter bar 'Статус' is missing" filter_task_name_bar = events_filter.get_filtering_parameter("filter_task_name") filter_task_name_title = filter_task_name_bar.get_selection_bar_title() assert filter_task_name_title == "НАИМЕНОВАНИЕ ЗАДАЧИ", \ "Filtering parameter bar 'НАИМЕНОВАНИЕ ЗАДАЧИ' is missing" filter_object_bar = events_filter.get_filtering_parameter("filter_object") filter_object_title = filter_object_bar.get_selection_bar_title() assert filter_object_title == "Объект", "Filtering parameter bar 'Объект' is missing" filter_user_bar = events_filter.get_filtering_parameter("filter_user") filter_user_title = filter_user_bar.get_selection_bar_title() assert filter_user_title == "Пользователь", "Filtering parameter bar 'Пользователь' is missing" def check_events_table_content(self, expected_headers: list[str]) -> None: """Проверка содержимого таблицы""" self.should_be_events_table() events_table = self.get_events_table_content() if len(events_table) == 0: assert False, "The contents of the events table are missing" self.check_events_table_headers(events_table[0], expected_headers) if len(events_table) == 1: logger.info("Table body is missing") self.should_be_pagination_buttons() def should_be_toolbar_buttons(self) -> None: """Проверяет наличие и видимость кнопок тулбара.""" self.toolbar.check_button_visibility("filter_button") self.toolbar.check_button_visibility("real_time_button") self.toolbar.check_button_visibility("archive_button") self.toolbar.check_button_visibility("export_to_pdf_button") self.toolbar.check_button_visibility("export_to_csv_button")