Астуализированы тесты карточки пользователя
parent
68672327af
commit
8380bb38d3
|
|
@ -1,180 +0,0 @@
|
||||||
"""Модуль диалогового окна просмотра сессионных данных пользователя.
|
|
||||||
|
|
||||||
Содержит класс для работы с диалоговым окном просмотра
|
|
||||||
сессионных данных пользователя через 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()
|
|
||||||
|
|
@ -12,7 +12,6 @@ from data.roles_dict import roles_dict
|
||||||
from data.environment import host
|
from data.environment import host
|
||||||
from components.base_component import BaseComponent
|
from components.base_component import BaseComponent
|
||||||
from components_derived.modal_change_password import ChangePasswordModalWindow
|
from components_derived.modal_change_password import ChangePasswordModalWindow
|
||||||
from components_derived.dialog_user_settings import UserSettingsDialogWindow
|
|
||||||
|
|
||||||
logger = get_logger("USER_CARD")
|
logger = get_logger("USER_CARD")
|
||||||
|
|
||||||
|
|
@ -65,14 +64,13 @@ class UserCard(BaseComponent):
|
||||||
page.get_by_role("button", name="Изменить пароль"),
|
page.get_by_role("button", name="Изменить пароль"),
|
||||||
"change password button"
|
"change password button"
|
||||||
)
|
)
|
||||||
self.settings_button = Button(
|
self.close_button = Button(
|
||||||
page,
|
page,
|
||||||
page.get_by_role("button", name="Настройки"),
|
page.get_by_role("button", name="Закрыть"),
|
||||||
"settings button"
|
"close button"
|
||||||
)
|
)
|
||||||
|
|
||||||
# окна, отрываемые после нажатия кнопок
|
# окна, отрываемые после нажатия кнопок
|
||||||
self.user_settings_dialog_window = UserSettingsDialogWindow(page)
|
|
||||||
self.change_password_modal_window = ChangePasswordModalWindow(page)
|
self.change_password_modal_window = ChangePasswordModalWindow(page)
|
||||||
|
|
||||||
# Действия:
|
# Действия:
|
||||||
|
|
@ -93,14 +91,13 @@ class UserCard(BaseComponent):
|
||||||
|
|
||||||
self.logout_button.click()
|
self.logout_button.click()
|
||||||
|
|
||||||
def click_settings_button(self) -> UserSettingsDialogWindow:
|
def click_close_button(self) -> None:
|
||||||
"""Нажимает кнопку открытия окна пользовательских сессий.
|
"""Нажимает кнопку закрытия окна карточки пользователя.
|
||||||
|
|
||||||
Выполняет клик по кнопке 'Настройки' в карточке пользователя.
|
Выполняет клик по кнопке 'Закрыть' в карточке пользователя.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.settings_button.click()
|
self.close_button.click()
|
||||||
return self.user_settings_dialog_window
|
|
||||||
|
|
||||||
# Проверки:
|
# Проверки:
|
||||||
def check_content(self) -> None:
|
def check_content(self) -> None:
|
||||||
|
|
@ -141,8 +138,16 @@ class UserCard(BaseComponent):
|
||||||
"Change password button is missing on user card"
|
"Change password button is missing on user card"
|
||||||
)
|
)
|
||||||
|
|
||||||
admin_roles = ["Администратор", "Специалист информационной безопасности"]
|
self.close_button.check_visibility(
|
||||||
if role in admin_roles:
|
"Close button is missing on user card"
|
||||||
self.settings_button.check_visibility(
|
)
|
||||||
"Settings 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"
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ class TestUserCard:
|
||||||
|
|
||||||
Тесты покрывают следующие сценарии:
|
Тесты покрывают следующие сценарии:
|
||||||
1. test_user_card_content: Проверяет содержимое карточки пользователя
|
1. test_user_card_content: Проверяет содержимое карточки пользователя
|
||||||
2. test_open_close_user_settings_window: Проверяет возможность открытия и закрытия диалогового окна просмотра сессионных данных пользователя
|
2. test_logout_button: Проверяет выход из приложения при нажатии кнопки 'Выйти' и переход на страницу login
|
||||||
3. test_user_settings_window_content: Проверяет наличие и корректность элементов диалогового окна просмотра сессионных данных пользователя
|
3. test_close_button: Проверяет закрытие карточки пользователя при нажатии на кнопку 'Закрыть'
|
||||||
4. test_change_password_window_content: Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя
|
4. test_change_password_window_content: Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя
|
||||||
5. test_change_password_successful: Проверяет успешное изменение пароля текущего пользователя
|
5. test_change_password_successful: Проверяет успешное изменение пароля текущего пользователя
|
||||||
6. test_change_password_unsuccessful: Проверяет неуспешное изменение пароля текущего пользователя
|
6. test_change_password_unsuccessful: Проверяет неуспешное изменение пароля текущего пользователя
|
||||||
|
|
@ -42,7 +42,7 @@ class TestUserCard:
|
||||||
mp.click_main_navigation_panel_item("Настройки")
|
mp.click_main_navigation_panel_item("Настройки")
|
||||||
mp.click_subpanel_item("Пользователи")
|
mp.click_subpanel_item("Пользователи")
|
||||||
browser.wait_for_timeout(500)
|
browser.wait_for_timeout(500)
|
||||||
|
|
||||||
ut.open_add_user_window()
|
ut.open_add_user_window()
|
||||||
ut.add_new_user(user_data)
|
ut.add_new_user(user_data)
|
||||||
|
|
||||||
|
|
@ -96,8 +96,9 @@ class TestUserCard:
|
||||||
user_card = mp.click_user_button()
|
user_card = mp.click_user_button()
|
||||||
user_card.check_content()
|
user_card.check_content()
|
||||||
|
|
||||||
def test_open_close_user_settings_window(self, browser: Page) -> None:
|
# @pytest.mark.develop
|
||||||
"""Проверяет возможность открытия и закрытия диалогового окна просмотра сеанса данных пользователя.
|
def test_logout_button(self, browser: Page) -> None:
|
||||||
|
"""Проверяет выход из приложения при нажатии кнопки 'Выйти' и переход на страницу login.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
browser: Экземпляр страницы Playwright.
|
browser: Экземпляр страницы Playwright.
|
||||||
|
|
@ -109,14 +110,16 @@ class TestUserCard:
|
||||||
mp = MainPage(browser)
|
mp = MainPage(browser)
|
||||||
|
|
||||||
user_card = mp.click_user_button()
|
user_card = mp.click_user_button()
|
||||||
user_settings_window = user_card.click_settings_button()
|
mp.wait_for_timeout(300)
|
||||||
|
|
||||||
user_settings_window.check_window_visibility()
|
user_card.click_logout_button()
|
||||||
user_settings_window.click_close_button()
|
|
||||||
user_settings_window.check_window_absence()
|
|
||||||
|
|
||||||
def test_user_settings_window_content(self, browser: Page) -> None:
|
new_lp = LoginPage(browser)
|
||||||
"""Проверяет наличие и корректность элементов диалогового окна просмотра сеанса данных пользователя.
|
new_lp.check_URL('login', "Login page should be opened")
|
||||||
|
|
||||||
|
# @pytest.mark.develop
|
||||||
|
def test_close_button(self, browser: Page) -> None:
|
||||||
|
"""Проверяет закрытие карточки пользователя при нажатии на кнопку 'Закрыть'.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
browser: Экземпляр страницы Playwright.
|
browser: Экземпляр страницы Playwright.
|
||||||
|
|
@ -128,10 +131,10 @@ class TestUserCard:
|
||||||
mp = MainPage(browser)
|
mp = MainPage(browser)
|
||||||
|
|
||||||
user_card = mp.click_user_button()
|
user_card = mp.click_user_button()
|
||||||
user_settings_window = user_card.click_settings_button()
|
mp.wait_for_timeout(300)
|
||||||
|
|
||||||
user_settings_window.check_window_visibility()
|
user_card.click_close_button()
|
||||||
user_settings_window.check_content()
|
user_card.check_card_is_closed()
|
||||||
|
|
||||||
def test_change_password_window_content(self, browser: Page) -> None:
|
def test_change_password_window_content(self, browser: Page) -> None:
|
||||||
"""Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя.
|
"""Проверяет наличие и корректность элементов окна изменения пароля текущего пользователя.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue