Актуализация тестов после перехода на версию 1.33

ra5/create_rack
Radislav 2026-02-25 13:21:07 +03:00
parent abf1a89bc3
commit 04bf299194
4 changed files with 268 additions and 30 deletions

View File

@ -56,16 +56,8 @@ class RackPage(BasePage):
# Действия
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.wait_for_timeout(1000)
@ -458,7 +450,7 @@ class RackPage(BasePage):
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:

View File

@ -8,6 +8,7 @@ from locators.rack_locators import RackLocators
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
from components_derived.frames.create_child_element_frame import CreateChildElementFrame
from pages.location_page import LocationPage
from components_derived.modal_edit_rack import ModalEditRack, RackEditData
from pages.login_page import LoginPage
from pages.main_page import MainPage
from pages.rack_page import RackPage
@ -153,24 +154,22 @@ class TestCreateRackElement:
self.main_page.wait_for_timeout(500)
# 2. Проверяем и нажимаем кнопку "Изменить"
logger.debug("Step 1: Clicking 'Edit' button...")
rack_page = RackPage(browser)
# Проверяем видимость кнопки
rack_page.toolbar.check_button_visibility("edit")
# Проверяем тултип кнопки
rack_page.toolbar.check_button_tooltip("edit", "Изменить")
# Проверяем видимость и тултип кнопки
rack_page.should_be_toolbar_buttons()
# Кликаем на кнопку "Изменить"
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, который обрабатывает весь процесс удаления
# включая диалог подтверждения
logger.debug("Clicking remove button...")
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 компоненту

View File

@ -123,20 +123,20 @@ class TestRackTab:
# 2. Проверяем и нажимаем кнопку "Изменить"
rack_page = RackPage(browser)
# Проверяем видимость кнопки
rack_page.toolbar.check_button_visibility("edit")
# Проверяем тултип кнопки
rack_page.toolbar.check_button_tooltip("edit", "Изменить")
# Проверяем видимость и тултип кнопки
rack_page.should_be_toolbar_buttons()
# Кликаем на кнопку "Изменить"
rack_page.toolbar.get_button_by_name("edit").click()
rack_page.click_edit_button()
self.main_page.wait_for_timeout(1000)
# 3. Создаем экземпляр ModalRackEditRack
rack_edit = ModalEditRack(browser, rack_name)
# Используем метод для удаления
rack_edit.click_remove_button()
self.main_page.wait_for_timeout(1000)
logger.info(f"Rack '{rack_name}' deleted successfully")
@ -261,7 +261,8 @@ class TestRackTab:
# Сохраняем изменения
rack_edit.click_done_button()
rack_edit.wait_for_timeout(3000)
rack_edit.wait_for_timeout(2000)
browser.mouse.click(10, 10)
# Вход в режим редактирования
rack_page.click_edit_button()
@ -319,6 +320,8 @@ class TestRackTab:
# Сохраняем
rack_edit.click_done_button()
rack_page.wait_for_timeout(2000)
browser.mouse.click(10, 10)
@pytest.mark.develop
def test_rack_access_rules(self, browser: Page) -> None:
@ -393,7 +396,8 @@ class TestRackTab:
# Сохраняем изменения
rack_edit.click_done_button()
rack_edit.wait_for_timeout(3000)
rack_page.wait_for_timeout(2000)
browser.mouse.click(10, 10)
# Возвращаемся в режим редактирования и проверяем снова
rack_page.click_edit_button()

View File

@ -0,0 +1,243 @@
"""Модуль тестов вкладки 'Стойка' в модуле Объекты.
Содержит тесты для проверки функциональности
работы со стойкой оборудования.
"""
import pytest
from playwright.sync_api import Page
from locators.navigation_panel_locators import NavigationPanelLocators
from components_derived.accounting_objects.rack_maker import RackObjectMaker, RackData
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.login_page import LoginPage
from pages.main_page import MainPage
from pages.rack_page import RackPage
# Константы
RACK_NAME = "Test-Rack-Functionality"
class TestRackTab:
"""Набор тестов для вкладки 'Стойка' в модуле Объекты.
Проверяет корректность отображения, функциональность элементов интерфейса
и переключение между вкладками стойки оборудования.
Тесты покрывают следующие функциональные области:
1. test_rack_tab_content - Базовая структура и содержимое вкладки стойки
"""
# Инициализируем атрибуты
main_page: MainPage = None
location_page: LocationPage = None
def _check_rack_existance(self, browser: Page, rack_name: str) -> bool:
"""Проверяет существование стойки.
Args:
browser: Страница Playwright
rack_name: Имя стойки для проверки
Returns:
bool: True если стойка существует, False в противном случае
"""
# Обновляем навигационную панель
self.main_page.wait_for_timeout(500)
self.main_page.click_subpanel_item("test-zone")
nav_panel_locator = NavigationPanelLocators.TREEVIEW
# Проверяем видимость элемента
element = browser.locator(nav_panel_locator).get_by_text(rack_name, exact=True).first
if element.is_visible():
return True
return False
def _create_rack(self, browser: Page, rack_name: str) -> None:
"""Создает стойку.
Args:
browser: Страница Playwright
rack_name: Имя стойки для создания
"""
# Нажимаем кнопку "Создать" на тулбаре
self.location_page.click_create_button()
# Создаем фрейм создания дочернего элемента
create_child_frame = CreateChildElementFrame(browser)
# Нажимаем на плашку "Класс объекта учета"
create_child_frame.open_object_class_combobox()
# Из выпадающего меню выбираем пункт "Стойка"
create_child_frame.select_object_class("Стойка")
# Открывается набор плашек для задания параметров стойки
rack_maker = RackObjectMaker(browser)
# Создаем объект данных стойки
rack_data = RackData(
name=rack_name,
height="42",
depth="1000"
)
# Заполняем данные стойки
rack_maker.fill_rack_data(rack_data)
# Нажимаем кнопку создания
create_child_frame.click_add_button()
def _delete_rack_from_context_menu(self, browser: Page, rack_name: str) -> None:
"""Удаляет стойку через контекстное меню.
Args:
browser: Страница Playwright
rack_name: Имя стойки для удаления
"""
# 1. Находим элемент стойки в навигационной панели
rack_element = browser.locator(
NavigationPanelLocators.TREEVIEW
).get_by_text(rack_name, exact=True).first
# Прокручиваем до элемента если нужно
rack_element.scroll_into_view_if_needed()
self.main_page.wait_for_timeout(500)
# 2. Проверяем и нажимаем кнопку "Изменить"
rack_page = RackPage(browser)
# Проверяем видимость и тултип кнопки
rack_page.should_be_toolbar_buttons()
# Кликаем на кнопку "Изменить"
rack_page.click_edit_button()
self.main_page.wait_for_timeout(1000)
# 3. Создаем экземпляр ModalRackEditRack
rack_edit = ModalEditRack(browser, rack_name)
# Используем метод для удаления
rack_edit.click_remove_button()
self.main_page.wait_for_timeout(1000)
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для подготовки тестового окружения.
Выполняет:
1. Авторизацию в системе
2. Создание стойки если она не существует
3. Переход к стойке
Args:
browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
"""
# Авторизация в системе
login_page = LoginPage(browser)
login_page.do_login()
# Мы на главной странице
self.main_page = MainPage(browser)
self.main_page.should_be_navigation_panel()
# Переходим к Объектам
self.main_page.click_main_navigation_panel_item("Объекты")
self.main_page.wait_for_timeout(1000)
self.main_page.click_main_navigation_panel_item("test-zone")
# Создаем экземпляр страницы локации
self.location_page = LocationPage(browser)
# Проверяем существование стойки
if not self._check_rack_existance(browser, RACK_NAME):
self._create_rack(browser, RACK_NAME)
self.main_page.wait_for_timeout(3000)
# Переходим к стойке для тестирования
self.main_page.click_subpanel_item(RACK_NAME, parent="test-zone")
self.main_page.wait_for_timeout(3000)
@pytest.fixture(scope="class", autouse=True)
def cleanup_rack(self, browser: Page):
"""Фикстура для очистки созданной стойки после ВСЕХ тестов класса.
Выполняется один раз после завершения всех тестов класса TestRackTab.
Удаляет созданную стойку.
Args:
browser: Экземпляр страницы Playwright
"""
# Тесты выполняются здесь
yield
# Переходим на главную страницу и в нужную зону
login_page = LoginPage(browser)
login_page.do_login()
self.main_page = MainPage(browser)
self.main_page.should_be_navigation_panel()
# Переходим к Объектам
self.main_page.click_main_navigation_panel_item("Объекты")
self.main_page.wait_for_timeout(1000)
self.main_page.click_main_navigation_panel_item("test-zone")
self.main_page.wait_for_timeout(1000)
# Проверяем существование стойки
if self._check_rack_existance(browser, RACK_NAME):
# Переходим на страницу стойки
self.main_page.click_subpanel_item(RACK_NAME, parent="test-zone")
self.main_page.wait_for_timeout(2000)
# Удаляем стойку
self._delete_rack_from_context_menu(browser, RACK_NAME)
# Дополнительная проверка
self.main_page.click_subpanel_item("test-zone")
self.main_page.wait_for_timeout(1000)
#@pytest.mark.develop
def test_rack_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки 'Стойка'.
Проверяет:
1. Наличие и корректность заголовка панели с навигационной цепочкой
2. Отображение и структуру обеих сторон стойки (лицевой и обратной)
3. Наличие и функциональность кнопок панели инструментов
4. Корректность отображения юнитов и устройств на стойке
Args:
browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
"""
expected_toolbar_subtitles = [
"test-zone",
'chevron_right',
RACK_NAME
]
rt = RackPage(browser)
rt.should_be_panel_header(expected_toolbar_subtitles)
# Комплексная проверка отображения обеих сторон стойки с детальной информацией
rt.should_be_rack_sides_displayed()
# Проверка кнопки "Скрыть стойку"
rt.should_have_hide_rack_button()
# Проверка кнопки "Показать стойку"
rt.should_have_show_rack_button()
# Проверяем переключение между всеми вкладками стойки
rt.check_tab_switching()
# Переход в режим редактирования
rt.should_be_toolbar_buttons()
rt.wait_for_timeout(1000)