Добавлен тест проверки вертикального скроллинга вкладки Сеансы/Настройки в маленьком окне браузера

sidebar_filter
nsubbot 2025-10-30 15:08:58 +03:00
parent 9d519f43b7
commit adcac1899f
5 changed files with 134 additions and 18 deletions

View File

@ -1,7 +1,7 @@
"""Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода """Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода
и отображения полей настроек,их элементами и проверками.""" и отображения полей настроек,их элементами и проверками."""
from playwright.sync_api import Page from playwright.sync_api import Page, Locator
from tools.logger import get_logger from tools.logger import get_logger
from locators.settings_form_locators import SettingsFormLocators from locators.settings_form_locators import SettingsFormLocators
from elements.button_element import Button from elements.button_element import Button
@ -58,21 +58,11 @@ class SettingsFormComponent(BaseComponent):
assert False, f"Button with name '{name}' not found" assert False, f"Button with name '{name}' not found"
button.click() button.click()
def scroll_form_down(self) -> None:
"""Прокручивает содержимое окна вниз."""
self.scroll_down(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER)
def scroll_form_up(self) -> None:
"""Прокручивает содержимое окна вверх."""
self.scroll_up(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER)
# Проверки: # Проверки:
def check_form_vertical_scrolling(self) -> bool: def check_vertical_scrolling(self, locator: str| Locator) -> bool:
"""Проверяет возможность вертикальной прокрутки окна.""" """Проверяет возможность вертикальной прокрутки формы."""
return self.is_scrollable_vertically(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER) return self.is_scrollable_vertically(locator)
def check_button_visibility(self, name: str) -> None: def check_button_visibility(self, name: str) -> None:
"""Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена.""" """Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена."""
@ -89,4 +79,5 @@ class SettingsFormComponent(BaseComponent):
AssertionError: Если тулбар или кнопка редактирования отсутствуют. AssertionError: Если тулбар или кнопка редактирования отсутствуют.
""" """
self.toolbar.check_toolbar_presence("Toolbar is missing") self.toolbar.check_toolbar_presence_by_locator_and_title(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER,
"Session settings form toolbar is missing")

View File

@ -31,6 +31,7 @@ class ToolbarComponent(BaseComponent):
self.title = title self.title = title
self.buttons = [] self.buttons = []
# Действия:
def add_title(self, title: str) -> None: def add_title(self, title: str) -> None:
"""Устанавливает новый заголовок тулбара. """Устанавливает новый заголовок тулбара.
@ -125,6 +126,7 @@ class ToolbarComponent(BaseComponent):
return title_text return title_text
# Проверки:
def is_button_present(self, name: str) -> bool: def is_button_present(self, name: str) -> bool:
"""Проверяет наличие кнопки. """Проверяет наличие кнопки.
@ -179,6 +181,16 @@ class ToolbarComponent(BaseComponent):
locator = self.get_locator(locator) locator = self.get_locator(locator)
expect(locator).to_be_visible(), message expect(locator).to_be_visible(), message
def check_toolbar_presence_by_locator_and_title(self, locator: str|Locator, message: str) -> None:
"""Проверяет видимость тулбара.
Args:
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(locator).filter(has_text=self.title)
expect(locator).to_be_visible(), message
def check_button_visibility(self, name: str) -> None: def check_button_visibility(self, name: str) -> None:
"""Проверяет наличие и видимость кнопки с предварительной прокруткой к элементу. """Проверяет наличие и видимость кнопки с предварительной прокруткой к элементу.

View File

@ -155,6 +155,27 @@ class SessionSettingsTab(BasePage):
assert False, f"Got unsupported field name {field_name}" assert False, f"Got unsupported field name {field_name}"
return field return field
def get_label_by_name(self, label_name: str) -> Text:
"""Возвращает элемент название поля ввода по его имени.
Returns:
Text: Элемент название поле ввода.
"""
if label_name == "administrator":
label = self.settings_form.get_content_item("admin_setting_label")
elif label_name == "operator":
label = self.settings_form.get_content_item("operator_setting_label")
elif label_name == "manager":
label = self.settings_form.get_content_item("manager_setting_label")
elif label_name == "inform_secur_user":
label = self.settings_form.get_content_item("inform_secur_user_setting_label")
elif label_name == '$collector':
label = self.settings_form.get_content_item("collector_setting_label")
else:
assert False, f"Got unsupported label name {label_name}"
return label
def get_setting_value(self, field_name: str) -> str: def get_setting_value(self, field_name: str) -> str:
"""Возвращает текущее значение требуемого поля настроек. """Возвращает текущее значение требуемого поля настроек.
@ -207,6 +228,22 @@ class SessionSettingsTab(BasePage):
# else: # else:
# assert False, f"Got unexpected alert type {alert_type}" # assert False, f"Got unexpected alert type {alert_type}"
def scroll_down(self) -> None:
"""Скроллинг вниз формы настроек времени жизни сессии.
"""
locator = self.page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).filter(
has_text="Время жизни сеанса")
self.settings_form.scroll_down(locator)
def scroll_up(self) -> None:
"""Скроллинг вверх формы настроек времени жизни сессии.
"""
locator = self.page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).filter(
has_text="Время жизни сеанса")
self.settings_form.scroll_up(locator)
# Проверки: # Проверки:
def check_content(self): def check_content(self):
"""Проверяет наличие и корректность всех элементов формы.""" """Проверяет наличие и корректность всех элементов формы."""
@ -214,17 +251,24 @@ class SessionSettingsTab(BasePage):
self.should_be_toolbar() self.should_be_toolbar()
self.should_be_toolbar_buttons() self.should_be_toolbar_buttons()
self.settings_form.should_be_toolbar() self.should_be_form_toolbar()
for name in self.settings_form.content_items.keys(): for name in self.settings_form.content_items.keys():
item = self.settings_form.get_content_item(name) item = self.settings_form.get_content_item(name)
print("check item: "+name)
item.check_visibility( item.check_visibility(
f"Session settings input form item with name '{name}' is missing" f"Session settings input form item with name '{name}' is missing"
) )
def check_vertical_scrolling(self) -> bool:
"""Проверка возможности вертикального скроллинга формы настроек времени жизни сессии.
"""
locator = self.page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).filter(
has_text="Время жизни сеанса")
return self.settings_form.check_vertical_scrolling(locator)
def should_be_toolbar(self) -> None: def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара. """Проверяет наличие тулбара вкладки.
Raises: Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют. AssertionError: Если тулбар или кнопка редактирования отсутствуют.
@ -253,6 +297,15 @@ class SessionSettingsTab(BasePage):
self.toolbar.get_button_by_name("cancel").click() self.toolbar.get_button_by_name("cancel").click()
self.toolbar.check_button_visibility("edit") self.toolbar.check_button_visibility("edit")
def should_be_form_toolbar(self) -> None:
"""Проверяет наличие тулбара формы редактирования настроек.
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.settings_form.should_be_toolbar()
def verify_form_data(self, session_settings: dict) -> None: def verify_form_data(self, session_settings: dict) -> None:
"""Проверяет соответствие содержимого полей формы данным из БД. """Проверяет соответствие содержимого полей формы данным из БД.

View File

@ -2,3 +2,4 @@ pytest -s -v --s="{'width': 300, 'height': 420}" test_navigation_panel.py
pytest -s -v --s="{'width': 300, 'height': 420}" test_services_table.py pytest -s -v --s="{'width': 300, 'height': 420}" test_services_table.py
pytest -s -v --s="{'width': 300, 'height': 420}" test_json_container.py pytest -s -v --s="{'width': 300, 'height': 420}" test_json_container.py
pytest -s -v --s="{'width': 300, 'height': 420}" test_user_modal_window.py pytest -s -v --s="{'width': 300, 'height': 420}" test_user_modal_window.py
pytest -s -v --s="{'width': 800, 'height': 200}" test_session_settings.py

View File

@ -0,0 +1,59 @@
"""Модуль тестов вкладки 'Сеансы/Настройки'.
Содержит тесты для проверки функциональности и прокрутки
вкладки 'Сеансы/Настройки'.
"""
import pytest
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage
from pages.session_settings_tab import SessionSettingsTab
class TestSessionSettingsForm:
"""Класс тестов для проверки таблицы статусов сервисов."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Настраивает тестовое окружение перед каждым тестом.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
mp = MainPage(browser)
mp.should_be_navigation_panel()
mp.click_main_navigation_panel_item("Настройки")
mp.click_subpanel_item("Обслуживание и диагностика")
mp.click_subpanel_item("Сеансы")
mp.click_subpanel_item("Настройки", parent="Сеансы")
def test_scrolling(self, browser: Page) -> None:
"""Проверяет прокрутку таблицы статусов сервисов.
Args:
browser: Экземпляр страницы Playwright.
Steps:
1. Проверяет возможность вертикальной прокрутки
2. Прокручивает вниз и проверяет видимость последней строки
3. Прокручивает вверх и проверяет видимость тулбара формы редактирования настроек
"""
# Инициализация страницы сеансов
sst = SessionSettingsTab(browser)
# Проверка вертикального скроллинга
is_scrollable_vertically = sst.check_vertical_scrolling()
assert is_scrollable_vertically, "Should be vertical scrolling"
sst.scroll_down()
sst.get_label_by_name('$collector').check_visibility("Text '$collector' should be visible")
sst.wait_for_timeout(3000)
sst.scroll_up()
sst.should_be_form_toolbar()
sst.wait_for_timeout(2000)