# rack_locators.py """Модуль rack_locators содержит локаторы элементов страницы стойки.""" class RackLocators: """Локаторы для элементов страницы стойки.""" # Основные вкладки - исправленные локаторы на основе реальной структуры TABS_CONTAINER = "//div[contains(@class, 'v-tabs')]" # Все элементы вкладок ALL_TABS = "//div[contains(@class, 'v-tabs__div') or contains(@class, 'v-tabs__item')]" # Конкретные вкладки по тексту GENERAL_INFO_TAB = "//div[contains(@class, 'v-tabs__div') and contains(., 'Общая информация')]" MAINTENANCE_TAB = "//div[contains(@class, 'v-tabs__div') and contains(., 'Обслуживание')]" EVENTS_TAB = "//div[contains(@class, 'v-tabs__div') and contains(., 'События')]" SERVICES_TAB = "//div[contains(@class, 'v-tabs__div') and contains(., 'Сервисы')]" # Универсальный локатор для любой вкладки по имени TAB_BY_NAME = "//div[contains(@class, 'v-tabs__div') and contains(., '{}')]" # Классы для проверки активности ACTIVE_TAB_CLASSES = ["v-tabs__item--active", "v-tab--active", "active", "accent--text"] # Контейнер формы FORM_CONTAINER = "//div[contains(@class, 'container')]" # Упрощенные локаторы для полей ввода NAME_FIELD = "//*[contains(text(), 'Имя')]/following::input[1]" SERIAL_NUMBER_FIELD = "//*[contains(text(), 'Серийный номер')]/following::input[1]" INVENTORY_NUMBER_FIELD = "//*[contains(text(), 'Инвентарный номер')]/following::input[1]" CABLE_ENTRY_FIELD = "//*[contains(text(), 'Ввод кабеля')]/following::input[1]" STATUS_FIELD = "//*[contains(text(), 'Состояние')]/following::input[1]" HEIGHT_FIELD = "//*[contains(text(), 'Высота в юнитах')]/following::input[1]" OWNER_FIELD = "//*[contains(text(), 'Владелец')]/following::input[1]" SERVICE_ORG_FIELD = "//*[contains(text(), 'Обслуживающая организация')]/following::input[1]" PROJECT_FIELD = "//*[contains(text(), 'Проект/Титул')]/following::input[1]" # Все input поля в форме ALL_INPUTS = "//input[@type='text']"