173 lines
9.5 KiB
Python
173 lines
9.5 KiB
Python
"""Модуль контейнера для пересоздания сертификата во вкладке 'Сертификаты'.
|
||
|
||
Содержит класс для работы с формой для пересоздания
|
||
сертификата во вкладке 'Сертификаты' через 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()
|