"""Модуль компонента панели выбора значения. Содержит класс для работы с компонентом панели выбора значения через Playwright. """ from playwright.sync_api import Page, Locator, expect from tools.logger import get_logger from locators.selection_bar_locators import SelectionBarLocators from locators.combobox_locators import ComboboxLocators from components.dropdown_list_component import DropdownList from components.base_component import BaseComponent logger = get_logger("FILTER_PARAMETER_BAR") class SelectionBarComponent(BaseComponent): """Компонент панели выбора значения. Предоставляет методы для взаимодействия с элементами компонента панели выбора значения. """ def __init__(self, page: Page, locator: str | Locator): """Инициализирует компонент панели выбора значения. Args: page: Экземпляр страницы Playwright. locator: Локатор панели выбора значения (строка или объект Locator) """ super().__init__(page) # Локатор панели параметра фильтрации self.selection_bar_locator = self.get_locator(locator) # При нажатии на панель появляется выпадающий список с параметрами фильтрации для выбора self.selected_values_list = DropdownList(self.page) # Действия: def clear_selections(self) -> None: """ Удаление ранее выбранных значений """ selected_values = self.get_selected_values() if len(selected_values) > 0: clear_button_locator = self.selection_bar_locator.\ locator(SelectionBarLocators.CLEAR_SELECTION_BUTTON) clear_button_locator.click() def get_selection_bar_title(self) -> str: """ Возвращает название панели выбора значения """ title_locator = self.selection_bar_locator.locator("//label") return title_locator.text_content() def get_selected_values(self) -> list[str]: """ Возвращает список выбранных значений """ selected_values_locator = self.selection_bar_locator.\ locator(SelectionBarLocators.PARAMETERS_SELECTED) selected_values = selected_values_locator.all_inner_texts() return selected_values[0].splitlines() def open_values_list(self) -> None: """ Открытие выпадающего списка путем нажатия на панель выбора значения """ expect(self.selection_bar_locator).to_be_visible() self.selection_bar_locator.click() def get_available_options(self) -> list[str]: """ Возвращает список всех доступных опций из выпадающего списка. Returns: list[str]: Список доступных опций """ logger.info("Получение списка доступных опций из выпадающего списка...") # Открываем выпадающий список self.open_values_list() # Ждем появления списка self.wait_for_timeout(1000) # Получаем все элементы списка options = self.selected_values_list.get_item_names(SelectionBarLocators.LIST_ITEMS) # Закрываем список (кликаем вне его) self.page.mouse.click(10, 10) self.wait_for_timeout(500) logger.info(f"Найдено доступных опций: {len(options)} - {options}") return options def select_value(self, name: str) -> None: """ Выбор значения из списка """ self.selected_values_list.check_item_with_text(name) self.selected_values_list.click_item_with_text(name) # Проверки: