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

ra4/management_rack
nsubbot 2026-02-11 18:57:26 +03:00
parent f8f85300d3
commit 7612138c50
13 changed files with 74 additions and 113 deletions

View File

@ -96,22 +96,12 @@ class ActionsEventsContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_status_bar = events_filter.get_filtering_parameter("filter_status") events_filter.should_be_filtering_parameter("Статус")
filter_status_title = filter_status_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("НАИМЕНОВАНИЕ ЗАДАЧИ")
assert filter_status_title == "Статус", "Filtering parameter bar 'Статус' is missing" events_filter.should_be_filtering_parameter("Объект")
events_filter.should_be_filtering_parameter("Пользователь")
filter_task_name_bar = events_filter.get_filtering_parameter("filter_task_name") events_filter.click_close_button()
filter_task_name_title = filter_task_name_bar.get_selection_bar_title()
assert filter_task_name_title == "НАИМЕНОВАНИЕ ЗАДАЧИ", \
"Filtering parameter bar 'НАИМЕНОВАНИЕ ЗАДАЧИ' is missing"
filter_object_bar = events_filter.get_filtering_parameter("filter_object")
filter_object_title = filter_object_bar.get_selection_bar_title()
assert filter_object_title == "Объект", "Filtering parameter bar 'Объект' is missing"
filter_user_bar = events_filter.get_filtering_parameter("filter_user")
filter_user_title = filter_user_bar.get_selection_bar_title()
assert filter_user_title == "Пользователь", "Filtering parameter bar 'Пользователь' is missing"
def check_events_table_content(self, expected_headers: list[str]) -> None: def check_events_table_content(self, expected_headers: list[str]) -> None:
"""Проверка содержимого таблицы""" """Проверка содержимого таблицы"""

View File

@ -47,7 +47,6 @@ class AuditEventsContainer(EventsContainerComponent):
"""Проверяет содержимое контейнера для отображения событий аудита.""" """Проверяет содержимое контейнера для отображения событий аудита."""
expected_headers = [ 'ВРЕМЯ', 'ОПИСАНИЕ', 'ИДЕНТИФИКАТОР'] expected_headers = [ 'ВРЕМЯ', 'ОПИСАНИЕ', 'ИДЕНТИФИКАТОР']
expected_headers_security = [ 'ВРЕМЯ', 'ОПИСАНИЕ', 'ИДЕНТИФИКАТОР', 'ТИП']
self.should_be_toolbar() self.should_be_toolbar()
self.should_be_toolbar_buttons() self.should_be_toolbar_buttons()
@ -72,21 +71,12 @@ class AuditEventsContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_type_bar = events_filter.get_filtering_parameter("filter_type") events_filter.should_be_filtering_parameter("Тип")
filter_type_title = filter_type_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("Роль")
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing" events_filter.should_be_filtering_parameter("Имя")
events_filter.should_be_filtering_parameter("ip")
filter_role_bar = events_filter.get_filtering_parameter("filter_role") events_filter.click_close_button()
filter_role_title = filter_role_bar.get_selection_bar_title()
assert filter_role_title == "Роль", "Filtering parameter bar 'Роль' is missing"
filter_name_bar = events_filter.get_filtering_parameter("filter_name")
filter_name_title = filter_name_bar.get_selection_bar_title()
assert filter_name_title == "Имя", "Filtering parameter bar 'Имя' is missing"
filter_ip_bar = events_filter.get_filtering_parameter("filter_ip")
filter_ip_title = filter_ip_bar.get_selection_bar_title()
assert filter_ip_title == "ip", "Filtering parameter bar 'ip' is missing"
def check_content_security(self) -> None: def check_content_security(self) -> None:
"""Проверяет содержимое контейнера для отображения событий безопасности.""" """Проверяет содержимое контейнера для отображения событий безопасности."""
@ -116,21 +106,12 @@ class AuditEventsContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_type_bar = events_filter.get_filtering_parameter("filter_type") events_filter.should_be_filtering_parameter("Тип")
filter_type_title = filter_type_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("Роль")
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing" events_filter.should_be_filtering_parameter("Имя")
events_filter.should_be_filtering_parameter("ip")
filter_role_bar = events_filter.get_filtering_parameter("filter_role") events_filter.click_close_button()
filter_role_title = filter_role_bar.get_selection_bar_title()
assert filter_role_title == "Роль", "Filtering parameter bar 'Роль' is missing"
filter_name_bar = events_filter.get_filtering_parameter("filter_name")
filter_name_title = filter_name_bar.get_selection_bar_title()
assert filter_name_title == "Имя", "Filtering parameter bar 'Имя' is missing"
filter_ip_bar = events_filter.get_filtering_parameter("filter_ip")
filter_ip_title = filter_ip_bar.get_selection_bar_title()
assert filter_ip_title == "ip", "Filtering parameter bar 'ip' is missing"
def should_be_toolbar_buttons(self) -> None: def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара.""" """Проверяет наличие и видимость кнопок тулбара."""

View File

@ -70,17 +70,11 @@ class EventsTabContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_type_bar = events_filter.get_filtering_parameter("filter_type") events_filter.should_be_filtering_parameter("Тип")
filter_type_title = filter_type_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("Критичность")
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing" events_filter.should_be_filtering_parameter("Объект")
filter_strictness_bar = events_filter.get_filtering_parameter("filter_strictness") events_filter.click_close_button()
filter_strictness_title = filter_strictness_bar.get_selection_bar_title()
assert filter_strictness_title == "Критичность", "Filtering parameter bar 'Критичность' is missing"
filter_object_bar = events_filter.get_filtering_parameter("filter_object")
filter_object_title = filter_object_bar.get_selection_bar_title()
assert filter_object_title == "Объект", "Filtering parameter bar 'Объект' is missing"
def should_be_toolbar_buttons(self) -> None: def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара.""" """Проверяет наличие и видимость кнопок тулбара."""

View File

@ -76,34 +76,15 @@ class MaintenanceEventsContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_date_bar = events_filter.get_filtering_parameter("filter_date") events_filter.should_be_filtering_parameter("Дата")
filter_date_title = filter_date_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("Наименование события")
assert filter_date_title == "Дата", "Filtering parameter bar 'Дата' is missing" events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Состояние")
events_filter.should_be_filtering_parameter("Объект")
events_filter.should_be_filtering_parameter("Автор")
events_filter.should_be_filtering_parameter("Расположение")
filter_event_name_bar = events_filter.get_filtering_parameter("filter_event_name") events_filter.click_close_button()
filter_event_name_title = filter_event_name_bar.get_selection_bar_title()
assert filter_event_name_title == "Наименование события", \
"Filtering parameter bar 'Наименование события' is missing"
filter_type_bar = events_filter.get_filtering_parameter("filter_type")
filter_type_title = filter_type_bar.get_selection_bar_title()
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing"
filter_status_bar = events_filter.get_filtering_parameter("filter_status")
filter_status_title = filter_status_bar.get_selection_bar_title()
assert filter_status_title == "Состояние", "Filtering parameter bar 'Состояние' is missing"
filter_object_bar = events_filter.get_filtering_parameter("filter_object")
filter_object_title = filter_object_bar.get_selection_bar_title()
assert filter_object_title == "Объект", "Filtering parameter bar 'Объект' is missing"
filter_author_bar = events_filter.get_filtering_parameter("filter_author")
filter_author_title = filter_author_bar.get_selection_bar_title()
assert filter_author_title == "Автор", "Filtering parameter bar 'Автор' is missing"
filter_location_bar = events_filter.get_filtering_parameter("filter_location")
filter_location_title = filter_location_bar.get_selection_bar_title()
assert filter_location_title == "Расположение", "Filtering parameter bar 'Расположение' is missing"
def should_be_toolbar_buttons(self) -> None: def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара.""" """Проверяет наличие и видимость кнопок тулбара."""

View File

@ -70,17 +70,11 @@ class SystemLogEventsContainer(EventsContainerComponent):
events_filter = self.click_filter_button() events_filter = self.click_filter_button()
events_filter.check_content() events_filter.check_content()
filter_type_bar = events_filter.get_filtering_parameter("filter_type") events_filter.should_be_filtering_parameter("Тип")
filter_type_title = filter_type_bar.get_selection_bar_title() events_filter.should_be_filtering_parameter("Критичность")
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing" events_filter.should_be_filtering_parameter("Объект")
filter_strictness_bar = events_filter.get_filtering_parameter("filter_strictness") events_filter.click_close_button()
filter_strictness_title = filter_strictness_bar.get_selection_bar_title()
assert filter_strictness_title == "Критичность", "Filtering parameter bar 'Критичность' is missing"
filter_object_bar = events_filter.get_filtering_parameter("filter_object")
filter_object_title = filter_object_bar.get_selection_bar_title()
assert filter_object_title == "Объект", "Filtering parameter bar 'Объект' is missing"
def should_be_toolbar_buttons(self) -> None: def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара.""" """Проверяет наличие и видимость кнопок тулбара."""

View File

@ -1,7 +1,7 @@
"""Модуль панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс """Модуль панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс
для работы с формами ввода, их элементами и проверками.""" для работы с формами ввода, их элементами и проверками."""
from playwright.sync_api import Page, Locator from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger from tools.logger import get_logger
from elements.button_element import Button from elements.button_element import Button
from components.base_component import BaseComponent from components.base_component import BaseComponent
@ -43,12 +43,16 @@ class EventsFilterPanel(BaseComponent):
self.reset_button = Button(page, self.reset_button = Button(page,
self.page.get_by_role("button").filter(has_text='Сбросить Фильтры'), self.page.get_by_role("button").filter(has_text='Сбросить Фильтры'),
"reset_button") "reset_button")
self.close_button = Button(page,
self.page.get_by_role("button").filter(has_text='Закрыть'),
"close_button")
# Действия: # Действия:
def add_filtering_parameter(self, name: str, title: str) -> None: def add_filtering_parameter(self, name: str, title: str) -> None:
"""Добавляет поле задания параметров фильтрации по заданному имени.""" """Добавляет поле задания параметров фильтрации по заданному имени."""
loc = self.events_filter_locator.get_by_role("combobox").filter(has_text=title) # loc = self.events_filter_locator.get_by_role("combobox").filter(has_text=title)
loc = self.events_filter_locator.get_by_role("combobox").get_by_placeholder(title)
self.filtering_parameters[name] = SelectionBarComponent(self.page, loc) self.filtering_parameters[name] = SelectionBarComponent(self.page, loc)
def get_filtering_parameter(self, name: str) -> SelectionBarComponent | None: def get_filtering_parameter(self, name: str) -> SelectionBarComponent | None:
@ -76,6 +80,11 @@ class EventsFilterPanel(BaseComponent):
self.reset_button.click() self.reset_button.click()
def click_close_button(self) -> None:
"""Клик по кнопке закрытия окна фильтрации."""
self.close_button.click()
# Проверки: # Проверки:
def check_content(self) -> None: def check_content(self) -> None:
"""Проверяет наличие постоянных полей панели параметров фильтрации.""" """Проверяет наличие постоянных полей панели параметров фильтрации."""
@ -85,7 +94,7 @@ class EventsFilterPanel(BaseComponent):
self.check_apply_button_visibility() self.check_apply_button_visibility()
self.check_reset_button_visibility() self.check_reset_button_visibility()
self.check_close_button_visibility()
def check_vertical_scrolling(self, locator: str| Locator) -> bool: def check_vertical_scrolling(self, locator: str| Locator) -> bool:
"""Проверяет возможность вертикальной прокрутки формы.""" """Проверяет возможность вертикальной прокрутки формы."""
@ -97,7 +106,18 @@ class EventsFilterPanel(BaseComponent):
self.apply_button.check_visibility("Apply Filter Button is missing") self.apply_button.check_visibility("Apply Filter Button is missing")
def check_close_button_visibility(self) -> None:
"""Проверяет наличие кнопки закрытия окна фильтрации."""
self.close_button.check_visibility("Close Filter window Button is missing")
def check_reset_button_visibility(self) -> None: def check_reset_button_visibility(self) -> None:
"""Проверяет наличие кнопки сброса фильтра.""" """Проверяет наличие кнопки сброса фильтра."""
self.reset_button.check_visibility("Reset Filter Button is missing") self.reset_button.check_visibility("Reset Filter Button is missing")
def should_be_filtering_parameter(self, title: str) -> None:
"""Проверяет наличие поля панели параметров фильтрации по его заголовку."""
loc = self.events_filter_locator.get_by_role("combobox").get_by_placeholder(title)
expect(loc).to_be_visible(), f"Filtering parameter bar '{title}' is missing"

View File

@ -57,7 +57,7 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_content_item("name_input", name_input) self.add_content_item("name_input", name_input)
# Поле Роль # Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").first role_loc = elements_locators.get("Роль").get_by_role("combobox").first
role_input = TextInput(page, role_loc, "role_input") role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input) self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page)) self.add_content_item("roles_list", DropdownList(page))
@ -240,16 +240,6 @@ class EditUserModalWindow(ModalWindowComponent):
reset_password_button = self.get_button_by_name("reset_password") reset_password_button = self.get_button_by_name("reset_password")
reset_password_button.click() reset_password_button.click()
# def _get_fields_locators(self, page) -> dict:
# fields_locators = {}
# elements = page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA). \
# locator("div.v-text-field__slot > input").all()
# for el in elements:
# val = el.input_value().strip()
# if val:
# fields_locators[val] = el.locator("../ancestor::div[5]")
# return fields_locators
# Проверки: # Проверки:
def check_content(self, user_name, role): def check_content(self, user_name, role):
"""Проверяет наличие и корректность элементов окна. """Проверяет наличие и корректность элементов окна.

View File

@ -19,7 +19,11 @@ class EventPanelLocators:
TAB_AUDIT (str): кнопки Аудит. TAB_AUDIT (str): кнопки Аудит.
BUTTONS_EVENT (str): блока кнопок-счетчиков событий. BUTTONS_EVENT (str): блока кнопок-счетчиков событий.
BUTTON_USER (str): кнопки текущего пользователя. BUTTON_USER (str): кнопки текущего пользователя.
CONTAINER_ACTIONS_TAB (str): контейнера для отображения событий вкладки Действия.
CONTAINER_EVENTS_TAB (str): контейнера для отображения событий вкладки События.
CONTAINER_MAINTENANCE_EVENTS (str): контейнера для отображения событий обслуживания.
CONTAINER_SYSTEM_LOG_EVENTS (str): контейнера с событиями Системного журнала. CONTAINER_SYSTEM_LOG_EVENTS (str): контейнера с событиями Системного журнала.
CONTAINER_AUDIT_EVENTS (str): контейнера для отображения событий аудита.
""" """
AREA_EVENTS = "#app > div.application--wrap > div > div:nth-child(1)" AREA_EVENTS = "#app > div.application--wrap > div > div:nth-child(1)"
@ -27,6 +31,7 @@ class EventPanelLocators:
BUTTON_EXPAND_LESS = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_close')]" BUTTON_EXPAND_LESS = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_close')]"
BUTTON_EXPAND_MORE = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_open')]" BUTTON_EXPAND_MORE = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_open')]"
TABS_TOOLBAR = "//div[@data-testid='BASELINE__tabs__toolbar']"
TAB_STATES = "//div[@data-testid='BASELINE__states_tab__toolbar']" TAB_STATES = "//div[@data-testid='BASELINE__states_tab__toolbar']"
TAB_ACTIONS = "//div[@data-testid='BASELINE__actions_tab__toolbar']" TAB_ACTIONS = "//div[@data-testid='BASELINE__actions_tab__toolbar']"
TAB_EVENTS = "//div[@data-testid='BASELINE__events_tab__toolbar']" TAB_EVENTS = "//div[@data-testid='BASELINE__events_tab__toolbar']"
@ -34,7 +39,7 @@ class EventPanelLocators:
TAB_SYSTEM_LOG = "//div[@data-testid='BASELINE__system journal_tab__toolbar']" TAB_SYSTEM_LOG = "//div[@data-testid='BASELINE__system journal_tab__toolbar']"
TAB_AUDIT = "//div[@data-testid='BASELINE__audit_tab__toolbar']" TAB_AUDIT = "//div[@data-testid='BASELINE__audit_tab__toolbar']"
BUTTONS_EVENT = "//nav/div[@class='v-toolbar__content']/div[@class='v-toolbar__items'][2]//span[contains(@class, 'v-tooltip')]" BUTTONS_EVENT = "//button[@data-testid='BASELINE__btn__user']/preceding-sibling::div//span[contains(@class, 'v-tooltip')]"
BUTTON_USER = "//button[@data-testid='BASELINE__btn__user']" BUTTON_USER = "//button[@data-testid='BASELINE__btn__user']"

View File

@ -20,7 +20,7 @@ class TestSystemLogEventsContainer:
Атрибуты: Атрибуты:
browser: Фикстура для работы с браузером. browser: Фикстура для работы с браузером.
""" """
@pytest.mark.develop # @pytest.mark.develop
def test_system_log_events_content(self, browser: Page) -> None: def test_system_log_events_content(self, browser: Page) -> None:
"""Проверяет содержимое контейнера для отображения событий системного журнала. """Проверяет содержимое контейнера для отображения событий системного журнала.

View File

@ -102,7 +102,7 @@ class TestNavigationPanel:
mp.wait_for_timeout(5000) mp.wait_for_timeout(5000)
mp.click_subpanel_item("test-zone") mp.click_subpanel_item("test-zone-01")
mp.wait_for_timeout(3000) mp.wait_for_timeout(3000)
# Переходим к Стойке # Переходим к Стойке

View File

@ -46,10 +46,12 @@ class TestUsersTabEditUser:
# Выход из системы текущего пользователя # Выход из системы текущего пользователя
mp = MainPage(browser) mp = MainPage(browser)
mp.wait_for_timeout(500)
mp.do_logout() mp.do_logout()
# Авторизация администратором для очистки # Авторизация администратором для очистки
login_page = LoginPage(browser) login_page = LoginPage(browser)
mp.wait_for_timeout(300)
login_page.do_login() login_page.do_login()
# Удаляем тестовых пользователей # Удаляем тестовых пользователей

View File

@ -180,7 +180,7 @@ class TestUserCard:
is_changed, error = change_password_window.change_password(user_data["password"], user_data["new_password"]) is_changed, error = change_password_window.change_password(user_data["password"], user_data["new_password"])
assert is_changed, f"Unsucessful attempt to change password: {error}" assert is_changed, f"Unsucessful attempt to change password: {error}"
# @pytest.mark.develop @pytest.mark.develop
def test_change_password_unsuccessful(self, browser: Page, def test_change_password_unsuccessful(self, browser: Page,
create_user: None, create_user: None,
cleanup_user: None) -> None: cleanup_user: None) -> None:
@ -199,6 +199,7 @@ class TestUserCard:
# Значение полей нового пароля и подтверждения нового пароля не совпадают # Значение полей нового пароля и подтверждения нового пароля не совпадают
user_card = mp.click_user_button() user_card = mp.click_user_button()
mp.wait_for_timeout(500)
change_password_window = user_card.click_change_password_button() change_password_window = user_card.click_change_password_button()
password_inputs = change_password_window.get_password_inputs() password_inputs = change_password_window.get_password_inputs()
@ -211,13 +212,16 @@ class TestUserCard:
# Используется неправильный старый пароль # Используется неправильный старый пароль
user_card = mp.click_user_button() user_card = mp.click_user_button()
mp.wait_for_timeout(500)
change_password_window = user_card.click_change_password_button() change_password_window = user_card.click_change_password_button()
is_changed, _ = change_password_window.change_password("123456789123", user_data["new_password"]) is_changed, _ = change_password_window.change_password("123456789123", user_data["new_password"])
assert not is_changed, "Sucessful attempt to change password for incorrect old password" assert not is_changed, "Sucessful attempt to change password for incorrect old password"
change_password_window.click_cancel_button() change_password_window.click_cancel_button()
# Пустое поле ввода пароля на примере поля ввода старого пароля # Пустое поле ввода пароля на примере поля ввода старого пароля
user_card = mp.click_user_button() user_card = mp.click_user_button()
mp.wait_for_timeout(500)
change_password_window = user_card.click_change_password_button() change_password_window = user_card.click_change_password_button()
is_changed, error = change_password_window.change_password("", user_data["new_password"]) is_changed, error = change_password_window.change_password("", user_data["new_password"])
assert not is_changed, "Sucessful attempt to change password for empty old password input" assert not is_changed, "Sucessful attempt to change password for empty old password input"