e-nms_qa_automation/locators/rack_locators.py

179 lines
10 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль 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')]")
# ================ ЛОКАТОРЫ ДЛЯ ФОРМЫ СОЗДАНИЯ СТОЙКИ ===================
# Контейнер формы создания стойки
CREATE_RACK_FORM_CONTAINER = "//div[contains(@class, 'flex xs6 pa-0')]"
# Text
CREATE_RACK_FORM_FIELD_NAME = "[data-testid='create-location-bar__text-field__name']"
CREATE_RACK_FORM_FIELD_COMMENT = "[data-testid='create-location-bar__text-field__comment']"
CREATE_RACK_FORM_FIELD_SERIAL = "[data-testid='create-location-bar__text-field__serial_number']"
CREATE_RACK_FORM_FIELD_INVENTORY = "[data-testid='create-location-bar__text-field__inventory_number']"
# Сombobox
CREATE_RACK_FORM_SELECT_USIZE = "[data-testid='create-location-bar__select__usize']"
CREATE_RACK_FORM_SELECT_DEPTH = "[data-testid='create-location-bar__select__depth']"
CREATE_RACK_FORM_SELECT_CABLE_INPUT = "[data-testid='create-location-bar__select__cable_input']"
CREATE_RACK_FORM_SELECT_CONDITION_TYPE = "[data-testid='create-location-bar__select__condition_type']"
CREATE_RACK_FORM_SELECT_OWNER = "[data-testid='create-location-bar__select__owner']"
CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER = "[data-testid='create-location-bar__select__service_provider']"
CREATE_RACK_FORM_SELECT_PROJECT = "[data-testid='create-location-bar__select__project']"
# ================ ЛОКАТОРЫ ДЛЯ ФОРМЫ РЕДАКТИРОВАНИЯ СТОЙКИ ===================
# Форма редактирования стойки в модальном окне
EDIT_RACK_FORM = "[data-testid='cabinet-bar__cabinet-form']"
# Text
EDIT_RACK_FORM_FIELD_NAME = "[data-testid='cabinet-bar__main__text-field__name']"
EDIT_RACK_FORM_FIELD_COMMENT = "[data-testid='cabinet-bar__main__text-field__comment']"
EDIT_RACK_FORM_FIELD_SERIAL = "[data-testid='cabinet-bar__main__text-field__serial_number']"
EDIT_RACK_FORM_FIELD_INVENTORY = "[data-testid='cabinet-bar__main__text-field__inventory_number']"
EDIT_RACK_FORM_FIELD_POWER = "[data-testid='cabinet-bar__main__text-field__allocated_power']"
# Сombobox
EDIT_RACK_FORM_SELECT_CABLE_INPUT = "[data-testid='cabinet-bar__select_enum__select-field__cable_input']"
EDIT_RACK_FORM_SELECT_CONDITION_TYPE = "[data-testid='cabinet-bar__select_enum__select-field__condition_type']"
EDIT_RACK_FORM_SELECT_DEPTH = "[data-testid='cabinet-bar__select_enum__select-field__depth']"
EDIT_RACK_FORM_SELECT_USIZE = "[data-testid='cabinet-bar__select_enum__select-field__usize']"
EDIT_RACK_FORM_SELECT_OWNER = "[data-testid='cabinet-bar__select__select-field__owner']"
EDIT_RACK_FORM_SELECT_SERVICE_PROVIDER = "[data-testid='cabinet-bar__select__select-field__service_provider']"
EDIT_RACK_FORM_SELECT_PROJECT = "[data-testid='cabinet-bar__select__select-field__project']"
# Checkbox
EDIT_RACK_FORM_CHECKBOX_VENTILATION = "[data-testid='cabinet-bar__main__checkbox__available_ventilation_panel'] input[type='checkbox']"
EDIT_RACK_FORM_CHECKBOX_VENTILATION_LABEL = "label:has-text('Вентиляционная панель')"
EDIT_RACK_FORM_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']"