diff --git a/components/settings_form_component.py b/components/settings_form_component.py index 79d4684..ed20ced 100644 --- a/components/settings_form_component.py +++ b/components/settings_form_component.py @@ -1,7 +1,7 @@ """Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода и отображения полей настроек,их элементами и проверками.""" -from playwright.sync_api import Page +from playwright.sync_api import Page, Locator from tools.logger import get_logger from locators.settings_form_locators import SettingsFormLocators from elements.button_element import Button @@ -58,21 +58,11 @@ class SettingsFormComponent(BaseComponent): assert False, f"Button with name '{name}' not found" 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: """Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена.""" @@ -89,4 +79,5 @@ class SettingsFormComponent(BaseComponent): 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") diff --git a/components/toolbar_component.py b/components/toolbar_component.py index a9b6186..e7d5a39 100644 --- a/components/toolbar_component.py +++ b/components/toolbar_component.py @@ -31,6 +31,7 @@ class ToolbarComponent(BaseComponent): self.title = title self.buttons = [] + # Действия: def add_title(self, title: str) -> None: """Устанавливает новый заголовок тулбара. @@ -125,6 +126,7 @@ class ToolbarComponent(BaseComponent): return title_text + # Проверки: def is_button_present(self, name: str) -> bool: """Проверяет наличие кнопки. @@ -179,6 +181,16 @@ class ToolbarComponent(BaseComponent): locator = self.get_locator(locator) 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: """Проверяет наличие и видимость кнопки с предварительной прокруткой к элементу. diff --git a/pages/session_settings_tab.py b/pages/session_settings_tab.py index 2d44755..7d6181a 100644 --- a/pages/session_settings_tab.py +++ b/pages/session_settings_tab.py @@ -155,6 +155,27 @@ class SessionSettingsTab(BasePage): assert False, f"Got unsupported field name {field_name}" 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: """Возвращает текущее значение требуемого поля настроек. @@ -207,6 +228,22 @@ class SessionSettingsTab(BasePage): # else: # 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): """Проверяет наличие и корректность всех элементов формы.""" @@ -214,17 +251,24 @@ class SessionSettingsTab(BasePage): self.should_be_toolbar() 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(): item = self.settings_form.get_content_item(name) - print("check item: "+name) item.check_visibility( 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: - """Проверяет наличие тулбара. + """Проверяет наличие тулбара вкладки. Raises: AssertionError: Если тулбар или кнопка редактирования отсутствуют. @@ -253,6 +297,15 @@ class SessionSettingsTab(BasePage): self.toolbar.get_button_by_name("cancel").click() 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: """Проверяет соответствие содержимого полей формы данным из БД. diff --git a/tests/components/run.bat b/tests/components/run.bat index d12aafa..2e8cbd8 100644 --- a/tests/components/run.bat +++ b/tests/components/run.bat @@ -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_json_container.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 \ No newline at end of file diff --git a/tests/components/test_session_settings.py b/tests/components/test_session_settings.py new file mode 100644 index 0000000..7a747d9 --- /dev/null +++ b/tests/components/test_session_settings.py @@ -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)