e-nms_qa_automation/components_derived/user_card.py

149 lines
5.8 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.

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