# forms/rack_create_form.py """Модуль для работы с формой создания стойки.""" from dataclasses import dataclass from typing import Dict from playwright.sync_api import Page from tools.logger import get_logger from locators.rack_locators import RackLocators from forms.base_rack_form import BaseRackForm, BaseRackData logger = get_logger("CREATE_RACK_FORM") @dataclass class CreateRackData(BaseRackData): """Класс для хранения данных создаваемой стойки.""" pass # Используем все поля из базового класса class CreateRackForm(BaseRackForm): """Компонент для работы с формой создания стойки.""" # Маппинг текстовых полей TEXT_FIELDS_MAPPING = { "Имя": ("name", "name_input"), "Комментарий": ("comment", "comment_input"), "Серийный номер": ("serial", "serial_input"), "Инвентарный номер": ("inventory", "inventory_input"), } # Маппинг combobox полей COMBOBOX_FIELDS_MAPPING = { "Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"), "Состояние": ("state", "state_input", "state_list"), "Высота в юнитах": ("usize", "usize_input", "usize_list"), "Глубина (мм)": ("depth", "depth_input", "depth_list"), "Владелец": ("owner", "owner_input", "owner_list"), "Обслуживающая организация": ("service_org", "service_input", "service_list"), "Проект/Титул": ("project", "project_input", "project_list") } # Локаторы для текстовых полей TEXT_FIELDS_LOCATORS = { "Имя": RackLocators.CREATE_RACK_FORM_FIELD_NAME, "Комментарий": RackLocators.CREATE_RACK_FORM_FIELD_COMMENT, "Серийный номер": RackLocators.CREATE_RACK_FORM_FIELD_SERIAL, "Инвентарный номер": RackLocators.CREATE_RACK_FORM_FIELD_INVENTORY, } # Локаторы для combobox полей COMBOBOX_FIELDS_LOCATORS = { "Высота в юнитах": RackLocators.CREATE_RACK_FORM_SELECT_USIZE, "Глубина (мм)": RackLocators.CREATE_RACK_FORM_SELECT_DEPTH, "Ввод кабеля": RackLocators.CREATE_RACK_FORM_SELECT_CABLE_INPUT, "Состояние": RackLocators.CREATE_RACK_FORM_SELECT_CONDITION_TYPE, "Владелец": RackLocators.CREATE_RACK_FORM_SELECT_OWNER, "Обслуживающая организация": RackLocators.CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER, "Проект/Титул": RackLocators.CREATE_RACK_FORM_SELECT_PROJECT, } def __init__(self, page: Page) -> None: """Инициализирует компонент формы создания стойки.""" super().__init__(page, RackLocators.CREATE_RACK_FORM_CONTAINER) def fill_rack_data(self, rack_data: CreateRackData) -> Dict[str, int]: """Заполняет поля формы создания стойки.""" results = { "text_fields_filled": 0, "combobox_fields_filled": 0, } self._fill_text_fields(rack_data, results) self._fill_combobox_fields(rack_data, results) logger.info(f"Filled {results['text_fields_filled']} text fields and " f"{results['combobox_fields_filled']} combobox fields") return results