102 lines
4.2 KiB
Python
102 lines
4.2 KiB
Python
"""Модуль компонента панели выбора значения.
|
||
|
||
Содержит класс для работы с компонентом панели выбора значения через 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)
|
||
|
||
# Проверки:
|