e-nms_qa_automation/components_derived/dialog_user_settings.py

181 lines
7.4 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, 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()