"""Модуль контейнера для пересоздания сертификата во вкладке 'Сертификаты'. Содержит класс для работы с формой для пересоздания сертификата во вкладке 'Сертификаты' через Playwright. """ from playwright.sync_api import Page 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("REISSUE_CRTIFICATE_FORM") class ReissueCertificateForm(BaseComponent): """Компонент формы для пересоздания сертификата во вкладке 'Сертификаты'. Предоставляет методы для взаимодействия с элементами формы для пересоздания сертификата во вкладке 'Сертификаты'. """ def __init__(self, page: Page): """Инициализирует компонент формы для пересоздания сертификата во вкладке 'Сертификаты'. Args: page: Экземпляр страницы Playwright. """ super().__init__(page) button_locator = page.locator(CertificateLocators.FORM_CONTAINER).get_by_role("button") self.button_reissue = TooltipButton(page, button_locator, "button_reissue") self.toolbar_info = CustomToolbar(page) # поля блока 'Идентификация CA' identification_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \ filter(has_text='Идентификация CA') self.identification_title = Text(page, identification_title_locator, "identification_title") self.identification_cert_name = TextInput(page, CertificateLocators.FIELD_INPUT_CERT_NAME, "identification_cert_name_field") self.identification_organization = TextInput(page, CertificateLocators.FIELD_INPUT_ORGANIZATION, "identification_organization_field") self.identification_org_unit = TextInput(page, CertificateLocators.FIELD_INPUT_ORG_UNIT, "identification_org_unit_field") # поля блока 'Адрес / Местонахождение' location_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \ filter(has_text='Адрес / Местонахождение') self.location_title = Text(page, location_title_locator, "location_title") self.location_country = TextInput(page, CertificateLocators.FIELD_INPUT_COUNTRY, "location_country_field") self.location_state = TextInput(page, CertificateLocators.FIELD_INPUT_STATE, "location_state_field") self.location_city = TextInput(page, CertificateLocators.FIELD_INPUT_LOC, "location_city_field") # Действия: def get_identification_fields_values(self) -> dict: """Возвращает текущее значение полей блока 'Идентификация CA'. Returns: dict : Текущее значение полей блока 'Идентификация CA'. """ values = {} values.update({"CN": self.identification_cert_name.get_input_value().strip()}) values.update({"O": self.identification_organization.get_input_value().strip()}) values.update({"OU": self.identification_org_unit.get_input_value().strip()}) return values def get_location_fields_values(self) -> dict: """Возвращает текущее значение полей блока 'Адрес / Местонахождение'. Returns: dict : Текущее значение полей блока блока 'Адрес / Местонахождение'. """ values = {} values.update({"C": self.location_country.get_input_value().strip()}) values.update({"ST": self.location_state.get_input_value().strip()}) values.update({"L": self.location_city.get_input_value().strip()}) return values def input_identification_cert_name_field(self, value: str) -> None: """Заполнение поля 'Имя Сертификата' блока 'Идентификация CA'""" self.identification_cert_name.clear() self.identification_cert_name.input_value(value) def input_identification_organization_field(self, value: str) -> None: """Заполнение поля 'Организация' блока 'Идентификация CA'""" self.identification_organization.clear() self.identification_organization.input_value(value) def input_identification_org_unit_field(self, value: str) -> None: """Заполнение поля 'Подразделение' блока 'Идентификация CA'""" self.identification_org_unit.clear() self.identification_org_unit.input_value(value) def input_location_country_field(self, value: str) -> None: """Заполнение поля 'Страна' блока 'Адрес / Местонахождение'""" self.location_country.clear() self.location_country.input_value(value) def input_location_state_field(self, value: str) -> None: """Заполнение поля 'Регион / Область' блока 'Адрес / Местонахождение'""" self.location_state.clear() self.location_state.input_value(value) def input_location_city_field(self, value: str) -> None: """Заполнение поля 'Город' блока 'Адрес / Местонахождение'""" self.location_city.clear() self.location_city.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.button_reissue.check_visibility("Reissue certificate button is missing") assert self.button_reissue.is_disabled(), "Reissue certificate button should be disabled" self.button_reissue.check_tooltip_with_text("Пересоздание сертификата (CA)") # Проверка информационного тулбара self.toolbar_info.check_toolbar_presence(['Создание нового сертификата', 'Приведет к замене корневого сертификата системы']) # проверка наличия всех полей формы self.identification_title.check_visibility("Title 'Идентификация CA' is missing") cert_name_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_CERT_NAME).strip() assert cert_name_label == 'ИМЯ СЕРТИФИКАТА (CN)', f"Unexpected field name {cert_name_label} has got" self.identification_cert_name.check_visibility("Field certificate name input is missing") organization_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_ORGANIZATION).strip() assert organization_label == 'ОРГАНИЗАЦИЯ (О)', f"Unexpected field name {organization_label} has got" self.identification_organization.check_visibility("Field organization input is missing") org_unit_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_ORG_UNIT).strip() assert org_unit_label == 'ПОДРАЗДЕЛЕНИЕ (OU)', f"Unexpected field name {org_unit_label} has got" self.identification_org_unit.check_visibility("Field organization unit input is missing") self.location_title.check_visibility("Title 'Адрес / Местонахождение' is missing") country_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_COUNTRY).strip() assert country_label == 'СТРАНА (С)', f"Unexpected field name {country_label} has got" self.location_country.check_visibility("Field country input is missing") state_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_STATE).strip() assert state_label == 'РЕГИОН / ОБЛАСТЬ (ST)', f"Unexpected field name {state_label} has got" self.location_state.check_visibility("Field state input is missing") city_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_LOC).strip() assert city_label == 'ГОРОД (l)', f"Unexpected field name {city_label} has got" self.location_city.check_visibility("Field city input is missing") def is_reissue_button_disabled(self) -> bool: """Проверяет доступность кнопки перевыпуска сертификата.""" return self.button_reissue.is_disabled()