149 lines
5.8 KiB
Python
149 lines
5.8 KiB
Python
"""Модуль компонента карточки пользователя.
|
||
|
||
Содержит класс для работы с карточкой пользователя через Playwright.
|
||
"""
|
||
|
||
from playwright.sync_api import Page
|
||
from tools.logger import get_logger
|
||
from locators.user_card_locators import UserCardLocators
|
||
from elements.text_element import Text
|
||
from elements.button_element import Button
|
||
from data.roles_dict import roles_dict
|
||
from data.environment import host
|
||
from components.base_component import BaseComponent
|
||
from components_derived.modal_change_password import ChangePasswordModalWindow
|
||
from components_derived.dialog_user_settings import UserSettingsDialogWindow
|
||
|
||
logger = get_logger("USER_CARD")
|
||
|
||
|
||
class UserCard(BaseComponent):
|
||
"""Компонент карточка.
|
||
|
||
Предоставляет методы для взаимодействия с элементами карточки.
|
||
"""
|
||
|
||
def __init__(self, page: Page):
|
||
"""Инициализирует компонент карточки.
|
||
|
||
Args:
|
||
page: Экземпляр страницы Playwright.
|
||
"""
|
||
|
||
super().__init__(page)
|
||
|
||
card_locator = page.locator(UserCardLocators.CARD_USER)
|
||
|
||
# Обновленные локаторы согласно новой структуре карточки
|
||
self.current_user_name = Text(
|
||
page,
|
||
card_locator.locator("xpath=/div/div[1]"), # Изменено с div[2] на div[1]
|
||
"current user name"
|
||
)
|
||
self.current_user_role = Text(
|
||
page,
|
||
card_locator.locator("xpath=/div/div[2]"), # Изменено с div[3] на div[2]
|
||
"current user role"
|
||
)
|
||
self.login_time = Text(
|
||
page,
|
||
card_locator.locator("xpath=/div/div[3]"), # Изменено с div[4] на div[3]
|
||
"login time"
|
||
)
|
||
self.session_time = Text(
|
||
page,
|
||
card_locator.locator("xpath=/div/div[4]"), # Изменено с div[5] на div[4]
|
||
"session time" # Исправлено имя с "current user name" на "session time"
|
||
)
|
||
self.logout_button = Button(
|
||
page,
|
||
page.get_by_role("button", name="Выйти"),
|
||
"logout button"
|
||
)
|
||
self.change_password_button = Button(
|
||
page,
|
||
page.get_by_role("button", name="Изменить пароль"),
|
||
"change password button"
|
||
)
|
||
self.settings_button = Button(
|
||
page,
|
||
page.get_by_role("button", name="Настройки"),
|
||
"settings button"
|
||
)
|
||
|
||
# окна, отрываемые после нажатия кнопок
|
||
self.user_settings_dialog_window = UserSettingsDialogWindow(page)
|
||
self.change_password_modal_window = ChangePasswordModalWindow(page)
|
||
|
||
# Действия:
|
||
def click_change_password_button(self) -> ChangePasswordModalWindow:
|
||
"""Нажимает кнопку открытия окна изменения пароля.
|
||
|
||
Выполняет клик по кнопке 'Изменить пароль' в карточке пользователя.
|
||
"""
|
||
|
||
self.change_password_button.click()
|
||
return self.change_password_modal_window
|
||
|
||
def click_logout_button(self) -> None:
|
||
"""Нажимает кнопку выхода из системы.
|
||
|
||
Выполняет клик по кнопке 'Выйти' в карточке пользователя.
|
||
"""
|
||
|
||
self.logout_button.click()
|
||
|
||
def click_settings_button(self) -> UserSettingsDialogWindow:
|
||
"""Нажимает кнопку открытия окна пользовательских сессий.
|
||
|
||
Выполняет клик по кнопке 'Настройки' в карточке пользователя.
|
||
"""
|
||
|
||
self.settings_button.click()
|
||
return self.user_settings_dialog_window
|
||
|
||
# Проверки:
|
||
def check_content(self) -> None:
|
||
"""Проверяет наличие и корректность элементов карточки пользователя
|
||
в зависимости от его роли в системе."""
|
||
|
||
current_user_credential = host.get_current_user_credential()
|
||
|
||
name = current_user_credential["login"]
|
||
text_to_check = f"Имя пользователя: {name}"
|
||
self.current_user_name.check_have_text(
|
||
text_to_check,
|
||
f"Expected text {text_to_check} is missing in user card"
|
||
)
|
||
|
||
role = roles_dict.get(current_user_credential["role"])
|
||
if role is None:
|
||
assert False, "Unknown user role in current user credential"
|
||
text_to_check = f"Роль: {role}"
|
||
self.current_user_role.check_have_text(
|
||
text_to_check,
|
||
f"Expected text {text_to_check} is missing in user card"
|
||
)
|
||
|
||
login_time_str = self.login_time.get_text(0)
|
||
assert login_time_str.find("Время входа:") != -1, (
|
||
"Expected text 'Время входа:' is missing in user card"
|
||
)
|
||
session_time_str = self.session_time.get_text(0)
|
||
assert session_time_str.find("Время сессии:") != -1, (
|
||
"Expected text 'Время сессии:' is missing in user card"
|
||
)
|
||
|
||
self.logout_button.check_visibility(
|
||
"Logout button is missing on user card"
|
||
)
|
||
self.change_password_button.check_visibility(
|
||
"Change password button is missing on user card"
|
||
)
|
||
|
||
admin_roles = ["Администратор", "Специалист информационной безопасности"]
|
||
if role in admin_roles:
|
||
self.settings_button.check_visibility(
|
||
"Settings button is missing on user card"
|
||
)
|