Актуализированы тесты для вкладок Сеансы/Текущие и Сеансы/Настройки

sidebar_filter
nsubbot 2025-10-28 10:21:09 +03:00
parent 632cf4ee40
commit eb7fe13b02
7 changed files with 391 additions and 32 deletions

View File

@ -0,0 +1,92 @@
"""Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода
и отображения полей настроек,их элементами и проверками."""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.settings_form_locators import SettingsFormLocators
from elements.button_element import Button
from components.toolbar_component import ToolbarComponent
from components.base_component import BaseComponent
logger = get_logger("MODAL_WINDOW")
class SettingsFormComponent(BaseComponent):
"""Компонент формы ввода и отображения полей настроек. Предоставляет методы для взаимодействия с формой,
ее содержимым и проверок."""
def __init__(self, page: Page):
super().__init__(page)
self.toolbar = ToolbarComponent(page, "")
self.content_items = {}
self.buttons = []
# Действия:
def add_content_item(self, name: str, item: object) -> None:
"""Добавляет элемент содержимого в форму по заданному имени."""
self.content_items[name] = item
def get_content_item(self, name: str) -> object | None:
"""Возвращает элемент содержимого по имени или None, если не найден."""
return self.content_items.get(name)
def add_toolbar_title(self, title: str) -> None:
"""Добавляет заголовок в панель инструментов модального окна."""
self.toolbar.add_title(title)
def add_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в форму."""
self.buttons.append(Button(self.page, locator, name))
def get_button_by_name(self, name: str) -> Button | None:
"""Ищет и возвращает кнопку по имени или None, если не найдена."""
for button in self.buttons:
if button.name == name:
return button
return None
def click_button(self, name: str) -> None:
"""Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.click()
def scroll_form_down(self) -> None:
"""Прокручивает содержимое окна вниз."""
self.scroll_down(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER)
def scroll_form_up(self) -> None:
"""Прокручивает содержимое окна вверх."""
self.scroll_up(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER)
# Проверки:
def check_form_vertical_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки окна."""
return self.is_scrollable_vertically(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER)
def check_button_visibility(self, name: str) -> None:
"""Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.check_visibility(f"Button with name '{name}' is missing")
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара.
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
self.toolbar.check_toolbar_presence("Toolbar is missing")

View File

@ -0,0 +1,16 @@
"""Модуль settings_form_locators содержит локаторы компонента формы ввода и отображения полей настроек.
Класс SettingsFormLocators предоставляет XPath локаторы для взаимодействия
с элементами модальных окон в тестах.
"""
class SettingsFormLocators:
"""Локаторы для компонента формы ввода и отображения полей настроек.
Содержит XPath локаторы для:
SETTTINGS_FORM_SCROLL_CONTAINER (str): контейнера с прокруткой модального окна
SETTTINGS_FORM_TITLE (str): заголовка тулбара
"""
SETTTINGS_FORM_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]"
SETTTINGS_FORM_TITLE = f"{SETTTINGS_FORM_SCROLL_CONTAINER}//div[contains(@class, 'v-toolbar__title')]"

View File

@ -1,6 +1,6 @@
"""Модуль вкладки 'Сеансы'. """Модуль вкладки 'Сеансы/Текущие'.
Содержит класс SessionsTab для работы с таблицей сеансов. Содержит класс CurrentSessionsTab для работы с таблицей сеансов.
Позволяет проверять состояние и взаимодействовать с элементами вкладки. Позволяет проверять состояние и взаимодействовать с элементами вкладки.
""" """
@ -15,8 +15,8 @@ from components.table_component import TableComponent
from components.confirm_component import ConfirmComponent from components.confirm_component import ConfirmComponent
from pages.base_page import BasePage from pages.base_page import BasePage
class SessionsTab(BasePage): class CurrentSessionsTab(BasePage):
"""Класс для работы с вкладкой 'Сеансы'. """Класс для работы с вкладкой 'Сеансы/Текущие'.
Предоставляет методы для взаимодействия с таблицей сеансов и проверки Предоставляет методы для взаимодействия с таблицей сеансов и проверки
её состояния. её состояния.
@ -26,7 +26,7 @@ class SessionsTab(BasePage):
""" """
def __init__(self, page: Page) -> None: def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки 'Сеансы'.""" """Инициализирует компоненты вкладки 'Сеансы/Текущие'."""
super().__init__(page) super().__init__(page)

View File

@ -0,0 +1,170 @@
"""Модуль вкладки 'Сеансы/Настройки'.
Содержит класс SessionSettingsTab для работы с полями настройки сессий пользователей.
"""
import re
from playwright.sync_api import Page
from locators.settings_form_locators import SettingsFormLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from components.toolbar_component import ToolbarComponent
from components.settings_form_component import SettingsFormComponent
from pages.base_page import BasePage
class SessionSettingsTab(BasePage):
"""Класс для работы с вкладкой 'Сеансы/Настройки'.
Предоставляет методы для взаимодействия с полями настройки сессий пользователей.
Args:
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки 'Сеансы/Настройки'."""
super().__init__(page)
locator_button_1 = self.page.get_by_role("navigation").filter(
has_text=re.compile("Настройки")
).get_by_role("button").nth(0)
locator_button_2 = self.page.get_by_role("navigation").filter(
has_text=re.compile("Настройки")
).get_by_role("button").nth(1)
self.toolbar = ToolbarComponent(page, "Настройки")
self.toolbar.add_tooltip_button(locator_button_1, "edit")
self.toolbar.add_tooltip_button(locator_button_1, "save")
self.toolbar.add_tooltip_button(locator_button_2, "cancel")
# Форма для отображения/редактирования полей настроек сессии пользователя
self.settings_form = SettingsFormComponent(page)
self.settings_form.add_toolbar_title("Время жизни сеанса")
admin_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('Администратор'),
"admin_setting_label")
self.settings_form.add_content_item("admin_setting_label", admin_setting_label)
loc_admin = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Администратор')
admin_setting = TextInput(page, loc_admin, "admin_setting")
self.settings_form.add_content_item("admin_setting", admin_setting)
operator_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('Оператор'),
"operator_setting_label")
self.settings_form.add_content_item("operator_setting_label", operator_setting_label)
loc_oper = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Оператор')
operator_setting = TextInput(page, loc_oper, "operator_setting")
self.settings_form.add_content_item("operator_setting", operator_setting)
manager_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('Контактное лицо'),
"manager_setting_label")
self.settings_form.add_content_item("manager_setting_label", manager_setting_label)
loc_manager = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Контактное лицо')
manager_setting = TextInput(page, loc_manager, "manager_setting")
self.settings_form.add_content_item("manager_setting", manager_setting)
inform_secur_user_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('Специалист информационной безопасности'),
"inform_secur_user_setting_label")
self.settings_form.add_content_item("inform_secur_user_setting_label", inform_secur_user_setting_label)
loc_inform_secur_user = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('Специалист информационной безопасности')
inform_secur_user_setting = TextInput(page, loc_inform_secur_user, "inform_secur_user_setting")
self.settings_form.add_content_item("inform_secur_user_setting", inform_secur_user_setting)
collector_setting_label = Text(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_text('$collector'),
"collector_setting_label")
self.settings_form.add_content_item("collector_setting_label", collector_setting_label)
loc_collector = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_label('$collector')
collector_setting = TextInput(page, loc_collector, "collector_setting")
self.settings_form.add_content_item("collector_setting", collector_setting)
# Действия:
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
self.should_be_toolbar()
self.should_be_toolbar_buttons()
self.settings_form.should_be_toolbar()
for name in self.settings_form.content_items.keys():
item = self.settings_form.get_content_item(name)
print("check item: "+name)
item.check_visibility(
f"Session settings input form item with name '{name}' is missing"
)
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара.
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
loc = self.page.get_by_role("navigation").filter(
has_text=re.compile("Настройки")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'Настройки' is missing")
self.toolbar.check_button_visibility("edit")
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и функциональность кнопок тулбара.
Raises:
AssertionError: Если кнопки недоступны или подсказки неверны.
"""
self.toolbar.check_button_visibility("edit")
self.toolbar.check_button_tooltip("edit", "Редактировать")
self.toolbar.get_button_by_name("edit").click()
self.toolbar.check_button_visibility("save")
self.toolbar.check_button_visibility("cancel")
self.toolbar.check_button_tooltip("save", "Сохранить")
self.toolbar.check_button_tooltip("cancel", "Отменить")
self.toolbar.get_button_by_name("cancel").click()
self.toolbar.check_button_visibility("edit")
def verify_form_data(self, session_settings: dict) -> None:
"""Проверяет соответствие содержимого полей формы данным из БД.
Raises:
AssertionError: Если содержимое поля не соответствует данным из БД.
"""
for key, value in session_settings.items():
field_value = ""
if key == "administrator":
field_value = self.settings_form.get_content_item("admin_setting").get_input_value().strip()
elif key == "operator":
field_value = self.settings_form.get_content_item("operator_setting").get_input_value().strip()
elif key == "manager":
field_value = self.settings_form.get_content_item("manager_setting").get_input_value().strip()
elif key == "inform_secur_user":
field_value = self.settings_form.get_content_item("inform_secur_user_setting").get_input_value().strip()
elif key == '$collector':
field_value = self.settings_form.get_content_item("collector_setting").get_input_value().strip()
else:
assert False, f"Got unsupported field name {key}"
assert field_value == str(value), f"{key} field value {field_value} is not equal value {value} from data base"

View File

@ -1,30 +1,30 @@
"""Модуль тестов вкладки 'Сеансы'. """Модуль тестов вкладки 'Сеансы/Текущие'.
Содержит тесты для проверки функциональности Содержит тесты для проверки функциональности
работы с пользовательтскими сеансами. работы с пользовательтскими сеансами.
""" """
from typing import Dict
import pytest import pytest
from playwright.sync_api import Page from playwright.sync_api import Page, expect
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.session_tab import SessionsTab from pages.current_session_tab import CurrentSessionsTab
from pages.users_tab import UsersTab from pages.users_tab import UsersTab
# @pytest.mark.smoke # @pytest.mark.smoke
class TestSessionsTab: class TestCurrentSessionsTab:
"""Набор тестов для вкладки 'Сеансы'. """Набор тестов для вкладки 'Сеансы/Текущие'.
Проверяет корректность отображения и функциональность элементов вкладки сеансов, Проверяет корректность отображения и функциональность элементов вкладки сеансов,
включая работу с сеансами пользователей, их создание, удаление и автоматическую очистку. включая работу с сеансами пользователей, их создание, удаление и автоматическую очистку.
Тесты покрывают следующие сценарии: Тесты покрывают следующие сценарии:
1. test_sessions_tab_content: Тест содержимого вкладки 'Сеансы' 1. test_sessions_tab_content: Тест содержимого вкладки 'Сеансы/Текущие'
2. test_delete_session_confirm_window: Тест окна подтверждения удаления сеанса 2. test_delete_session_confirm_window: Тест окна подтверждения удаления сеанса
3. test_delete_session_after_logout: Тест автоматического удаления сеанса после выхода пользователя из системы 3. test_delete_session_after_logout: Тест автоматического удаления сеанса после выхода пользователя из системы
4. test_delete_existed_session: Тест удаления созданного сеанса 4. test_delete_existed_session: Тест удаления созданного сеанса
5 test_multiple_users_sessions: Тест создания нескольких пользователей и их сеансов 5. test_multiple_users_sessions: Тест создания нескольких пользователей и их сеансов
6. test_session_removed_when_user_deleted: Тест удаления сеанса при удалении пользователя 6. test_session_removed_when_user_deleted: Тест удаления сеанса при удалении пользователя
7. test_session_auto_deletion_after_15_minutes: Тест автоматического удаления сеанса через 15 минут после выхода пользователя 7. test_session_auto_deletion_after_15_minutes: Тест автоматического удаления сеанса через 15 минут после выхода пользователя
8. test_user_cannot_delete_own_session: Тест проверки невозможности пользователя удалить свой собственный сеанс 8. test_user_cannot_delete_own_session: Тест проверки невозможности пользователя удалить свой собственный сеанс
@ -37,7 +37,7 @@ class TestSessionsTab:
Выполняет: Выполняет:
1. Авторизацию в системе 1. Авторизацию в системе
2. Переход на вкладку 'Сеансы' через панель навигации 2. Переход на вкладку 'Сеансы/Текущие' через панель навигации
""" """
# Авторизация в системе # Авторизация в системе
login_page = LoginPage(browser) login_page = LoginPage(browser)
@ -51,6 +51,7 @@ class TestSessionsTab:
main_page.click_main_navigation_panel_item("Настройки") main_page.click_main_navigation_panel_item("Настройки")
main_page.click_subpanel_item("Обслуживание и диагностика") main_page.click_subpanel_item("Обслуживание и диагностика")
main_page.click_subpanel_item("Сеансы") main_page.click_subpanel_item("Сеансы")
main_page.click_subpanel_item("Текущие", parent="Сеансы")
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def cleanup_users(self, browser: Page) -> None: def cleanup_users(self, browser: Page) -> None:
@ -97,7 +98,7 @@ class TestSessionsTab:
3. Соответствие содержимого таблицы данным из БД 3. Соответствие содержимого таблицы данным из БД
""" """
# Инициализация страницы сеансов # Инициализация страницы сеансов
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
# Проверка элементов интерфейса # Проверка элементов интерфейса
sessions_tab.should_be_toolbar() sessions_tab.should_be_toolbar()
@ -112,11 +113,9 @@ class TestSessionsTab:
# Проверяем только заголовки # Проверяем только заголовки
sessions_tab.check_sessions_table_content(verify=False) sessions_tab.check_sessions_table_content(verify=False)
else: else:
# Проверка содержимого таблица с верификацией данных из БД
sessions_tab.check_sessions_table_content(verify=True) sessions_tab.check_sessions_table_content(verify=True)
# Проверка содержимого таблица с верификацией данных из БД
sessions_tab.check_sessions_table_content(verify=True)
def test_delete_session_confirm_window(self, browser: Page) -> None: def test_delete_session_confirm_window(self, browser: Page) -> None:
"""Тест окна подтверждения удаления сеанса. """Тест окна подтверждения удаления сеанса.
@ -129,7 +128,7 @@ class TestSessionsTab:
5. Функциональность кнопок в окне подтверждения удаления 5. Функциональность кнопок в окне подтверждения удаления
""" """
# Инициализация страницы сеансов # Инициализация страницы сеансов
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
# Проверка наличия таблицы сеансов # Проверка наличия таблицы сеансов
sessions_tab.should_be_sessions_table() sessions_tab.should_be_sessions_table()
@ -178,9 +177,10 @@ class TestSessionsTab:
new_mp.click_main_navigation_panel_item("Настройки") new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика") new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы") new_mp.click_subpanel_item("Сеансы")
new_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Инициализация страницы сеансов # Инициализация страницы сеансов
st = SessionsTab(browser) st = CurrentSessionsTab(browser)
# # Проверка наличия таблицы сеансов # # Проверка наличия таблицы сеансов
st.should_be_sessions_table() st.should_be_sessions_table()
@ -204,6 +204,7 @@ class TestSessionsTab:
admin_mp.click_main_navigation_panel_item("Настройки") admin_mp.click_main_navigation_panel_item("Настройки")
admin_mp.click_subpanel_item("Обслуживание и диагностика") admin_mp.click_subpanel_item("Обслуживание и диагностика")
admin_mp.click_subpanel_item("Сеансы") admin_mp.click_subpanel_item("Сеансы")
admin_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Проверка наличия таблица сеансов # Проверка наличия таблица сеансов
st.should_be_sessions_table() st.should_be_sessions_table()
@ -255,9 +256,10 @@ class TestSessionsTab:
new_mp.click_main_navigation_panel_item("Настройки") new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика") new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы") new_mp.click_subpanel_item("Сеансы")
new_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Инициализация страницы сеансов # Инициализация страницы сеансов
st = SessionsTab(browser) st = CurrentSessionsTab(browser)
# Проверка наличия таблицы сеансов # Проверка наличия таблицы сеансов
st.should_be_sessions_table() st.should_be_sessions_table()
@ -276,9 +278,10 @@ class TestSessionsTab:
admin_mp.click_main_navigation_panel_item("Настройки") admin_mp.click_main_navigation_panel_item("Настройки")
admin_mp.click_subpanel_item("Обслуживание и диагностика") admin_mp.click_subpanel_item("Обслуживание и диагностика")
admin_mp.click_subpanel_item("Сеансы") admin_mp.click_subpanel_item("Сеансы")
admin_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Удаление сеанса созданного пользователя по токену # Удаление сеанса созданного пользователя по токену
admin_sessions_tab = SessionsTab(browser) admin_sessions_tab = CurrentSessionsTab(browser)
admin_sessions_tab.should_be_sessions_table() admin_sessions_tab.should_be_sessions_table()
admin_sessions_tab.delete_session_by_token(new_user_token) admin_sessions_tab.delete_session_by_token(new_user_token)
@ -327,7 +330,7 @@ class TestSessionsTab:
login_page.do_login(username=user_data["name"], password=user_data["password"]) login_page.do_login(username=user_data["name"], password=user_data["password"])
# Получение токена сеансов # Получение токена сеансов
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
#sessions_tab.should_be_sessions_table() #sessions_tab.should_be_sessions_table()
session_token = sessions_tab.get_session_token() session_token = sessions_tab.get_session_token()
session_tokens.append(session_token) session_tokens.append(session_token)
@ -340,8 +343,9 @@ class TestSessionsTab:
mp.click_main_navigation_panel_item("Настройки") mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Обслуживание и диагностика") mp.click_subpanel_item("Обслуживание и диагностика")
mp.click_subpanel_item("Сеансы") mp.click_subpanel_item("Сеансы")
mp.click_subpanel_item("Текущие", parent="Сеансы")
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
sessions_tab.should_be_sessions_table() sessions_tab.should_be_sessions_table()
# Проверка наличия сеансов всех пользователей # Проверка наличия сеансов всех пользователей
@ -363,7 +367,7 @@ class TestSessionsTab:
browser.wait_for_timeout(1000) browser.wait_for_timeout(1000)
sessions_tab.check_sessions_table_row_highlighting(rows_count - 1) sessions_tab.check_sessions_table_row_highlighting(rows_count - 1)
def _test_sessions_table_scrolling(self, sessions_tab: SessionsTab) -> None: def _test_sessions_table_scrolling(self, sessions_tab: CurrentSessionsTab) -> None:
"""Вспомогательный метод для проверки скроллинга таблицы сеансов. """Вспомогательный метод для проверки скроллинга таблицы сеансов.
Проверяет: Проверяет:
@ -432,9 +436,10 @@ class TestSessionsTab:
new_mp.click_main_navigation_panel_item("Настройки") new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика") new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы") new_mp.click_subpanel_item("Сеансы")
new_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Получаем токен сеанса # Получаем токен сеанса
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
new_user_token = sessions_tab.get_session_token() new_user_token = sessions_tab.get_session_token()
# Проверка наличия сеанса в таблице # Проверка наличия сеанса в таблице
@ -462,9 +467,10 @@ class TestSessionsTab:
admin_mp.click_main_navigation_panel_item("Настройки") admin_mp.click_main_navigation_panel_item("Настройки")
admin_mp.click_subpanel_item("Обслуживание и диагностика") admin_mp.click_subpanel_item("Обслуживание и диагностика")
admin_mp.click_subpanel_item("Сеансы") admin_mp.click_subpanel_item("Сеансы")
admin_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Проверка отсутствия сеанса после удаления пользователя # Проверка отсутствия сеанса после удаления пользователя
admin_sessions_tab = SessionsTab(browser) admin_sessions_tab = CurrentSessionsTab(browser)
admin_sessions_tab.should_be_sessions_table() admin_sessions_tab.should_be_sessions_table()
# Сеанс должна автоматически удалиться при удалении пользователя # Сеанс должна автоматически удалиться при удалении пользователя
@ -511,9 +517,10 @@ class TestSessionsTab:
new_mp.click_main_navigation_panel_item("Настройки") new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика") new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы") new_mp.click_subpanel_item("Сеансы")
new_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Получаем токен сеанса # Получаем токен сеанса
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
session_token = sessions_tab.get_session_token() session_token = sessions_tab.get_session_token()
# Проверка наличия сеанса в таблице # Проверка наличия сеанса в таблице
@ -532,9 +539,10 @@ class TestSessionsTab:
admin_mp.click_main_navigation_panel_item("Настройки") admin_mp.click_main_navigation_panel_item("Настройки")
admin_mp.click_subpanel_item("Обслуживание и диагностика") admin_mp.click_subpanel_item("Обслуживание и диагностика")
admin_mp.click_subpanel_item("Сеансы") admin_mp.click_subpanel_item("Сеансы")
admin_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Проверка наличия сеанса сразу после выхода # Проверка наличия сеанса сразу после выхода
admin_sessions_tab = SessionsTab(browser) admin_sessions_tab = CurrentSessionsTab(browser)
admin_sessions_tab.should_be_session_in_table(session_token) admin_sessions_tab.should_be_session_in_table(session_token)
admin_mp.do_logout() admin_mp.do_logout()
@ -553,9 +561,10 @@ class TestSessionsTab:
admin_mp.click_main_navigation_panel_item("Настройки") admin_mp.click_main_navigation_panel_item("Настройки")
admin_mp.click_subpanel_item("Обслуживание и диагностика") admin_mp.click_subpanel_item("Обслуживание и диагностика")
admin_mp.click_subpanel_item("Сеансы") admin_mp.click_subpanel_item("Сеансы")
admin_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Проверка отсутствия сеанса после 15 минут # Проверка отсутствия сеанса после 15 минут
admin_sessions_tab = SessionsTab(browser) admin_sessions_tab = CurrentSessionsTab(browser)
admin_sessions_tab.should_be_sessions_table() admin_sessions_tab.should_be_sessions_table()
admin_sessions_tab.should_not_be_session_in_table(session_token) admin_sessions_tab.should_not_be_session_in_table(session_token)
@ -598,9 +607,10 @@ class TestSessionsTab:
new_mp.click_main_navigation_panel_item("Настройки") new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика") new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы") new_mp.click_subpanel_item("Сеансы")
new_mp.click_subpanel_item("Текущие", parent="Сеансы")
# Получаем токен сеанса # Получаем токен сеанса
sessions_tab = SessionsTab(browser) sessions_tab = CurrentSessionsTab(browser)
session_token = sessions_tab.get_session_token() session_token = sessions_tab.get_session_token()
# Проверка наличия сеанса в таблице # Проверка наличия сеанса в таблице

View File

@ -0,0 +1,71 @@
"""Модуль тестов вкладки 'Сеансы/Настройки'.
Содержит тесты для проверки корректности отображения
и функциональности элементов вкладки настройки времени жизни сеансов.
"""
import pytest
from playwright.sync_api import Page
from pages.login_page import LoginPage
from pages.main_page import MainPage
from pages.session_settings_tab import SessionSettingsTab
# @pytest.mark.smoke
class TestSessionSettingsTab:
"""Набор тестов для вкладки 'Сеансы/Настройки'.
Проверяет корректность отображения и функциональность элементов вкладки настройки времени жизни сеансов.
Тесты покрывают следующие сценарии:
1. test_session_settings_tab_content: Тест содержимого вкладки 'Сеансы/Настройки'
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для подготовки тестового окружения.
Выполняет:
1. Авторизацию в системе
2. Переход на вкладку 'Сеансы/Настройки' через панель навигации
"""
# Авторизация в системе
login_page = LoginPage(browser)
login_page.do_login()
# Инициализация главной страницы
main_page = MainPage(browser)
# Проверка и взаимодействие с элементами навигации
main_page.should_be_navigation_panel()
main_page.click_main_navigation_panel_item("Настройки")
main_page.click_subpanel_item("Обслуживание и диагностика")
main_page.click_subpanel_item("Сеансы")
main_page.click_subpanel_item("Настройки", parent="Сеансы")
# @pytest.mark.develop
def test_sessions_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки 'Сеансы/Настройки'.
Проверяет:
1. Наличие и корректность элементов интерфейса
2. Соответствие содержимого полей формы данным из БД
"""
# Инициализация страницы сеансов
session_settings_tab = SessionSettingsTab(browser)
# Проверка элементов интерфейса
session_settings_tab.check_content()
# Проверяем API ответ
response = session_settings_tab.send_get_api_request("e-cmdb/api/objectByPath?path=/config/auth")
if response.status == 200:
response_body = session_settings_tab.get_response_body(response)
if response_body:
# Проверка содержимого таблица с верификацией данных из БД
session_settings = response_body.get("options").get("key_ttl")
session_settings_tab.verify_form_data(session_settings)
else:
print(f"Error request session setings data from API: {response.status_text}")

View File

@ -52,7 +52,7 @@ class TestNavigationPanel:
mp.expand_navigation_subpanel() mp.expand_navigation_subpanel()
@pytest.mark.develop # @pytest.mark.develop
def test_sub_panel_item_click(self, browser: Page): def test_sub_panel_item_click(self, browser: Page):
"""Проверяет возможность клика заданного элемента в подпанели навигации. """Проверяет возможность клика заданного элемента в подпанели навигации.