Исходный код components_derived.sidebar_filter_component

"""Модуль компонента боковой панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс
для работы с формами ввода, их элементами и проверками."""

from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from elements.button_element import Button
from components.toolbar_component import ToolbarComponent
from components.base_component import BaseComponent
from components_derived.selection_bar_component import SelectionBarComponent
from components_derived.date_input_component import DateInput

logger = get_logger("SIDEBAR_FILTER")


[документация] class SidebarFilterComponent(BaseComponent): """Компонент боковой панели формы ввода полей фильтрации отображения данных в панели событий. Предоставляет методы для взаимодействия с формой, ее содержимым и проверок."""
[документация] def __init__(self, page: Page, locator: str | Locator): """Инициализирует компонент боковой панели формы ввода параметров фильтрации. Args: page: Экземпляр страницы Playwright locator: Локатор контейнера (строка или объект Locator) для которого вызывается панель """ super().__init__(page) self.sidebar_locator = self.get_locator(locator) self.toolbar = ToolbarComponent(page, "Настройки и параметры") # Поля ввода даты начала и даты окончания события self.start_time_filter = DateInput(page, self.sidebar_locator.locator( "//div[contains(@class, 'scrollarea__body')]/div").nth(0)) self.finish_time_filter = DateInput(page, self.sidebar_locator.locator( "//div[contains(@class, 'scrollarea__body')]/div").nth(1)) # Поля задания параметров фильтрации (произвольное количество) self.filtering_parameters = {} # Кнопки задания/сброса параметров фильтрации self.apply_button = Button(page, self.sidebar_locator.get_by_role("button").filter(has_text='Применить Фильтры'), "apply_button") self.reset_button = Button(page, self.sidebar_locator.get_by_role("button").filter(has_text='Сбросить Фильтры'), "reset_button")
# Действия:
[документация] def add_filtering_parameter(self, name: str, title: str) -> None: """Добавляет поле задания параметров фильтрации по заданному имени.""" loc = self.sidebar_locator.locator("//div[contains(@class, 'scrollarea__body')]").\ get_by_role("combobox").filter(has_text=title) self.filtering_parameters[name] = SelectionBarComponent(self.page, loc)
[документация] def get_filtering_parameter(self, name: str) -> SelectionBarComponent | None: """Возвращает поле задания параметров фильтрации по заданному или None, если не найдено.""" return self.filtering_parameters.get(name)
[документация] def get_start_time_filter(self) -> DateInput: """Возвращает поле задания параметров фильтрации даты начала.""" return self.start_time_filter
[документация] def get_finish_time_filter(self) -> DateInput: """Возвращает поле задания параметров фильтрации даты окончания.""" return self.finish_time_filter
[документация] def click_apply_button(self) -> None: """Клик по кнопке применения фильтра.""" self.apply_button.click()
[документация] def click_reset_button(self) -> None: """Клик по кнопке сброса фильтра.""" self.reset_button.click()
# Проверки:
[документация] def check_content(self) -> None: """Проверяет наличие постоянных полей панели параметров фильтрации.""" self.should_be_toolbar() self.start_time_filter.check_content("Дата начала") self.finish_time_filter.check_content("Дата окончания") self.check_apply_button_visibility() self.check_reset_button_visibility()
[документация] def check_vertical_scrolling(self, locator: str| Locator) -> bool: """Проверяет возможность вертикальной прокрутки формы.""" return self.is_scrollable_vertically(locator)
[документация] def check_apply_button_visibility(self) -> None: """Проверяет наличие кнопки применения фильтра.""" self.apply_button.check_visibility("Apply Filter Button is missing")
[документация] def check_reset_button_visibility(self) -> None: """Проверяет наличие кнопки сброса фильтра.""" self.reset_button.check_visibility("Reset Filter Button is missing")
[документация] def should_be_toolbar(self) -> None: """Проверяет наличие тулбара. Raises: AssertionError: Если тулбар отсутствует. """ self.toolbar.check_toolbar_presence_by_locator_and_title(self.sidebar_locator, "Sidebar Filter form toolbar is missing")