e-nms_qa_automation/components_derived/user_card.py

154 lines
5.9 KiB
Python
Raw Permalink 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.

"""Модуль компонента карточки пользователя.
Содержит класс для работы с карточкой пользователя через 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 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_close_button(self) -> None:
"""Нажимает кнопку закрытия окна карточки пользователя.
Выполняет клик по кнопке 'Закрыть' в карточке пользователя.
"""
self.close_button.click()
# Проверки:
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"