e-nms_qa_automation/tests/e2e/test_sessions_tab.py

198 lines
8.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль тестов вкладки 'Сеансы'.
Содержит тесты для проверки функциональности
работы с пользовательтскими сессиями.
"""
from typing import Dict
from playwright.sync_api import Page
from pages.login_page import LoginPage
from pages.main_page import MainPage
from pages.session_tab import SessionsTab
from pages.users_tab import UsersTab
import pytest
class TestSessionsTab:
"""Набор тестов для вкладки 'Сеансы'.
Проверяет корректность отображения и функциональность элементов вкладки сеансов.
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser):
"""Фикстура для подготовки тестового окружения.
Выполняет:
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("Сеансы")
@pytest.fixture(scope="function")
def cleanup_user(self, browser: Page) -> None:
"""Фикстура для очистки пользователя NewUser после теста."""
yield
mp = MainPage(browser)
mp.click_subpanel_item("Пользователи")
ut = UsersTab(browser)
# Удаляем тестового пользователя после выполнения теста
user_data: Dict[str, str] = {"name": "NewUser", "role": "Администратор"}
# Проверяем существует ли пользователь и удаляем его
if ut.find_user_in_table(user_data["name"], user_data["role"]) != -1:
ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
ut.delete_user(user_data["name"])
def test_sessions_tab_content(self, browser):
"""Тест содержимого вкладки 'Сеансы'.
Проверяет:
1. Наличие и корректность тулбара
2. Наличие таблицы сеансов
3. Соответствие содержимого таблицы данным из БД
"""
# Инициализация страницы сеансов
sessions_tab = SessionsTab(browser)
# Проверка элементов интерфейса
sessions_tab.should_be_toolbar()
sessions_tab.should_be_sessions_table()
# Проверка содержимого таблицы с верификацией данных из БД
sessions_tab.check_sessions_table_content(verify=True)
def test_sessions_table_row_highlighting(self, browser):
"""Тест содержимого вкладки 'Сеансы'.
Проверяет:
1. Наличие таблицы сеансов
2. Проверка подсветки строки при наведении на нее курсором
"""
# Инициализация страницы сеансов
sessions_tab = SessionsTab(browser)
# Проверка элементов интерфейса
sessions_tab.should_be_sessions_table()
# Получение количества строк в таблице без учета заголовка
rows_count = sessions_tab.get_rows_count()
# Проверка подсветки первой строки
sessions_tab.check_sessions_table_row_highlighting(0)
# Проверка подсветки последней строки строки (если в таблице более одной строки)
if rows_count > 1:
sessions_tab.check_sessions_table_row_highlighting(rows_count - 1)
def test_delete_session_confirm_window(self, browser):
"""Тест содержимого вкладки 'Сеансы'.
Проверяет:
1. Наличие таблицы сеансов
2. Проверка контента и возможности горизонтального скроллинга окна подтверждения удаления сессии
"""
# Инициализация страницы сеансов
sessions_tab = SessionsTab(browser)
# Проверка элементов интерфейса
sessions_tab.should_be_sessions_table()
# Проверка контента и скроллинга окна подтверждения удаления сессии
sessions_tab.check_delete_session_confirm_window()
@pytest.mark.develop
def test_session_for_new_user(self, browser, cleanup_user):
"""Тест содержимого вкладки 'Сеансы'.
Проверяет:
1. Создание нового пользователя
2. Вход нового пользователя в систему
3. Проверка наличия сессии нового пользователя
4. Выход нового пользователя из системы (logout)
5. Вход в систему первоначального пользователя
6. Проверка отсутствия сессии нового пользователя
7. Удаление нового пользователя
"""
user_data = {"name": "NewUser", "role": "Администратор", "password": "qwerty"}
mp = MainPage(browser)
ut = UsersTab(browser)
# Создание нового пользователя
mp.click_subpanel_item("Пользователи")
ut.open_add_user_window()
ut.add_new_user(user_data)
# Обновление списка пользователей (двойной клик - возможно баг?)
mp.click_subpanel_item("Пользователи")
mp.click_subpanel_item("Пользователи")
# Проверка наличия пользователя в таблице
ut.should_be_user_in_table(user_data["name"], user_data["role"])
# Вход в систему для нового пользователя
new_lp = LoginPage(browser)
new_lp.do_login(username=user_data["name"], password=user_data["password"])
# Инициализация главной страницы
new_mp = MainPage(browser)
# Открыть вкладку Сессии
new_mp.should_be_navigation_panel()
new_mp.click_main_navigation_panel_item("Настройки")
new_mp.click_subpanel_item("Обслуживание и диагностика")
new_mp.click_subpanel_item("Сеансы")
# Инициализация страницы сеансов
st = SessionsTab(browser)
# Проверка элементов интерфейса
st.should_be_sessions_table()
# Проверка наличия записи о сессии текущего пользователя
session_token = st.get_session_token()
st.should_be_session_in_table(session_token)
# logout
new_mp.do_logout()
# Авторизация в системе предыдущего пользователя
prev_lp = LoginPage(browser)
prev_lp.do_login()
# Инициализация главной страницы
prev_mp = MainPage(browser)
# Открыть вкладку Сессии
prev_mp.should_be_navigation_panel()
prev_mp.click_main_navigation_panel_item("Настройки")
prev_mp.click_subpanel_item("Обслуживание и диагностика")
prev_mp.click_subpanel_item("Сеансы")
# Проверка элементов интерфейса
st.should_be_sessions_table()
# Проверка отсутствия записи о сессии созданного пользователя после выхода из системы
st.should_not_be_session_in_table(session_token)
# Удаление созданного пользователя
prev_ut = UsersTab(browser)
prev_ut.open_edit_user_page_by_user(user_data["name"], user_data["role"])
prev_ut.delete_user(user_data["name"])