e-nms_qa_automation/pages/keycloak_settings_tab.py

212 lines
9.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль вкладки настройки Keycloak Аутентификации.
Содержит класс KeycloakAuthSettings для работы с вкладкой настройки Keycloak Аутентификации.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
import re
from playwright.sync_api import Page
from locators.settings_form_locators import SettingsFormLocators
from elements.text_input_element import TextInput
from components.toolbar_component import ToolbarComponent
from components.alert_component import AlertComponent
from components_derived.settings_form_component import SettingsFormComponent
from pages.base_page import BasePage
class KeycloakAuthSettingsTab(BasePage):
"""Класс для работы с вкладкой настройки Keycloak Аутентификации.
Предоставляет методы для взаимодействия с вкладкой настройки Keycloak Аутентификации.
Args:
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки настройки Keycloak Аутентификации."""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "KEYCLOAK")
toolbar_button_edit = self.page.get_by_role("navigation"). \
locator("//button[@data-testid='KEYCLOAK__btn__edit']")
self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_save = self.page.get_by_role("navigation"). \
locator("//button[@data-testid='KEYCLOAK__btn__done']")
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
toolbar_button_cancel = self.page.get_by_role("navigation"). \
locator("//button[@data-testid='KEYCLOAK__btn__close']")
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
# Форма для отображения/редактирования полей настроек KEYCLOAK Аутентификации
self.settings_form = SettingsFormComponent(page)
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
loc = self.input_fields_locators.get("url")
loc_url_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__url']")
url_setting_input = TextInput(page, loc_url_input, "url_setting_input")
self.settings_form.add_content_item("url_setting_input", url_setting_input)
loc = self.input_fields_locators.get("url_token")
loc_url_token_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__url_token']")
url_token_setting_input = TextInput(page, loc_url_token_input, "url_token_setting_input")
self.settings_form.add_content_item("url_token_setting_input", url_token_setting_input)
loc = self.input_fields_locators.get("clientid")
loc_clientid_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__clientid']")
clientid_setting_input = TextInput(page, loc_clientid_input, "clientid_setting_input")
self.settings_form.add_content_item("clientid_setting_input", clientid_setting_input)
loc = self.input_fields_locators.get("clientsecret")
loc_clientsecret_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__clientsecret']")
clientsecret_setting_input = TextInput(page, loc_clientsecret_input, "clientsecret_setting_input")
self.settings_form.add_content_item("clientsecret_setting_input", clientsecret_setting_input)
loc = self.input_fields_locators.get("redirect_uri")
loc_redirect_uri_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__redirect_uri']")
redirect_uri_setting_input = TextInput(page, loc_redirect_uri_input, "redirect_uri_setting_input")
self.settings_form.add_content_item("redirect_uri_setting_input", redirect_uri_setting_input)
self.alert = AlertComponent(page)
# Действия:
def click_cancel_button(self) -> None:
"""Нажатие кнопки 'Отменить' на тулбаре."""
self.toolbar.check_button_visibility("cancel")
self.toolbar.get_button_by_name("cancel").click()
def click_edit_button(self) -> None:
"""Нажатие кнопки 'Редактировать' на тулбаре."""
self.toolbar.check_button_visibility("edit")
self.toolbar.get_button_by_name("edit").click()
def click_save_button(self) -> None:
"""Нажатие кнопки 'Сохранить' на тулбаре."""
self.toolbar.check_button_visibility("save")
self.toolbar.get_button_by_name("save").click()
def get_current_setting_values(self) -> dict:
"""Возвращает текущее значение полей настроек.
Returns:
str : Текущее значение полей настроек.
"""
values = {}
field = self.settings_form.get_content_item("url_setting_input")
values.update({"url": field.get_input_value().strip()})
field = self.settings_form.get_content_item("url_token_setting_input")
values.update({"url_token": field.get_input_value().strip()})
field = self.settings_form.get_content_item("clientid_setting_input")
values.update({"clientid": field.get_input_value().strip()})
field = self.settings_form.get_content_item("clientsecret_setting_input")
values.update({"clientsecret": field.get_input_value().strip()})
field = self.settings_form.get_content_item("redirect_uri_setting_input")
values.update({"redirect_uri": field.get_input_value().strip()})
return values
def input_url(self, text: str) -> None:
"""Заполнение поля 'URL'."""
message_input = self.settings_form.get_content_item("url_setting_input")
message_input.clear()
message_input.input_value(text)
def input_url_token(self, text: str) -> None:
"""Заполнение поля 'URL_TOKEN'."""
message_input = self.settings_form.get_content_item("url_token_setting_input")
message_input.clear()
message_input.input_value(text)
def input_clientid(self, text: str) -> None:
"""Заполнение поля 'CLIENTID'."""
message_input = self.settings_form.get_content_item("clientid_setting_input")
message_input.clear()
message_input.input_value(text)
def input_clientsecret(self, text: str) -> None:
"""Заполнение поля 'CLIENTSECRET'."""
message_input = self.settings_form.get_content_item("clientsecret_setting_input")
message_input.clear()
message_input.input_value(text)
def input_redirect_uri(self, text: str) -> None:
"""Заполнение поля 'REDIRECT_URI'."""
message_input = self.settings_form.get_content_item("redirect_uri_setting_input")
message_input.clear()
message_input.input_value(text)
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов страницы."""
expected_input_field_names = ["url", "url_token", "clientid",
"clientsecret", "redirect_uri"]
self.should_be_toolbar()
actual_input_field_names = self.input_fields_locators.keys()
for name in expected_input_field_names:
assert name in actual_input_field_names, \
f"Expected input field name {name} is missing in actual input field names"
for name in self.settings_form.content_items.keys():
item = self.settings_form.get_content_item(name)
item.check_visibility(
f"KEYCLOAK 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("KEYCLOAK")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'KEYCLOAK' is missing")
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 should_be_success_alert(self) -> None:
"""Проверяет наличие сообщения об успешном сохранении заданных параметров.
Raises:
AssertionError: Если тулбар отсутствует.
"""
alert_type = self.alert.get_alert_type()
assert alert_type == "success", f"Expected success alert, but got {alert_type} alert"
self.alert.check_alert_presence('\nПараметры успешно\n обновлены\n')
self.alert.check_alert_absence('\nПараметры успешно\n обновлены\n')