diff --git a/elements/text_input_element.py b/elements/text_input_element.py index 9c37e77..5e83a76 100644 --- a/elements/text_input_element.py +++ b/elements/text_input_element.py @@ -48,6 +48,32 @@ class TextInput(BaseElement): return self.locator.get_attribute("type") + def decrease_value(self) -> None: + """Уменьшение на единицу значения поля настройки с помощью стрелочки вниз.""" + + logger.info(f'Decrease input value for "{self.name}"') + + attr = self.locator.get_attribute("type") + assert attr=="number", "Field type should be number to increase value" + + self.locator.hover() + self.locator.wait_for(timeout=500) + self.locator.press('ArrowDown') + self.locator.wait_for(timeout=500) + + def increase_value(self) -> None: + """Увеличение на единицу значения поля настройки с помощью стрелочки вверх.""" + + logger.info(f'Increase input value for "{self.name}"') + + attr = self.locator.get_attribute("type") + assert attr=="number", "Field type should be number to increase value" + + self.locator.hover() + self.locator.wait_for(timeout=500) + self.locator.press('ArrowUp') + self.locator.wait_for(timeout=500) + def input_value(self, value: str) -> None: """Вводит указанное значение в поле. @@ -78,7 +104,7 @@ class TextInput(BaseElement): logger.info(f'Checking that text input "{self.name}" is empty') expect(self.locator).to_be_empty(), msg - + def check_editable_input(self, msg: str) -> None: """Проверяет, что поле ввода редактируемое. diff --git a/pages/session_settings_tab.py b/pages/session_settings_tab.py index 0408e41..2d44755 100644 --- a/pages/session_settings_tab.py +++ b/pages/session_settings_tab.py @@ -10,6 +10,7 @@ from elements.text_input_element import TextInput from elements.text_element import Text from components.toolbar_component import ToolbarComponent from components.settings_form_component import SettingsFormComponent +from components.alert_component import AlertComponent from pages.base_page import BasePage @@ -99,7 +100,113 @@ class SessionSettingsTab(BasePage): collector_setting = TextInput(page, loc_collector, "collector_setting") self.settings_form.add_content_item("collector_setting", collector_setting) + # Окно сообщения об успешном/неуспешном сохранении настроек + self.alert = AlertComponent(page) + # Действия: + def click_cancel_button(self) -> None: + """Нажатие кнопки 'Отменить' на тулбаре.""" + + self.toolbar.check_button_visibility("cancel") + self.toolbar.get_button_by_name("cancel").click() + + def click_edit_button(self) -> None: + """Нажатие кнопки 'Редактировать' на тулбаре.""" + + self.toolbar.check_button_visibility("edit") + self.toolbar.get_button_by_name("edit").click() + + def click_save_button(self) -> None: + """Нажатие кнопки 'Сохранить' на тулбаре.""" + + self.toolbar.check_button_visibility("save") + self.toolbar.get_button_by_name("save").click() + + def decrease_setting_value(self, field_name: str) -> None: + """Уменьшение на единицу значения поля настройки с помощью стрелочки вниз.""" + + field = self.get_field_by_name(field_name) + field.decrease_value() + + def increase_setting_value(self, field_name: str) -> None: + """Увеличение на единицу значения поля настройки с помощью стрелочки вверх.""" + + field = self.get_field_by_name(field_name) + field.increase_value() + + def get_field_by_name(self, field_name: str) -> TextInput: + """Возвращает элемент поле ввода по его имени. + + Returns: + TextInput: Элемент поле ввода. + """ + + if field_name == "administrator": + field = self.settings_form.get_content_item("admin_setting") + elif field_name == "operator": + field = self.settings_form.get_content_item("operator_setting") + elif field_name == "manager": + field = self.settings_form.get_content_item("manager_setting") + elif field_name == "inform_secur_user": + field = self.settings_form.get_content_item("inform_secur_user_setting") + elif field_name == '$collector': + field = self.settings_form.get_content_item("collector_setting") + else: + assert False, f"Got unsupported field name {field_name}" + return field + + def get_setting_value(self, field_name: str) -> str: + """Возвращает текущее значение требуемого поля настроек. + + Returns: + str : Текущее значение требуемого поля настроек. + """ + + return self.get_field_by_name(field_name).get_input_value().strip() + + def get_settings_values(self) -> dict: + """Возвращает словарь с текущими значениями настроек времени жизни сессии. + + Returns: + dict: Cловарь с текущими значениями настроек времени жизни сессии. + """ + + current_values = {} + + current_values['administrator'] = self.settings_form.get_content_item("admin_setting").\ + get_input_value().strip() + current_values['operator'] = self.settings_form.get_content_item("operator_setting").\ + get_input_value().strip() + current_values['manager'] = self.settings_form.get_content_item("manager_setting").\ + get_input_value().strip() + current_values['inform_secur_user'] = self.settings_form.get_content_item("inform_secur_user_setting").\ + get_input_value().strip() + current_values['$collector'] = self.settings_form.get_content_item("collector_setting").\ + get_input_value().strip() + return current_values + + def edit_settings(self, new_settings: dict) -> None: + """Изменение текущих значений настроек времени жизни сессии. + """ + + self.click_edit_button() + + for key, value in new_settings.items(): + field = self.get_field_by_name(key) + field.input_value(value) + + # temporararily + self.click_cancel_button() + + # self.click_save_button() + + # alert_type = self.alert.get_alert_type() + # if alert_type == "success": + # self.alert.check_alert_presence(' Параметры успешно\n обновлены ') + # self.alert.check_alert_absence(' Параметры успешно\n обновлены ') + # else: + # assert False, f"Got unexpected alert type {alert_type}" + # Проверки: def check_content(self): """Проверяет наличие и корректность всех элементов формы.""" diff --git a/tests/e2e/sessions/test_session_settings_tab.py b/tests/e2e/sessions/test_session_settings_tab.py index 130d816..6fc024d 100644 --- a/tests/e2e/sessions/test_session_settings_tab.py +++ b/tests/e2e/sessions/test_session_settings_tab.py @@ -19,6 +19,10 @@ class TestSessionSettingsTab: Тесты покрывают следующие сценарии: 1. test_session_settings_tab_content: Тест содержимого вкладки 'Сеансы/Настройки' + 2. test_edit_session_settings: Тест проверки возможности редактирования выбранных полей формы + настройки времени жизни сеансов. + 3. test_edit_session_setting_by_arrow: Тест проверки возможности увеличения/уменьшения значения + выбранного поля формы с помощью стрелочек Вверх/Вниз. """ @@ -45,7 +49,7 @@ class TestSessionSettingsTab: main_page.click_subpanel_item("Настройки", parent="Сеансы") # @pytest.mark.develop - def test_sessions_tab_content(self, browser: Page) -> None: + def test_session_settings_tab_content(self, browser: Page) -> None: """Тест содержимого вкладки 'Сеансы/Настройки'. Проверяет: @@ -69,3 +73,71 @@ class TestSessionSettingsTab: session_settings_tab.verify_form_data(session_settings) else: print(f"Error request session setings data from API: {response.status_text}") + + #@pytest.mark.develop + def test_edit_session_settings(self, browser: Page) -> None: + """Тест проверки возможности редактирования выбранных полей формы настройки времени жизни сеансов. + + Проверяет: + 1. Возможность редактирования выбранных полей формы настройки времени жизни сеансов. + """ + new_settings = {'administrator': "50", + 'operator': "20", + 'manager': "20", + "inform_secur_user": "25"} + + # Инициализация страницы сеансов + session_settings_tab = SessionSettingsTab(browser) + + session_settings_tab.edit_settings(new_settings) + + # temporarily + # updated_settings = session_settings_tab.get_settings_values() + + # for key, value in new_settings.items(): + # updated_value = updated_settings.get(key) + # assert updated_value == value, f"{key} updated value {updated_value} is not equal expected value {value}" + + # @pytest.mark.develop + def test_edit_session_setting_by_arrow(self, browser: Page) -> None: + """Тест проверки возможности увеличения/уменьшения значения выбранного поля формы с помощью стрелочек Вверх/Вниз. + """ + + field_name = 'operator' + + # Инициализация страницы сеансов + session_settings_tab = SessionSettingsTab(browser) + + session_settings_tab.click_edit_button() + + start_value = session_settings_tab.get_setting_value(field_name) + expected_value = int(start_value) + + for i in range(5): + session_settings_tab.increase_setting_value(field_name) + + current_value = int(session_settings_tab.get_setting_value(field_name)) + expected_value += 1 + + assert current_value == expected_value, \ + f"Expected value {expected_value} is not equal current value {current_value} for {field_name} setting" + + for j in range(5): + session_settings_tab.decrease_setting_value(field_name) + + current_value = int(session_settings_tab.get_setting_value(field_name)) + expected_value -= 1 + + assert current_value == expected_value, \ + f"Expected value {expected_value} is not equal current value {current_value} for {field_name} setting" + + current_value = int(session_settings_tab.get_setting_value(field_name)) + assert current_value == int(start_value), \ + f"Expected value {start_value} is not equal current value {current_value} for {field_name} setting" + + session_settings_tab.click_cancel_button() + + # to be Done + # def test_edit_session_setting_boundary_values(self, browser: Page) -> None: + # """Тест проверки задания граничных значений выбранного поля формы. + # """