157 lines
8.9 KiB
Python
157 lines
8.9 KiB
Python
"""Модуль rack_locators содержит локаторы элементов страницы стойки.
|
||
|
||
Класс RackLocators хранит XPath локаторы для взаимодействия
|
||
с элементами интерфейса стойки оборудования в тестах.
|
||
|
||
"""
|
||
|
||
class RackLocators:
|
||
"""Класс для хранения локаторов элементов страницы стойки.
|
||
|
||
Содержит локаторы в формате XPath для поиска элементов:
|
||
- Вкладки стойки (верхние вкладки)
|
||
- Секции лицевой и обратной сторон стойки
|
||
- Юниты и устройства на стойке
|
||
- Поля формы редактирования и создания стойки
|
||
- Контейнеры и структурные элементы
|
||
"""
|
||
|
||
# Основной контейнер вкладок стойки (верхние вкладки)
|
||
ALL_TABS = "//div[@data-testid='CABINET_SHOW__tabs']//a[contains(@class, 'v-tabs__item')]"
|
||
|
||
# Универсальный локатор для любой вкладки по имени
|
||
TAB_BY_NAME = ("//div[starts-with(@data-testid, 'CABINET_SHOW__') and "
|
||
"contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item') and "
|
||
".//*[contains(., '{}')]]")
|
||
|
||
# Локатор для активной вкладки
|
||
ACTIVE_TAB = ("//div[@data-testid='CABINET_SHOW__tabs']"
|
||
"//a[contains(@class, 'v-tabs__item--active')]")
|
||
|
||
# Контейнер формы создания/редактирования стойки
|
||
FORM_INPUT_CONTAINER = "//div[contains(@class, 'flex xs6 pa-0')]"
|
||
|
||
# Форма редактирования стойки в модальном окне
|
||
RACK_EDIT_FORM = "[data-testid='cabinet-bar__cabinet-form']"
|
||
|
||
# Локаторы полей формы
|
||
INPUT_FORM_RACK_DATA = f"{RACK_EDIT_FORM}"
|
||
INPUT_FORM_RACK_DATA_FIELD_NAME = "[data-testid='cabinet-bar__main__text-field__name']"
|
||
INPUT_FORM_RACK_DATA_FIELD_COMMENT = "[data-testid='cabinet-bar__main__text-field__comment']"
|
||
INPUT_FORM_RACK_DATA_FIELD_SERIAL = "[data-testid='cabinet-bar__main__text-field__serial_number']"
|
||
INPUT_FORM_RACK_DATA_FIELD_INVENTORY = "[data-testid='cabinet-bar__main__text-field__inventory_number']"
|
||
INPUT_FORM_RACK_DATA_FIELD_POWER = "[data-testid='cabinet-bar__main__text-field__allocated_power']"
|
||
|
||
# Локаторы для combobox полей
|
||
INPUT_FORM_RACK_DATA_FIELD_CABLE_ENTRY = "[data-testid='cabinet-bar__select_enum__select-field__cable_input']"
|
||
INPUT_FORM_RACK_DATA_FIELD_CONDITION_TYPE = "[data-testid='cabinet-bar__select_enum__select-field__condition_type']"
|
||
INPUT_FORM_RACK_DATA_FIELD_DEPTH = "[data-testid='cabinet-bar__select_enum__select-field__depth']"
|
||
INPUT_FORM_RACK_DATA_FIELD_USIZE = "[data-testid='cabinet-bar__select_enum__select-field__usize']"
|
||
INPUT_FORM_RACK_DATA_FIELD_OWNER = "[data-testid='cabinet-bar__select__select-field__owner']"
|
||
INPUT_FORM_RACK_DATA_FIELD_SERVICE_PROVIDER = "[data-testid='cabinet-bar__select__select-field__service_provider']"
|
||
INPUT_FORM_RACK_DATA_FIELD_PROJECT = "[data-testid='cabinet-bar__select__select-field__project']"
|
||
|
||
# Чекбоксы
|
||
INPUT_FORM_RACK_DATA_CHECKBOX_VENTILATION = "[data-testid='cabinet-bar__main__checkbox__available_ventilation_panel'] input[type='checkbox']"
|
||
INPUT_FORM_RACK_DATA_CHECKBOX_VENTILATION_LABEL = "label:has-text('Вентиляционная панель')"
|
||
INPUT_FORM_RACK_DATA_CHECKBOX_VENTILATION_CONTAINER = "[data-testid='cabinet-bar__main__checkbox__available_ventilation_panel']"
|
||
|
||
# Локаторы для меню combobox
|
||
MENU_ACTIVE_RACK_FORM = "//div[contains(@class, 'menuable__content__active')]"
|
||
MENU_ACTIVE_ITEMS = "//div[@role='list']//div[@role='listitem']"
|
||
|
||
# Локаторы для выпадающего меню (которые использовались в старом коде)
|
||
DROPDOWN_LIST = 'div.menuable__content__active div[role="list"]'
|
||
DROPDOWN_ITEM_BY_TEXT = ('div.menuable__content__active '
|
||
'div[role="listitem"]:has(span:has-text("{}"))')
|
||
|
||
# CSS селекторы для ошибок валидации
|
||
ERROR_CSS_SELECTORS = ".error--text, .v-input--error"
|
||
|
||
# ================ ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОЙКИ ===================
|
||
|
||
# Общий контейнер стойки (включает кнопки переключения сторон и MAIN_CONTAINER)
|
||
RACK_CONTAINER = ("//div[contains(@class, 'layout active') and "
|
||
"contains(@class, 'row') and contains(@class, 'shrink')]")
|
||
|
||
# Основной контейнер стойки (изображение стойки)
|
||
MAIN_CONTAINER = "//div[contains(@class, 'layout cabinet')]"
|
||
|
||
# Кнопки переключения сторон
|
||
FRONT_SIDE_BUTTON = "//button[@data-testid='page-cabinet__btn__mount_front']"
|
||
BACK_SIDE_BUTTON = "//button[@data-testid='page-cabinet__btn__mount_rear']"
|
||
|
||
# Локаторы для определения активной стороны
|
||
ACTIVE_SIDE_BUTTON = "//button[contains(@class, 'primary--text')]"
|
||
|
||
# Кнопка добавления (add_circle)
|
||
ADD_CIRCLE_BUTTON = "//i[contains(text(), 'add_circle')]"
|
||
|
||
# Все юниты на стойке
|
||
ALL_UNITS = "//div[contains(@class, 'unit')]"
|
||
|
||
# Позиции юнитов
|
||
UNIT_POSITIONS = ("//div[contains(@class, 'headline') and "
|
||
"contains(@class, 'test-xs-center') and "
|
||
"contains(@class, 'unit-positions')]")
|
||
|
||
# Локатор для устройств
|
||
DEVICE_ELEMENTS = "//div[contains(@class, 'parent-class')]"
|
||
|
||
# Локатор для слотов в устройствах
|
||
DEVICE_SLOTS = "//div[contains(@class, 'slot')]"
|
||
|
||
# Кнопка редактирования свойств стойки
|
||
EDIT_BUTTON = "//button[@data-testid='CABINET_SHOW__btn__edit']"
|
||
|
||
# Кнопка "Скрыть стойку"
|
||
HIDE_RACK_BUTTON = ("//div[@data-testid='CABINET_SHOW__div__hideCabinet' and "
|
||
"contains(@class, 'cabinet_hide_button_trigger_show')]")
|
||
|
||
# Кнопка "Показать стойку"
|
||
SHOW_RACK_BUTTON = ("//div[@data-testid='CABINET_SHOW__div__hideCabinet' and "
|
||
"contains(@class, 'cabinet_hide_button_trigger_hide')]")
|
||
|
||
# Кнопки тулбара стойки
|
||
TOOLBAR_REPLACE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__replace']"
|
||
TOOLBAR_DONE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__done']"
|
||
TOOLBAR_CLOSE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__close']"
|
||
TOOLBAR_REMOVE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__remove']"
|
||
|
||
# Диалог удаления
|
||
REMOVE_DIALOG = "[data-testid='cabinet-bar__toolbar__dialog-remove']"
|
||
|
||
# Кнопки подтверждения удаления
|
||
CONFIRM_REMOVE_YES_BUTTON = "[data-testid='cabinet-bar__card_confirmation__btn__yes']"
|
||
CONFIRM_REMOVE_NO_BUTTON = "[data-testid='cabinet-bar__card_confirmation__btn__no']"
|
||
|
||
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДОК в модальном окне редактирования ==
|
||
|
||
# Локаторы для вкладок в модальном окне редактирования
|
||
MODAL_TAB_GENERAL = "[data-testid='cabinet-bar__main_tab']"
|
||
MODAL_TAB_IMAGE = "[data-testid='cabinet-bar__photo_tab']"
|
||
MODAL_TAB_SETTINGS = "[data-testid='cabinet-bar__settings_tab']"
|
||
|
||
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДКИ "Изображение" ===================
|
||
|
||
IMAGE_UPLOAD_CONTAINER = "div.layout.column.fill-height.justify-center.align-center"
|
||
IMAGE_UPLOAD_ICON = "i.mdi-add_photo_alternate"
|
||
IMAGE_UPLOAD_INPUT = "input.button-file-upload__input[type='file']"
|
||
IMAGE_PREVIEW = "img"
|
||
IMAGE_CONTAINER = "div.layout.column.fill-height.justify-center.align-center"
|
||
|
||
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДКИ "НАСТРОЙКИ" ===================
|
||
|
||
# Контейнер вкладки "Настройки"
|
||
SETTINGS_CONTAINER = "div.layout.back.fill-height.justify-start"
|
||
SETTINGS_ACCESS_MANAGER_TITLE = "div.v-toolbar__title:has-text('Менеджер доступа')"
|
||
|
||
# Локаторы для полей правил доступа
|
||
SETTINGS_READ_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.read']"
|
||
SETTINGS_WRITE_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.write']"
|
||
SETTINGS_SMS_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.sms']"
|
||
SETTINGS_EMAIL_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.email']"
|
||
SETTINGS_PUSH_RULES = "[data-testid*='rules.push']"
|
||
|
||
# Кнопки вкладки "Настройки"
|
||
SETTINGS_CANCEL_BUTTON = "[data-testid='LOCATION_SETTINGS__btn__cancel']" |