"""Модуль компонента карточки пользователя.
Содержит класс для работы с карточкой пользователя через 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
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.close_button = Button(
page,
page.get_by_role("button", name="Закрыть"),
"close button"
)
# окна, отрываемые после нажатия кнопок
self.change_password_modal_window = ChangePasswordModalWindow(page)
# Действия:
# Проверки:
[документация]
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"
)
self.close_button.check_visibility(
"Close button is missing on user card"
)
[документация]
def check_card_is_closed(self) -> None:
"""Проверяет, что карточка пользователя отсутствует.
Raises:
AssertionError: Если карточка пользователя все еще открыта.
"""
card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("xpath=../..")
class_attr = card_locator.get_attribute('class')
assert 'menuable__content__active' not in class_attr, "User card should be closed"