Актуализация тестов после перехода на версию 1.33
parent
abf1a89bc3
commit
04bf299194
|
|
@ -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,6 +8,7 @@ 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
|
||||||
|
|
@ -153,24 +154,22 @@ 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()
|
# Используем метод для удаления
|
||||||
|
rack_edit.click_remove_button()
|
||||||
|
self.main_page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# 4. Проверяем уведомление об успешном удалении - требуется создать разработчику (заведена задача)
|
# 4. Проверяем уведомление об успешном удалении - требуется создать разработчику (заведена задача)
|
||||||
# Создаем экземпляр фрейма для доступа к alert компоненту
|
# Создаем экземпляр фрейма для доступа к alert компоненту
|
||||||
|
|
|
||||||
|
|
@ -123,20 +123,20 @@ 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)
|
||||||
|
|
||||||
logger.info(f"Rack '{rack_name}' deleted successfully")
|
logger.info(f"Rack '{rack_name}' deleted successfully")
|
||||||
|
|
||||||
|
|
@ -261,7 +261,8 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем изменения
|
# Сохраняем изменения
|
||||||
rack_edit.click_done_button()
|
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()
|
rack_page.click_edit_button()
|
||||||
|
|
@ -319,6 +320,8 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем
|
# Сохраняем
|
||||||
rack_edit.click_done_button()
|
rack_edit.click_done_button()
|
||||||
|
rack_page.wait_for_timeout(2000)
|
||||||
|
browser.mouse.click(10, 10)
|
||||||
|
|
||||||
@pytest.mark.develop
|
@pytest.mark.develop
|
||||||
def test_rack_access_rules(self, browser: Page) -> None:
|
def test_rack_access_rules(self, browser: Page) -> None:
|
||||||
|
|
@ -393,7 +396,8 @@ class TestRackTab:
|
||||||
|
|
||||||
# Сохраняем изменения
|
# Сохраняем изменения
|
||||||
rack_edit.click_done_button()
|
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()
|
rack_page.click_edit_button()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue