Добавление теста создания стойки
parent
48eae76141
commit
2f2cf2c143
|
|
@ -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...")
|
||||
|
||||
# Основные обязательные поля
|
||||
|
|
|
|||
Loading…
Reference in New Issue