Актуализированы тесты для вкладок Сеансы/Текущие и Сеансы/Настройки
parent
632cf4ee40
commit
eb7fe13b02
|
|
@ -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")
|
||||||
|
|
@ -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')]"
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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,8 +113,6 @@ 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)
|
||||||
|
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
# Проверка наличия сеанса в таблице
|
# Проверка наличия сеанса в таблице
|
||||||
|
|
@ -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}")
|
||||||
|
|
@ -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):
|
||||||
"""Проверяет возможность клика заданного элемента в подпанели навигации.
|
"""Проверяет возможность клика заданного элемента в подпанели навигации.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue