"""Модуль контейнера для импорта сертификата во вкладке 'Сертификаты'. Содержит класс для работы с формой для импорта сертификата во вкладке 'Сертификаты' через Playwright. """ from playwright.sync_api import Page, expect from tools.logger import get_logger from locators.certificate_locators import CertificateLocators from elements.text_input_element import TextInput from elements.text_element import Text from elements.tooltip_button_element import TooltipButton from components.toolbar_custom_component import CustomToolbar from components.base_component import BaseComponent logger = get_logger("IMPORT_CRTIFICATE_FORM") class ImportCertificateForm(BaseComponent): """Компонент формы для импорта сертификата во вкладке 'Сертификаты'. Предоставляет методы для взаимодействия с элементами формы для импорта сертификата во вкладке 'Сертификаты'. """ def __init__(self, page: Page): """Инициализирует компонент формы для импорта сертификата во вкладке 'Сертификаты'. Args: page: Экземпляр страницы Playwright. """ super().__init__(page) import_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \ filter(has_text='Импорт CA (P12)') self.import_title = Text(page, import_title_locator, "import_title") button_locator = page.locator(CertificateLocators.BUTTON_IMPORT) self.button_import = TooltipButton(page, button_locator, "button_import") self.toolbar_info = CustomToolbar(page) self.password_input = TextInput(page, CertificateLocators.FIELD_INPUT_PASSWORD, "password_input_field") # Действия: def get_password_field_value(self) -> str: """Возвращает текущее значение поля 'Пароль'. Returns: str : Текущее значение поля 'Пароль. """ return self.password_input.get_input_value().strip() def input_password_field(self, value: str) -> None: """Заполнение поля 'Пароль'""" self.password_input.clear() self.password_input.input_value(value) def _get_label_for_input_field(self, field_locator: str) -> str: div_loc = f"//div[contains(@class, 'flex')][.{field_locator}]" label = self.page.locator(div_loc).locator("//preceding-sibling::div[1]").locator("//input") return label.input_value() # Проверки: def check_content(self): """Проверяет наличие и корректность всех элементов формы.""" self.import_title.check_visibility("Title 'Импорт CA (P12)' is missing") self.button_import.check_visibility("Import certificate button is missing") assert self.button_import.is_disabled(), "Import certificate button should be disabled" self.button_import.check_tooltip_with_text("Импорт сертификата (CA)") # Проверка информационного тулбара self.toolbar_info.check_toolbar_presence(['Создание нового сертификата', 'Приведет к замене корневого сертификата системы']) # проверка наличия всех полей формы password_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_PASSWORD).strip() assert password_label == 'Пароль', f"Unexpected field name {password_label} has got" self.password_input.check_visibility("Field password input is missing") info_loc = self.page.get_by_text("Пароль используется для расшифровки закрытого ключа в файле P12") expect(info_loc).to_be_visible() def is_import_button_disabled(self) -> bool: """Проверяет наличие и доступность кнопки перевыпуска сертификата.""" self.button_import.check_visibility("Import certificate button is missing") return self.button_import.is_disabled()