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