# RackLocators - Документация тестов eNODE-Мониторинг

Skip to content

# RackLocators

Модуль rack_locators содержит локаторы элементов страницы стойки.

Класс RackLocators хранит XPath локаторы для взаимодействия с элементами интерфейса стойки оборудования в тестах.

## `RackLocators`

Класс для хранения локаторов элементов страницы стойки.

Содержит локаторы в формате XPath для поиска элементов: - Вкладки стойки (верхние вкладки) - Секции лицевой и обратной сторон стойки - Юниты и устройства на стойке - Поля формы редактирования стойки - Контейнеры и структурные элементы

Source code in `locators\rack_locators.py`

     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87

    class RackLocators:
        """Класс для хранения локаторов элементов страницы стойки.

        Содержит локаторы в формате XPath для поиска элементов:
        - Вкладки стойки (верхние вкладки)
        - Секции лицевой и обратной сторон стойки
        - Юниты и устройства на стойке
        - Поля формы редактирования стойки
        - Контейнеры и структурные элементы
        """

        # Основной контейнер вкладок стойки (верхние вкладки)
        TABS_CONTAINER = "//div[@class='v-tabs__container']"

        # Все элементы верхних вкладок стойки
        ALL_TABS = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item')]"

        # Универсальный локатор для любой вкладки по имени
        TAB_BY_NAME = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., '{}')]"

        # Конкретные вкладки по тексту
        GENERAL_INFO_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Общая информация')]"
        MAINTENANCE_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Обслуживание')]"
        EVENTS_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'События')]"
        SERVICES_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Сервисы')]"

        # Классы для проверки активности
        ACTIVE_TAB_CLASSES = ["accent--text", "v-tabs__item--active"]

        # Локатор для активной вкладки
        ACTIVE_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item--active')]"

        # Контейнер формы
        FORM_CONTAINER = "//div[contains(@class, 'container')]"

        # Локаторы полей
        NAME_FIELD = "//input[@aria-label='Имя']"
        SERIAL_NUMBER_FIELD = "//input[@aria-label='Серийный номер']"
        INVENTORY_NUMBER_FIELD = "//input[@aria-label='Инвентарный номер']"
        CABLE_ENTRY_FIELD = "//input[@aria-label='Ввод кабеля']"
        STATUS_FIELD = "//input[@aria-label='Состояние']"
        HEIGHT_FIELD = "//input[@aria-label='Высота в юнитах']"
        OWNER_FIELD = "//input[@aria-label='Владелец']"
        SERVICE_ORG_FIELD = "//input[@aria-label='Обслуживающая организация']"
        PROJECT_FIELD = "//input[@aria-label='Проект/Титул']"

        # Локаторы для отображения сторон стойки
        FRONT_SIDE_CONTAINER = "//div[contains(@class, 'cabinet') and not(contains(@class, 'back'))]"
        BACK_SIDE_CONTAINER = "//div[contains(@class, 'cabinet') and contains(@class, 'back')]"

        FRONT_SIDE_TITLE = "//span[contains(@class, 'subheading') and contains(text(), 'Лицевая сторона')]"
        BACK_SIDE_TITLE = "//span[contains(@class, 'subheading') and contains(text(), 'Обратная сторона')]"

        # Юниты на лицевой стороне
        FRONT_SIDE_UNITS = ".cabinet:not(.back) .unit, .unit:not(.back)"

        # Юниты на обратной стороне
        BACK_SIDE_UNITS = ".cabinet.back .unit"

        # Локатор для всех юнитов
        ALL_UNITS = ".unit"

        # Устройства на лицевой стороне
        FRONT_SIDE_DEVICES = "//*[contains(@class, 'parent-class')]"

        # Устройства на обратной стороне
        BACK_SIDE_DEVICES = "//*[contains(@class, 'parent-class')]"

        # Позиции юнитов
        UNIT_POSITIONS = "//div[contains(@class, 'unit-positions')]"

        # Контейнер с обеими сторонами
        SIDES_CONTAINER = "//div[contains(@class, 'layout row shrink fill-height ma-0 pa-0')]"

        # ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОРОН
        # Основные секции сторон
        FRONT_SIDE_SECTION = "//span[contains(text(), 'Лицевая сторона')]//ancestor::div[contains(@class, 'flex shrink')]"
        BACK_SIDE_SECTION = "//span[contains(text(), 'Обратная сторона')]//ancestor::div[contains(@class, 'flex shrink')]"

        # Основной контейнер стойки
        MAIN_CONTAINER = "//div[contains(@class, 'layout row')]"