181 lines
7.4 KiB
Python
181 lines
7.4 KiB
Python
"""Модуль диалогового окна просмотра сессионных данных пользователя.
|
||
|
||
Содержит класс для работы с диалоговым окном просмотра
|
||
сессионных данных пользователя через Playwright.
|
||
"""
|
||
|
||
from playwright.sync_api import Page, Locator
|
||
from tools.logger import get_logger
|
||
from locators.user_card_locators import UserCardLocators
|
||
from elements.tooltip_button_element import TooltipButton
|
||
from elements.text_element import Text
|
||
from elements.button_element import Button
|
||
from components.table_component import TableComponent
|
||
from components.base_component import BaseComponent
|
||
|
||
logger = get_logger("USER_SETTINGS_DIALOG")
|
||
|
||
|
||
class UserSettingsDialogWindow(BaseComponent):
|
||
"""Компонент диалоговое окно просмотра сессионных данных пользователя.
|
||
|
||
Предоставляет методы для взаимодействия с элементами
|
||
диалогового окна просмотра сессионных данных пользовател.
|
||
"""
|
||
|
||
def __init__(self, page: Page):
|
||
"""Инициализирует компонент диалоговое окно просмотра сессионных данных пользовател.
|
||
|
||
Args:
|
||
page: Экземпляр страницы Playwright.
|
||
"""
|
||
|
||
super().__init__(page)
|
||
|
||
dialog_window_locator = page.locator(UserCardLocators.DIALOG_USER_SETTINGS)
|
||
|
||
self.dialog_window_title = Text(page,
|
||
dialog_window_locator.\
|
||
locator(UserCardLocators.TITLE_DIALOG_USER_SETTINGS),
|
||
"dialog window title")
|
||
self.close_button = Button(page,
|
||
dialog_window_locator.\
|
||
locator(UserCardLocators.HEADER_DIALOG_USER_SETTINGS). \
|
||
get_by_role("button"),
|
||
"close button")
|
||
|
||
self.user_settings_table = TableComponent(page)
|
||
|
||
# Действия:
|
||
def click_close_button(self):
|
||
"""Нажимает кнопку закрытия окна.
|
||
|
||
Выполняет клик по кнопке 'Закрыть' на строке с заголовком окна.
|
||
"""
|
||
|
||
self.close_button.click()
|
||
|
||
def get_delete_button_from_row(self, row_index: int) -> TooltipButton:
|
||
"""Возвращает кнопку удаления сеанса для указанной строки.
|
||
|
||
Args:
|
||
row_index: Индекс строки в таблице.
|
||
|
||
Returns:
|
||
TooltipButton: Кнопка с подсказкой.
|
||
|
||
Raises:
|
||
AssertionError: Если строка не найдена.
|
||
"""
|
||
|
||
row_locator = self.user_settings_table.get_row_locator(
|
||
UserCardLocators.TABLE_WORK_AREA,
|
||
row_index
|
||
)
|
||
assert isinstance(row_locator, Locator), f"Row with index {row_index} is missing"
|
||
|
||
button_locator = row_locator.get_by_role("button")
|
||
return TooltipButton(self.page, button_locator, "delete_button")
|
||
|
||
# Проверки:
|
||
def check_content(self) -> None:
|
||
"""Проверяет содержимое окно просмотра сессионных данных пользователя."""
|
||
|
||
self.dialog_window_title.check_have_text("Настройки", \
|
||
"Title 'Настройки' is missing on user settings window top")
|
||
self.close_button.check_visibility("Close button is missing on user settings window top")
|
||
|
||
self.should_be_user_settings_table()
|
||
self.check_user_settings_table_content()
|
||
|
||
def check_window_absence(self) -> None:
|
||
"""Проверка отсутствия окна на странице.
|
||
|
||
Raises:
|
||
AssertionError: если окнo присутствует на странице.
|
||
"""
|
||
|
||
self.check_absence(UserCardLocators.DIALOG_USER_SETTINGS, \
|
||
"User settings dialog window is present")
|
||
|
||
def check_window_visibility(self) -> None:
|
||
"""Проверка видимости окна на странице.
|
||
|
||
Raises:
|
||
AssertionError: если окнo отсутствует на странице.
|
||
"""
|
||
|
||
self.check_visibility(UserCardLocators.DIALOG_USER_SETTINGS, \
|
||
"User settings dialog window is missing")
|
||
|
||
|
||
def check_user_settings_table_content(self) -> None:
|
||
"""Проверяет содержимое таблицы сессионных данных пользователя.
|
||
|
||
|
||
Raises:
|
||
AssertionError: Если таблица пуста или заголовки неверны.
|
||
"""
|
||
|
||
expected_headers = [
|
||
'ПОЛЬЗОВАТЕЛЬ',
|
||
'IP АДРЕС',
|
||
'ВРЕМЯ НАЧАЛА СЕССИИ',
|
||
'ДЕЙСТВИЯ'
|
||
]
|
||
|
||
table_content = self.user_settings_table.read(UserCardLocators.TABLE_WORK_AREA)
|
||
len_table_content = len(table_content)
|
||
|
||
if len_table_content == 0:
|
||
assert False, "The contents of the table are missing"
|
||
|
||
actual_headers = table_content[0]
|
||
|
||
assert actual_headers == expected_headers,\
|
||
f"Expected table headers {expected_headers} are not equal {actual_headers}"
|
||
|
||
if len_table_content == 1:
|
||
assert False, "Table body is missing"
|
||
|
||
for index in range(len_table_content - 1):
|
||
self.should_be_delete_button_on_user_settings_table_row(index, "Удалить")
|
||
|
||
def should_be_user_settings_table(self) -> None:
|
||
"""Проверяет наличие таблицы сессионных данных пользователя.
|
||
|
||
Raises:
|
||
AssertionError: Если таблица отсутствует.
|
||
"""
|
||
|
||
self.user_settings_table.check_visibility(
|
||
UserCardLocators.TABLE_WORK_AREA,
|
||
"User settings table is missing")
|
||
|
||
def should_be_delete_button_on_user_settings_table_row(self,
|
||
row_index: int,
|
||
tooltip: str
|
||
) -> None:
|
||
"""Проверяет наличие кнопки удаления в строке таблицы.
|
||
|
||
Args:
|
||
row_index: Индекс проверяемой строки.
|
||
tooltip: Ожидаемый текст подсказки.
|
||
|
||
Raises:
|
||
AssertionError: Если кнопка отсутствует или подсказка неверна.
|
||
"""
|
||
|
||
delete_button = self.get_delete_button_from_row(row_index)
|
||
|
||
# Ожидаем исчезновения предыдущих подсказок перед проверкой
|
||
delete_button.wait_for_tooltip_to_disappear()
|
||
|
||
delete_button.check_visibility(
|
||
f"Delete session button is missing on {row_index} row"
|
||
)
|
||
delete_button.check_tooltip_with_text(tooltip)
|
||
|
||
# Ожидаем исчезновения подсказки после проверки
|
||
delete_button.wait_for_tooltip_to_disappear()
|