281 lines
14 KiB
Python
281 lines
14 KiB
Python
"""Модуль вкладки 'Сеансы/Настройки'.
|
||
|
||
Содержит класс SessionSettingsTab для работы с полями настройки сессий пользователей.
|
||
"""
|
||
|
||
import re
|
||
from playwright.sync_api import Page
|
||
from locators.settings_form_locators import SettingsFormLocators
|
||
from elements.text_input_element import TextInput
|
||
from components.toolbar_component import ToolbarComponent
|
||
from components.alert_component import AlertComponent
|
||
from components_derived.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)
|
||
|
||
self.toolbar = ToolbarComponent(page, "Время жизни сеанса")
|
||
toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
|
||
locator("//button[@data-testid='SESSION_SETTINGS__btn__edit']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
|
||
|
||
toolbar_button_save = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
|
||
locator("//button[@data-testid='SESSION_SETTINGS__btn__submit']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
|
||
|
||
toolbar_button_cancel = self.page.get_by_role("navigation").filter(has_text=re.compile("Время жизни сеанса")). \
|
||
locator("//button[@data-testid='SESSION_SETTINGS__btn__cancelEdit']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
|
||
|
||
# Форма для отображения/редактирования полей настроек сессии пользователя
|
||
self.settings_form = SettingsFormComponent(page)
|
||
|
||
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
|
||
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
|
||
|
||
# Используем локаторы для числовых полей
|
||
loc = self.input_fields_locators.get("Администратор")
|
||
loc_admin = loc.locator("//input[@data-testid='SESSION_SETTINGS__text-field__administrator']")
|
||
admin_setting = TextInput(page, loc_admin, "admin_setting")
|
||
self.settings_form.add_content_item("admin_setting", admin_setting)
|
||
|
||
loc = self.input_fields_locators.get("Оператор")
|
||
loc_oper = loc.locator("//input[@data-testid='SESSION_SETTINGS__text-field__operator']")
|
||
operator_setting = TextInput(page, loc_oper, "operator_setting")
|
||
self.settings_form.add_content_item("operator_setting", operator_setting)
|
||
|
||
loc = self.input_fields_locators.get("Контактное лицо")
|
||
loc_manager = loc.locator("//input[@data-testid='SESSION_SETTINGS__text-field__manager']")
|
||
manager_setting = TextInput(page, loc_manager, "manager_setting")
|
||
self.settings_form.add_content_item("manager_setting", manager_setting)
|
||
|
||
loc = self.input_fields_locators.get("Специалист информационной безопасности")
|
||
loc_inform_secur_user = loc.locator("//input[@data-testid='SESSION_SETTINGS__text-field__inform_secur_user']")
|
||
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)
|
||
|
||
loc = self.input_fields_locators.get('$collector')
|
||
loc_collector = loc.locator("//input[@data-testid='SESSION_SETTINGS__text-field__$collector']")
|
||
collector_setting = TextInput(page, loc_collector, "collector_setting")
|
||
self.settings_form.add_content_item("collector_setting", collector_setting)
|
||
|
||
# Окно сообщения об успешном/неуспешном сохранении настроек
|
||
self.alert = AlertComponent(page)
|
||
|
||
# Действия:
|
||
def click_cancel_button(self) -> None:
|
||
"""Нажатие кнопки 'Отменить' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("cancel")
|
||
self.toolbar.get_button_by_name("cancel").click()
|
||
|
||
def click_edit_button(self) -> None:
|
||
"""Нажатие кнопки 'Редактировать' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("edit")
|
||
self.toolbar.get_button_by_name("edit").click()
|
||
|
||
def click_save_button(self) -> None:
|
||
"""Нажатие кнопки 'Сохранить' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("save")
|
||
self.toolbar.get_button_by_name("save").click()
|
||
|
||
def decrease_setting_value(self, field_name: str) -> None:
|
||
"""Уменьшение на единицу значения поля настройки с помощью стрелочки вниз."""
|
||
|
||
field = self.get_field_by_name(field_name)
|
||
field.decrease_value()
|
||
|
||
def increase_setting_value(self, field_name: str) -> None:
|
||
"""Увеличение на единицу значения поля настройки с помощью стрелочки вверх."""
|
||
|
||
field = self.get_field_by_name(field_name)
|
||
field.increase_value()
|
||
|
||
def get_field_by_name(self, field_name: str) -> TextInput:
|
||
"""Возвращает элемент поле ввода по его имени.
|
||
|
||
Returns:
|
||
TextInput: Элемент поле ввода.
|
||
"""
|
||
|
||
if field_name == "administrator":
|
||
field = self.settings_form.get_content_item("admin_setting")
|
||
elif field_name == "operator":
|
||
field = self.settings_form.get_content_item("operator_setting")
|
||
elif field_name == "manager":
|
||
field = self.settings_form.get_content_item("manager_setting")
|
||
elif field_name == "inform_secur_user":
|
||
field = self.settings_form.get_content_item("inform_secur_user_setting")
|
||
elif field_name == '$collector':
|
||
field = self.settings_form.get_content_item("collector_setting")
|
||
else:
|
||
assert False, f"Got unsupported field name {field_name}"
|
||
return field
|
||
|
||
def get_setting_value(self, field_name: str) -> str:
|
||
"""Возвращает текущее значение требуемого поля настроек.
|
||
|
||
Returns:
|
||
str : Текущее значение требуемого поля настроек.
|
||
"""
|
||
|
||
return self.get_field_by_name(field_name).get_input_value().strip()
|
||
|
||
def get_settings_values(self) -> dict:
|
||
"""Возвращает словарь с текущими значениями настроек времени жизни сессии.
|
||
|
||
Returns:
|
||
dict: Cловарь с текущими значениями настроек времени жизни сессии.
|
||
"""
|
||
|
||
current_values = {}
|
||
|
||
current_values['administrator'] = self.settings_form.get_content_item("admin_setting").\
|
||
get_input_value().strip()
|
||
current_values['operator'] = self.settings_form.get_content_item("operator_setting").\
|
||
get_input_value().strip()
|
||
current_values['manager'] = self.settings_form.get_content_item("manager_setting").\
|
||
get_input_value().strip()
|
||
current_values['inform_secur_user'] = self.settings_form.get_content_item("inform_secur_user_setting").\
|
||
get_input_value().strip()
|
||
current_values['$collector'] = self.settings_form.get_content_item("collector_setting").\
|
||
get_input_value().strip()
|
||
return current_values
|
||
|
||
def edit_settings(self, new_settings: dict) -> None:
|
||
"""Изменение текущих значений настроек времени жизни сессии.
|
||
"""
|
||
|
||
self.click_edit_button()
|
||
|
||
for key, value in new_settings.items():
|
||
field = self.get_field_by_name(key)
|
||
field.input_value(value)
|
||
|
||
# temporararily
|
||
# self.click_save_button()
|
||
|
||
# alert_type = self.alert.get_alert_type()
|
||
# if alert_type == "success":
|
||
# self.alert.check_alert_presence(' Параметры успешно\n обновлены ')
|
||
# self.alert.check_alert_absence(' Параметры успешно\n обновлены ')
|
||
# else:
|
||
# assert False, f"Got unexpected alert type {alert_type}"
|
||
|
||
def scroll_down(self) -> None:
|
||
"""Скроллинг вниз формы настроек времени жизни сессии.
|
||
"""
|
||
|
||
locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
|
||
self.settings_form.scroll_down(locator)
|
||
|
||
def scroll_up(self) -> None:
|
||
"""Скроллинг вверх формы настроек времени жизни сессии.
|
||
"""
|
||
|
||
locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
|
||
self.settings_form.scroll_up(locator)
|
||
|
||
# Проверки:
|
||
def check_content(self):
|
||
"""Проверяет наличие и корректность всех элементов формы."""
|
||
|
||
expected_input_field_names = ["Администратор", "Оператор",
|
||
"Специалист информационной безопасности",
|
||
"Контактное лицо", "$collector"]
|
||
|
||
self.should_be_toolbar()
|
||
self.should_be_toolbar_buttons()
|
||
|
||
actual_input_field_names = self.input_fields_locators.keys()
|
||
assert set(actual_input_field_names) == set(expected_input_field_names), \
|
||
f"Misscomparison input field names: Expected {expected_input_field_names}, Actual {actual_input_field_names}"
|
||
|
||
for name in self.settings_form.content_items.keys():
|
||
item = self.settings_form.get_content_item(name)
|
||
item.check_visibility(
|
||
f"Session settings input form item with name '{name}' is missing"
|
||
)
|
||
|
||
for name in actual_input_field_names:
|
||
# Для суффикса "минут"
|
||
value_suffix_loc = self.input_fields_locators.get(name). \
|
||
locator(SettingsFormLocators.SETTINGS_FORM_INPUT_VALUE_SUFFIX)
|
||
value_suffix = value_suffix_loc.text_content().strip()
|
||
assert value_suffix == "минут", f"Incorrect value suffix for field {name}"
|
||
|
||
def check_vertical_scrolling(self) -> bool:
|
||
"""Проверка возможности вертикального скроллинга формы настроек времени жизни сессии.
|
||
"""
|
||
|
||
locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
|
||
return self.settings_form.check_vertical_scrolling(locator)
|
||
|
||
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"
|