Compare commits
5 Commits
main
...
ra4/manage
| Author | SHA1 | Date |
|---|---|---|
|
|
766d8c3a33 | |
|
|
743815cab4 | |
|
|
a4fecf5d68 | |
|
|
0643990d59 | |
|
|
4e3ae8227d |
|
|
@ -560,11 +560,11 @@ class ModalEditRack(ModalWindowComponent):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return [
|
return [
|
||||||
"TestUserRulesAdmin",
|
"admin",
|
||||||
"TestUserRulesOper",
|
"manager",
|
||||||
"TestUserRulesManager",
|
"operator",
|
||||||
"TestUserRulesSec",
|
"sec",
|
||||||
"TestUserRulesCollector"
|
"collector"
|
||||||
]
|
]
|
||||||
|
|
||||||
def _process_single_field(
|
def _process_single_field(
|
||||||
|
|
|
||||||
|
|
@ -56,16 +56,8 @@ class RackPage(BasePage):
|
||||||
# Действия
|
# Действия
|
||||||
|
|
||||||
def click_edit_button(self) -> None:
|
def click_edit_button(self) -> None:
|
||||||
"""
|
""" Кликает на кнопку 'Изменить'."""
|
||||||
Кликает на кнопку 'Изменить'.
|
|
||||||
"""
|
|
||||||
logger.debug("Clicking on 'Edit' button...")
|
|
||||||
|
|
||||||
# Проверяем видимость кнопки
|
|
||||||
self.toolbar.check_button_visibility("edit")
|
|
||||||
self.toolbar.check_button_tooltip("edit", "Изменить")
|
|
||||||
|
|
||||||
# Кликаем на кнопку
|
|
||||||
self.toolbar.get_button_by_name("edit").click()
|
self.toolbar.get_button_by_name("edit").click()
|
||||||
self.wait_for_timeout(1000)
|
self.wait_for_timeout(1000)
|
||||||
|
|
||||||
|
|
@ -458,7 +450,7 @@ class RackPage(BasePage):
|
||||||
self.toolbar.check_button_tooltip("edit", "Изменить")
|
self.toolbar.check_button_tooltip("edit", "Изменить")
|
||||||
|
|
||||||
# Кликаем на кнопку "Изменить" для проверки функциональности
|
# Кликаем на кнопку "Изменить" для проверки функциональности
|
||||||
self.toolbar.get_button_by_name("edit").click()
|
#self.toolbar.get_button_by_name("edit").click()
|
||||||
|
|
||||||
|
|
||||||
def should_have_hide_rack_button(self) -> None:
|
def should_have_hide_rack_button(self) -> None:
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,14 @@ from locators.rack_locators import RackLocators
|
||||||
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
||||||
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
||||||
from pages.location_page import LocationPage
|
from pages.location_page import LocationPage
|
||||||
|
from components_derived.modal_edit_rack import ModalEditRack, RackEditData
|
||||||
from pages.login_page import LoginPage
|
from pages.login_page import LoginPage
|
||||||
from pages.main_page import MainPage
|
from pages.main_page import MainPage
|
||||||
from pages.rack_page import RackPage
|
from pages.rack_page import RackPage
|
||||||
|
from components.alert_component import AlertComponent
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger("CREATE_RACK_ELEMENT_TEST")
|
logger = get_logger("CREATE_RACK_TEST")
|
||||||
|
|
||||||
logger.setLevel("INFO")
|
logger.setLevel("INFO")
|
||||||
|
|
||||||
# @pytest.mark.smoke
|
# @pytest.mark.smoke
|
||||||
|
|
@ -136,6 +137,12 @@ class TestCreateRackElement:
|
||||||
# Нажимаем кнопку создания
|
# Нажимаем кнопку создания
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном создании
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = f"Элемент {rack_name} создан"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
||||||
"""Удаляет стойку через контекстное меню.
|
"""Удаляет стойку через контекстное меню.
|
||||||
|
|
||||||
|
|
@ -153,41 +160,34 @@ class TestCreateRackElement:
|
||||||
self.main_page.wait_for_timeout(500)
|
self.main_page.wait_for_timeout(500)
|
||||||
|
|
||||||
# 2. Проверяем и нажимаем кнопку "Изменить"
|
# 2. Проверяем и нажимаем кнопку "Изменить"
|
||||||
logger.debug("Step 1: Clicking 'Edit' button...")
|
|
||||||
rack_page = RackPage(browser)
|
rack_page = RackPage(browser)
|
||||||
|
|
||||||
# Проверяем видимость кнопки
|
# Проверяем видимость и тултип кнопки
|
||||||
rack_page.toolbar.check_button_visibility("edit")
|
rack_page.should_be_toolbar_buttons()
|
||||||
|
|
||||||
# Проверяем тултип кнопки
|
|
||||||
rack_page.toolbar.check_button_tooltip("edit", "Изменить")
|
|
||||||
|
|
||||||
# Кликаем на кнопку "Изменить"
|
# Кликаем на кнопку "Изменить"
|
||||||
rack_page.toolbar.get_button_by_name("edit").click()
|
rack_page.click_edit_button()
|
||||||
|
|
||||||
logger.debug("Edit button clicked, waiting for edit form...")
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# 3. Используем метод click_remove_button, который обрабатывает весь процесс удаления
|
# 3. Создаем экземпляр ModalRackEditRack
|
||||||
# включая диалог подтверждения
|
rack_edit = ModalEditRack(browser, rack_name)
|
||||||
logger.debug("Clicking remove button...")
|
|
||||||
rack_page.click_remove_button()
|
|
||||||
|
|
||||||
# 4. Проверяем уведомление об успешном удалении - требуется создать разработчику (заведена задача)
|
# Используем метод для удаления
|
||||||
# Создаем экземпляр фрейма для доступа к alert компоненту
|
rack_edit.click_remove_button()
|
||||||
# create_child_frame = CreateChildElementFrame(browser)
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# Проверяем наличие любого alert-окна (не обязательно точного текста)
|
# 4. Проверяем уведомление об успешном удалении
|
||||||
# create_child_frame.alert.check_alert_presence("")
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Успешно удалено"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
|
||||||
# Получаем текст alert, чтобы убедиться что удаление прошло успешно
|
# Получаем текст alert для логирования
|
||||||
# alert_text = create_child_frame.alert.get_text()
|
alert_text = alert.get_text()
|
||||||
# logger.debug(f"Alert text after deletion: {alert_text}")
|
logger.debug(f"Alert text after deletion: {alert_text}")
|
||||||
|
|
||||||
# Проверяем что в тексте есть указание на успешное удаление
|
|
||||||
# assert "удален" in alert_text.lower() or "успешно" in alert_text.lower()
|
|
||||||
|
|
||||||
# Закрываем alert
|
# Закрываем alert
|
||||||
# create_child_frame.alert.close_alert()
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
logger.debug("Rack deletion completed")
|
logger.debug("Rack deletion completed")
|
||||||
|
|
||||||
|
|
@ -249,17 +249,19 @@ class TestCreateRackElement:
|
||||||
# Проверяем валидацию полей
|
# Проверяем валидацию полей
|
||||||
logger.debug("Checking validation results")
|
logger.debug("Checking validation results")
|
||||||
|
|
||||||
|
alert = AlertComponent(create_child_frame.page)
|
||||||
|
|
||||||
# Обрабатываем alert-окна
|
# Обрабатываем alert-окна
|
||||||
if not height_value:
|
if not height_value:
|
||||||
logger.debug("Expecting height validation alert")
|
logger.debug("Expecting height validation alert")
|
||||||
create_child_frame.alert.check_alert_presence(expected_alert_height)
|
alert.check_alert_presence(expected_alert_height)
|
||||||
create_child_frame.alert.close_alert_by_text(expected_alert_height)
|
alert.close_alert_by_text(expected_alert_height)
|
||||||
logger.debug("Height alert handled")
|
logger.debug("Height alert handled")
|
||||||
|
|
||||||
if not depth_value:
|
if not depth_value:
|
||||||
logger.debug("Expecting depth validation alert")
|
logger.debug("Expecting depth validation alert")
|
||||||
create_child_frame.alert.check_alert_presence(expected_alert_depth)
|
alert.check_alert_presence(expected_alert_depth)
|
||||||
create_child_frame.alert.close_alert_by_text(expected_alert_depth)
|
alert.close_alert_by_text(expected_alert_depth)
|
||||||
logger.debug("Depth alert handled")
|
logger.debug("Depth alert handled")
|
||||||
|
|
||||||
# Проверяем подсветку обязательных полей
|
# Проверяем подсветку обязательных полей
|
||||||
|
|
@ -321,22 +323,15 @@ class TestCreateRackElement:
|
||||||
# Нажимаем кнопку "Добавить"
|
# Нажимаем кнопку "Добавить"
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
|
|
||||||
# 1. Проверяем уведомление об успешном создании стойки - требуется создать разработчику (заведена задача)
|
# Проверяем уведомление об успешном создании стойки
|
||||||
# Проверяем наличие alert-окна
|
alert = AlertComponent(browser)
|
||||||
# create_child_frame.alert.check_alert_presence("")
|
expected_alert_text = f"Элемент {rack_name} создан"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
# Получаем текст alert
|
|
||||||
# alert_text = create_child_frame.alert.get_text()
|
|
||||||
# logger.debug(f"Alert text after creation: {alert_text}")
|
|
||||||
|
|
||||||
# Проверяем, что в тексте есть указание на успешное создание
|
|
||||||
# assert "создан" in alert_text.lower() or "успешно" in alert_text.lower()
|
|
||||||
# assert final_rack_name in alert_text
|
|
||||||
|
|
||||||
# Закрываем alert
|
# Закрываем alert
|
||||||
# create_child_frame.alert.close_alert()
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
# 2. Проверяем, что стойка создана и отображается
|
# Проверяем, что стойка создана и отображается
|
||||||
logger.debug(f"Verifying that rack '{rack_name}' was created...")
|
logger.debug(f"Verifying that rack '{rack_name}' was created...")
|
||||||
|
|
||||||
# Обновляем навигационную панель
|
# Обновляем навигационную панель
|
||||||
|
|
@ -347,7 +342,6 @@ class TestCreateRackElement:
|
||||||
assert rack_exists, f"Rack '{rack_name}' should be visible in navigation panel after creation"
|
assert rack_exists, f"Rack '{rack_name}' should be visible in navigation panel after creation"
|
||||||
|
|
||||||
logger.debug(f"Rack '{rack_name}' is visible in navigation panel")
|
logger.debug(f"Rack '{rack_name}' is visible in navigation panel")
|
||||||
|
|
||||||
logger.debug("Test for creating 'Rack' child element completed successfully")
|
logger.debug("Test for creating 'Rack' child element completed successfully")
|
||||||
|
|
||||||
def test_create_rack_content(self, browser: Page) -> None:
|
def test_create_rack_content(self, browser: Page) -> None:
|
||||||
|
|
@ -429,18 +423,19 @@ class TestCreateRackElement:
|
||||||
|
|
||||||
# Нажимаем кнопку создания
|
# Нажимаем кнопку создания
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
create_child_frame.wait_for_timeout(2000)
|
create_child_frame.wait_for_timeout(1000)
|
||||||
|
|
||||||
# Проверяем наличие alert-окна с сообщением о дублирующемся имени
|
# Проверяем наличие alert-окна с сообщением о дублирующемся имени
|
||||||
|
alert = AlertComponent(browser)
|
||||||
expected_alert_text = f"Имя {rack_name} уже используется"
|
expected_alert_text = f"Имя {rack_name} уже используется"
|
||||||
create_child_frame.alert.check_alert_presence(expected_alert_text)
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
|
||||||
# Проверяем, что остались на странице создания (стойка не создана)
|
|
||||||
create_child_frame.check_toolbar_title('Создать дочерний элемент в')
|
|
||||||
|
|
||||||
# Закрываем alert-окно с помощью кнопки закрытия
|
# Закрываем alert-окно с помощью кнопки закрытия
|
||||||
create_child_frame.wait_for_timeout(2000)
|
create_child_frame.wait_for_timeout(2000)
|
||||||
create_child_frame.alert.close_alert_by_text(expected_alert_text)
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
|
# Проверяем, что остались на странице создания (стойка не создана)
|
||||||
|
create_child_frame.check_toolbar_title('Создать дочерний элемент в')
|
||||||
|
|
||||||
logger.debug("System prevented creating rack with duplicate name")
|
logger.debug("System prevented creating rack with duplicate name")
|
||||||
|
|
||||||
|
|
@ -572,20 +567,13 @@ class TestCreateRackElement:
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
create_child_frame.wait_for_timeout(500)
|
create_child_frame.wait_for_timeout(500)
|
||||||
|
|
||||||
# Проверяем уведомление об успешном создании стойки - требуется создать разработчику (заведена задача)
|
# Проверяем уведомление об успешном создании стойки
|
||||||
# Проверяем наличие alert-окна
|
alert = AlertComponent(browser)
|
||||||
# create_child_frame.alert.check_alert_presence("")
|
expected_alert_text = f"Элемент {final_rack_name} создан"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
# Получаем текст alert
|
|
||||||
# alert_text = create_child_frame.alert.get_text()
|
|
||||||
# logger.debug(f"Alert text after creation: {alert_text}")
|
|
||||||
|
|
||||||
# Проверяем что в тексте есть указание на успешное создание
|
|
||||||
# assert "создан" in alert_text.lower() or "успешно" in alert_text.lower()
|
|
||||||
# assert final_rack_name in alert_text
|
|
||||||
|
|
||||||
# Закрываем alert
|
# Закрываем alert
|
||||||
# create_child_frame.alert.close_alert()
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
logger.debug("Required fields validation test completed successfully")
|
logger.debug("Required fields validation test completed successfully")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,14 @@ from pages.rack_page import RackPage
|
||||||
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
||||||
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
||||||
from components_derived.modal_edit_rack import ModalEditRack, RackEditData
|
from components_derived.modal_edit_rack import ModalEditRack, RackEditData
|
||||||
|
from components.alert_component import AlertComponent
|
||||||
from tools.logger import get_logger
|
from tools.logger import get_logger
|
||||||
|
|
||||||
# Константы
|
# Константы
|
||||||
RACK_NAME = "Test-Rack-Functionality"
|
RACK_NAME = "Test-Rack-Functionality"
|
||||||
|
|
||||||
# Инициализация логгера для всего модуля
|
# Инициализация логгера для всего модуля
|
||||||
logger = get_logger("RACK_TESTS")
|
logger = get_logger("RACK_EDIT_TESTS")
|
||||||
logger.setLevel("INFO")
|
logger.setLevel("INFO")
|
||||||
|
|
||||||
class TestRackTab:
|
class TestRackTab:
|
||||||
|
|
@ -101,6 +102,12 @@ class TestRackTab:
|
||||||
# Нажимаем кнопку создания
|
# Нажимаем кнопку создания
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном создании
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = f"Элемент {rack_name} создан"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
logger.info(f"Rack '{rack_name}' created successfully")
|
logger.info(f"Rack '{rack_name}' created successfully")
|
||||||
|
|
||||||
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
||||||
|
|
@ -123,20 +130,26 @@ class TestRackTab:
|
||||||
# 2. Проверяем и нажимаем кнопку "Изменить"
|
# 2. Проверяем и нажимаем кнопку "Изменить"
|
||||||
rack_page = RackPage(browser)
|
rack_page = RackPage(browser)
|
||||||
|
|
||||||
# Проверяем видимость кнопки
|
# Проверяем видимость и тултип кнопки
|
||||||
rack_page.toolbar.check_button_visibility("edit")
|
rack_page.should_be_toolbar_buttons()
|
||||||
|
|
||||||
# Проверяем тултип кнопки
|
|
||||||
rack_page.toolbar.check_button_tooltip("edit", "Изменить")
|
|
||||||
|
|
||||||
# Кликаем на кнопку "Изменить"
|
# Кликаем на кнопку "Изменить"
|
||||||
rack_page.toolbar.get_button_by_name("edit").click()
|
rack_page.click_edit_button()
|
||||||
|
|
||||||
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# 3. Создаем экземпляр ModalRackEditRack
|
# 3. Создаем экземпляр ModalRackEditRack
|
||||||
rack_edit = ModalEditRack(browser, rack_name)
|
rack_edit = ModalEditRack(browser, rack_name)
|
||||||
|
|
||||||
# Используем метод для удаления
|
# Используем метод для удаления
|
||||||
rack_edit.click_remove_button()
|
rack_edit.click_remove_button()
|
||||||
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
|
# 4. Проверяем уведомление об успешном удалении
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Успешно удалено"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
logger.info(f"Rack '{rack_name}' deleted successfully")
|
logger.info(f"Rack '{rack_name}' deleted successfully")
|
||||||
|
|
||||||
|
|
@ -237,7 +250,7 @@ class TestRackTab:
|
||||||
# Создаем тестовые данные для заполнения всех полей
|
# Создаем тестовые данные для заполнения всех полей
|
||||||
rack_edit_data = RackEditData(
|
rack_edit_data = RackEditData(
|
||||||
# Основные поля
|
# Основные поля
|
||||||
name="Test-Rack-Functionality",
|
name=RACK_NAME,
|
||||||
serial="SN123456789",
|
serial="SN123456789",
|
||||||
inventory="INV987654321",
|
inventory="INV987654321",
|
||||||
comment="Тестовый комментарий для стойки (обновленный)",
|
comment="Тестовый комментарий для стойки (обновленный)",
|
||||||
|
|
@ -261,7 +274,15 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем изменения
|
# Сохраняем изменения
|
||||||
rack_edit.click_done_button()
|
rack_edit.click_done_button()
|
||||||
rack_edit.wait_for_timeout(3000)
|
rack_edit.wait_for_timeout(2000)
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном обновлении
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Элемент успешно обновлён"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
|
browser.mouse.click(10, 10)
|
||||||
|
|
||||||
# Вход в режим редактирования
|
# Вход в режим редактирования
|
||||||
rack_page.click_edit_button()
|
rack_page.click_edit_button()
|
||||||
|
|
@ -298,11 +319,10 @@ class TestRackTab:
|
||||||
rack_edit.switch_to_tab(ModalEditRack.TAB_IMAGE)
|
rack_edit.switch_to_tab(ModalEditRack.TAB_IMAGE)
|
||||||
|
|
||||||
# Проверяем вкладку
|
# Проверяем вкладку
|
||||||
assert rack_edit.is_tab_active(ModalEditRack.TAB_IMAGE), \
|
assert rack_edit.is_tab_active(ModalEditRack.TAB_IMAGE), "Image tab should be active"
|
||||||
"Image tab should be active"
|
|
||||||
|
|
||||||
# Загружаем изображение если есть
|
# Загружаем изображение если есть
|
||||||
test_image_path = os.path.join(os.path.dirname(__file__), "test_image.jpg")
|
test_image_path = os.path.join(os.path.dirname(__file__), "test_edit_rack_image.jpg")
|
||||||
if os.path.exists(test_image_path):
|
if os.path.exists(test_image_path):
|
||||||
logger.debug(f"Found test image: {test_image_path}")
|
logger.debug(f"Found test image: {test_image_path}")
|
||||||
# Находим input и загружаем файл
|
# Находим input и загружаем файл
|
||||||
|
|
@ -319,6 +339,13 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем
|
# Сохраняем
|
||||||
rack_edit.click_done_button()
|
rack_edit.click_done_button()
|
||||||
|
rack_page.wait_for_timeout(2000)
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном обновлении
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Элемент успешно обновлён"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
@pytest.mark.develop
|
@pytest.mark.develop
|
||||||
def test_rack_access_rules(self, browser: Page) -> None:
|
def test_rack_access_rules(self, browser: Page) -> None:
|
||||||
|
|
@ -354,11 +381,11 @@ class TestRackTab:
|
||||||
|
|
||||||
# Пользователи для добавления в каждое поле
|
# Пользователи для добавления в каждое поле
|
||||||
custom_users = [
|
custom_users = [
|
||||||
"TestUserRulesAdmin",
|
"admin",
|
||||||
"TestUserRulesOper",
|
"manager",
|
||||||
"TestUserRulesManager",
|
"operator",
|
||||||
"TestUserRulesSec",
|
"sec",
|
||||||
"TestUserRulesCollector"
|
"collector"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Заполняем поля
|
# Заполняем поля
|
||||||
|
|
@ -393,7 +420,13 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем изменения
|
# Сохраняем изменения
|
||||||
rack_edit.click_done_button()
|
rack_edit.click_done_button()
|
||||||
rack_edit.wait_for_timeout(3000)
|
rack_page.wait_for_timeout(2000)
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном обновлении
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Элемент успешно обновлён"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
# Возвращаемся в режим редактирования и проверяем снова
|
# Возвращаемся в режим редактирования и проверяем снова
|
||||||
rack_page.click_edit_button()
|
rack_page.click_edit_button()
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
|
|
@ -9,14 +9,21 @@ from playwright.sync_api import Page
|
||||||
from locators.navigation_panel_locators import NavigationPanelLocators
|
from locators.navigation_panel_locators import NavigationPanelLocators
|
||||||
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
|
||||||
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
|
||||||
|
from components_derived.modal_edit_rack import ModalEditRack
|
||||||
from pages.location_page import LocationPage
|
from pages.location_page import LocationPage
|
||||||
from pages.login_page import LoginPage
|
from pages.login_page import LoginPage
|
||||||
from pages.main_page import MainPage
|
from pages.main_page import MainPage
|
||||||
from pages.rack_page import RackPage
|
from pages.rack_page import RackPage
|
||||||
|
from components.alert_component import AlertComponent
|
||||||
|
from tools.logger import get_logger
|
||||||
|
|
||||||
# Константы
|
# Константы
|
||||||
RACK_NAME = "Test-Rack-Functionality"
|
RACK_NAME = "Test-Rack-Functionality"
|
||||||
|
|
||||||
|
# Инициализация логгера для всего модуля
|
||||||
|
logger = get_logger("RACK_MANAGEMENT_TESTS")
|
||||||
|
logger.setLevel("INFO")
|
||||||
|
|
||||||
class TestRackTab:
|
class TestRackTab:
|
||||||
"""Набор тестов для вкладки 'Стойка' в модуле Объекты.
|
"""Набор тестов для вкладки 'Стойка' в модуле Объекты.
|
||||||
|
|
||||||
|
|
@ -25,7 +32,6 @@ class TestRackTab:
|
||||||
|
|
||||||
Тесты покрывают следующие функциональные области:
|
Тесты покрывают следующие функциональные области:
|
||||||
1. test_rack_tab_content - Базовая структура и содержимое вкладки стойки
|
1. test_rack_tab_content - Базовая структура и содержимое вкладки стойки
|
||||||
2. test_rack_tab_switching - Функциональность переключения между вкладками стойки
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Инициализируем атрибуты
|
# Инициализируем атрибуты
|
||||||
|
|
@ -63,6 +69,8 @@ class TestRackTab:
|
||||||
browser: Страница Playwright
|
browser: Страница Playwright
|
||||||
rack_name: Имя стойки для создания
|
rack_name: Имя стойки для создания
|
||||||
"""
|
"""
|
||||||
|
logger.debug(f"Creating rack: {rack_name}")
|
||||||
|
|
||||||
# Нажимаем кнопку "Создать" на тулбаре
|
# Нажимаем кнопку "Создать" на тулбаре
|
||||||
self.location_page.click_create_button()
|
self.location_page.click_create_button()
|
||||||
|
|
||||||
|
|
@ -91,6 +99,14 @@ class TestRackTab:
|
||||||
# Нажимаем кнопку создания
|
# Нажимаем кнопку создания
|
||||||
create_child_frame.click_add_button()
|
create_child_frame.click_add_button()
|
||||||
|
|
||||||
|
# Проверяем уведомление об успешном создании
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = f"Элемент {rack_name} создан"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
|
logger.info(f"Rack '{rack_name}' created successfully")
|
||||||
|
|
||||||
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
|
||||||
"""Удаляет стойку через контекстное меню.
|
"""Удаляет стойку через контекстное меню.
|
||||||
|
|
||||||
|
|
@ -100,7 +116,9 @@ class TestRackTab:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# 1. Находим элемент стойки в навигационной панели
|
# 1. Находим элемент стойки в навигационной панели
|
||||||
rack_element = browser.locator(NavigationPanelLocators.TREEVIEW).get_by_text(rack_name, exact=True).first
|
rack_element = browser.locator(
|
||||||
|
NavigationPanelLocators.TREEVIEW
|
||||||
|
).get_by_text(rack_name, exact=True).first
|
||||||
|
|
||||||
# Прокручиваем до элемента если нужно
|
# Прокручиваем до элемента если нужно
|
||||||
rack_element.scroll_into_view_if_needed()
|
rack_element.scroll_into_view_if_needed()
|
||||||
|
|
@ -109,18 +127,28 @@ class TestRackTab:
|
||||||
# 2. Проверяем и нажимаем кнопку "Изменить"
|
# 2. Проверяем и нажимаем кнопку "Изменить"
|
||||||
rack_page = RackPage(browser)
|
rack_page = RackPage(browser)
|
||||||
|
|
||||||
# Проверяем видимость кнопки
|
# Проверяем видимость и тултип кнопки
|
||||||
rack_page.toolbar.check_button_visibility("edit")
|
rack_page.should_be_toolbar_buttons()
|
||||||
|
|
||||||
# Проверяем тултип кнопки
|
|
||||||
rack_page.toolbar.check_button_tooltip("edit", "Изменить")
|
|
||||||
|
|
||||||
# Кликаем на кнопку "Изменить"
|
# Кликаем на кнопку "Изменить"
|
||||||
rack_page.toolbar.get_button_by_name("edit").click()
|
rack_page.click_edit_button()
|
||||||
|
|
||||||
# 3. Используем метод click_remove_button, который обрабатывает весь процесс удаления
|
self.main_page.wait_for_timeout(1000)
|
||||||
# включая диалог подтверждения
|
|
||||||
rack_page.click_remove_button()
|
# 3. Создаем экземпляр ModalRackEditRack
|
||||||
|
rack_edit = ModalEditRack(browser, rack_name)
|
||||||
|
|
||||||
|
# Используем метод для удаления
|
||||||
|
rack_edit.click_remove_button()
|
||||||
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
|
# 4. Проверяем уведомление об успешном удалении
|
||||||
|
alert = AlertComponent(browser)
|
||||||
|
expected_alert_text = "Успешно удалено"
|
||||||
|
alert.check_alert_presence(expected_alert_text)
|
||||||
|
alert.close_alert_by_text(expected_alert_text)
|
||||||
|
|
||||||
|
logger.info(f"Rack '{rack_name}' deleted successfully")
|
||||||
|
|
||||||
@pytest.fixture(scope="function", autouse=True)
|
@pytest.fixture(scope="function", autouse=True)
|
||||||
def setup(self, browser: Page) -> None:
|
def setup(self, browser: Page) -> None:
|
||||||
|
|
@ -154,6 +182,8 @@ class TestRackTab:
|
||||||
if not self._check_rack_existance(browser, RACK_NAME):
|
if not self._check_rack_existance(browser, RACK_NAME):
|
||||||
self._create_rack(browser, RACK_NAME)
|
self._create_rack(browser, RACK_NAME)
|
||||||
self.main_page.wait_for_timeout(3000)
|
self.main_page.wait_for_timeout(3000)
|
||||||
|
else:
|
||||||
|
logger.info(f"Rack '{RACK_NAME}' already exists")
|
||||||
|
|
||||||
# Переходим к стойке для тестирования
|
# Переходим к стойке для тестирования
|
||||||
self.main_page.click_subpanel_item(RACK_NAME, parent="test-zone")
|
self.main_page.click_subpanel_item(RACK_NAME, parent="test-zone")
|
||||||
|
|
@ -231,20 +261,6 @@ class TestRackTab:
|
||||||
# Проверка кнопки "Показать стойку"
|
# Проверка кнопки "Показать стойку"
|
||||||
rt.should_have_show_rack_button()
|
rt.should_have_show_rack_button()
|
||||||
|
|
||||||
rt.wait_for_timeout(1000)
|
|
||||||
|
|
||||||
def test_rack_tab_switching(self, browser: Page) -> None:
|
|
||||||
"""Тест переключения между вкладками стойки оборудования.
|
|
||||||
|
|
||||||
Тестирует переключение на все доступные вкладки: Общая информация,
|
|
||||||
Обслуживание, События, Сервисы.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
|
|
||||||
"""
|
|
||||||
|
|
||||||
rt = RackPage(browser)
|
|
||||||
|
|
||||||
# Проверяем переключение между всеми вкладками стойки
|
# Проверяем переключение между всеми вкладками стойки
|
||||||
rt.check_tab_switching()
|
rt.check_tab_switching()
|
||||||
|
|
||||||
Loading…
Reference in New Issue