From 2f2cf2c14336685fce5f5fb262563209b44fe242 Mon Sep 17 00:00:00 2001 From: Radislav Date: Wed, 10 Dec 2025 13:51:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accounting_objects/rack_maker.py | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/components_derived/accounting_objects/rack_maker.py b/components_derived/accounting_objects/rack_maker.py index e7135ed..f684208 100644 --- a/components_derived/accounting_objects/rack_maker.py +++ b/components_derived/accounting_objects/rack_maker.py @@ -12,6 +12,7 @@ logger = get_logger("RACK_MAKER") @dataclass class RackData: """Класс для хранения данных стойки.""" + name: str height: str = "42" depth: str = "1000" @@ -35,6 +36,7 @@ class RackObjectMaker(BaseComponent): Args: page: Экземпляр страницы Playwright """ + super().__init__(page) # Действия: @@ -46,40 +48,47 @@ class RackObjectMaker(BaseComponent): Args: rack_data: Данные стойки """ + logger.info(f"Filling rack data: {rack_data.name}") - self._fill_required_fields(rack_data) - self._fill_optional_fields(rack_data) + self._fill_text_fields(rack_data) self._fill_combobox_fields(rack_data) logger.info("Rack data filled successfully") - def _fill_required_fields(self, rack_data: RackData) -> None: - """Заполняет обязательные поля.""" - if rack_data.name: - name_field = self.page.locator(RackLocators.RACK_NAME_FIELD).first - name_field.fill(rack_data.name) - logger.info(f"Filled 'Name' field: {rack_data.name}") + def _fill_text_fields(self, rack_data: RackData) -> None: + """Заполняет текстовые поля.""" - def _fill_optional_fields(self, rack_data: RackData) -> None: - """Заполняет опциональные поля.""" + def clear_and_fill(locator, value: str, field_name: str): + """Очищает поле и заполняет его значением.""" + + field = self.page.locator(locator).first + # Очищаем поле + field.click() + field.press("Control+A") + field.press("Backspace") + # Заполняем значение + field.fill(value) + logger.info(f"Filled '{field_name}': {value}") + + # Обязательные поля. + if rack_data.name: + clear_and_fill(RackLocators.RACK_NAME_FIELD, rack_data.name, "Name") + + # Опциональные поля. if rack_data.serial: - serial_field = self.page.locator(RackLocators.RACK_SERIAL_FIELD).first - serial_field.fill(rack_data.serial) - logger.info(f"Filled serial number: {rack_data.serial}") + clear_and_fill(RackLocators.RACK_SERIAL_FIELD, rack_data.serial, "Serial number") if rack_data.inventory: - inventory_field = self.page.locator(RackLocators.RACK_INVENTORY_FIELD).first - inventory_field.fill(rack_data.inventory) - logger.info(f"Filled inventory number: {rack_data.inventory}") + clear_and_fill(RackLocators.RACK_INVENTORY_FIELD, rack_data.inventory, "Inventory number") if rack_data.comment: - comment_field = self.page.locator(RackLocators.RACK_COMMENT_FIELD).first - comment_field.fill(rack_data.comment) - logger.info(f"Added comment: {rack_data.comment}") + clear_and_fill(RackLocators.RACK_COMMENT_FIELD, rack_data.comment, "Comment") def _fill_combobox_fields(self, rack_data: RackData) -> None: """Заполняет combobox поля.""" + + # Обязательные поля. if rack_data.height: self._fill_combobox_field("Height in units", rack_data.height, RackLocators.RACK_HEIGHT_FIELD) @@ -90,6 +99,7 @@ class RackObjectMaker(BaseComponent): RackLocators.RACK_DEPTH_FIELD) logger.info(f"Selected depth: {rack_data.depth} mm") + # Опциональные поля. if rack_data.cable_entry: self._fill_combobox_field("Cable entry", rack_data.cable_entry, RackLocators.RACK_CABLE_ENTRY_FIELD) @@ -124,6 +134,7 @@ class RackObjectMaker(BaseComponent): value: Значение для установки field_locator: Локатор поля """ + logger.info(f"Filling field '{field_name}' with value '{value}'...") # Используем first() для избежания strict mode violation @@ -157,6 +168,7 @@ class RackObjectMaker(BaseComponent): Returns: str: Локатор поля """ + field_map = { "Имя": RackLocators.RACK_NAME_FIELD, "Высота в юнитах": RackLocators.RACK_HEIGHT_FIELD, @@ -168,15 +180,6 @@ class RackObjectMaker(BaseComponent): return field_map[field_name] - def wait_for_timeout(self, timeout: int) -> None: - """ - Ожидает указанное количество миллисекунд. - - Args: - timeout: Время ожидания в миллисекундах - """ - self.page.wait_for_timeout(timeout) - # Проверки: def check_rack_fields_presence(self) -> None: @@ -186,6 +189,7 @@ class RackObjectMaker(BaseComponent): Raises: AssertionError: Если какое-либо поле не найдено """ + logger.info("Checking rack fields presence...") # Основные обязательные поля