"""Модуль вкладки 'Сеансы/Настройки'. Содержит класс 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"