Добавление теста создания стойки

new_add_edit_user
Radislav 2025-12-10 13:51:36 +03:00
parent 48eae76141
commit 2f2cf2c143
1 changed files with 32 additions and 28 deletions

View File

@ -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...")
# Основные обязательные поля