From 57d8a0466dee6d25f9ac6da8acc71238c17b1bdc Mon Sep 17 00:00:00 2001 From: nsubbot Date: Mon, 13 Apr 2026 09:58:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20'=D0=9D=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8'=20=D0=B2=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=81=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC=D0=B8=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components_derived/selection_bar_component.py | 7 +- pages/backup_settings_tab.py | 1 - pages/ldap_settings_tab.py | 13 ++ pages/session_settings_tab.py | 2 - .../e2e/sessions/test_current_sessions_tab.py | 16 +-- .../e2e/sessions/test_session_settings_tab.py | 14 +- tests/e2e/test_backup_settings_tab.py | 132 ++++++++++++------ tests/e2e/test_certificates_tab.py | 2 +- 8 files changed, 124 insertions(+), 63 deletions(-) diff --git a/components_derived/selection_bar_component.py b/components_derived/selection_bar_component.py index 8c8ae80..eb50036 100644 --- a/components_derived/selection_bar_component.py +++ b/components_derived/selection_bar_component.py @@ -153,7 +153,12 @@ class SelectionBarComponent(BaseComponent): self.selection_bar_locator.click(force=True) # Ждем появления выпадающего списка - self.page.locator(SelectionBarLocators.LIST_ACTIVE).wait_for(state="attached") + if self.page.locator(SelectionBarLocators.LIST_ACTIVE).count() > 1: + self.page.locator(SelectionBarLocators.LIST_ACTIVE).last.wait_for(state="attached") + else: + self.page.locator(SelectionBarLocators.LIST_ACTIVE).wait_for(state="attached") + + #self.page.locator(SelectionBarLocators.LIST_ACTIVE).wait_for(state="attached") # self.wait_for_timeout(1500) def select_value(self, name: str) -> None: diff --git a/pages/backup_settings_tab.py b/pages/backup_settings_tab.py index a3fbe44..c2d4f81 100644 --- a/pages/backup_settings_tab.py +++ b/pages/backup_settings_tab.py @@ -99,7 +99,6 @@ class BackupSettingsTab(BasePage): dump_selector = self.streaming_data_settings.get_content_item("streaming_data_dump_selector") dump_selector.clear_selections() - def create_inventory_copy(self) -> None: """Создать резервную копию Системы.""" diff --git a/pages/ldap_settings_tab.py b/pages/ldap_settings_tab.py index 767f59d..2bbb091 100644 --- a/pages/ldap_settings_tab.py +++ b/pages/ldap_settings_tab.py @@ -296,6 +296,19 @@ class LDAPAuthSettingsTab(BasePage): if name == "password_hidden_icon": is_hidden_state = item.is_password_hidden() assert is_hidden_state, "Password hidden icon should be in hidden state" + hidden_password = self.get_password_setting_value() + + self.click_password_hidden_icon() + is_hidden_state = item.is_password_hidden() + assert not is_hidden_state, "Password hidden icon should be in viewed state" + viewed_password = self.get_password_setting_value() + + assert len(hidden_password) == len(viewed_password), \ + "The lengths of hidden and viewed passwords should be equal" + + self.click_password_hidden_icon() + is_hidden_state = item.is_password_hidden() + assert is_hidden_state, "Password hidden icon should be in hidden state" def should_be_toolbar(self) -> None: """Проверяет наличие тулбара страницы, наличие и функциональность кнопок тулбара. diff --git a/pages/session_settings_tab.py b/pages/session_settings_tab.py index 516c215..952e496 100644 --- a/pages/session_settings_tab.py +++ b/pages/session_settings_tab.py @@ -168,8 +168,6 @@ class SessionSettingsTab(BasePage): field.input_value(value) # temporararily - self.click_cancel_button() - # self.click_save_button() # alert_type = self.alert.get_alert_type() diff --git a/tests/e2e/sessions/test_current_sessions_tab.py b/tests/e2e/sessions/test_current_sessions_tab.py index 5ebcd05..08977a9 100644 --- a/tests/e2e/sessions/test_current_sessions_tab.py +++ b/tests/e2e/sessions/test_current_sessions_tab.py @@ -220,12 +220,11 @@ class TestCurrentSessionsTab: Проверяет: 1. Создание нового пользователя 2. Вход нового пользователя в систему - 3. Проверка наличия сеанса нового пользователя - 4. Выход нового пользователя из системы (logout) - 5. Вход в систему пользователя admin - 6. Удаление сеанса нового пользователя - 7. Проверка отсутствия сеанса нового пользователя - 8. Удаление пользователя выполняется автоматически фикстурой cleanup_users + 3. Вход в систему пользователя admin + 4. Проверка наличия сеанса нового пользователя + 5. Удаление сеанса нового пользователя + 6. Проверка отсутствия сеанса нового пользователя + 7. Удаление пользователя выполняется автоматически фикстурой cleanup_users """ user_data = {"name": "TestUserForManualDeletion", "role": "Администратор", "password": "qwerty1234567"} @@ -445,9 +444,6 @@ class TestCurrentSessionsTab: # Проверка наличия сеанса в таблице sessions_tab.should_be_session_in_table(new_user_token) - # Выход из системы нового пользователя - new_mp.do_logout() - # Авторизация администратором admin_lp = LoginPage(browser) admin_lp.do_login() @@ -551,6 +547,8 @@ class TestCurrentSessionsTab: print("Ожидание 15 минут для автоматического удаления сеанса...") browser.wait_for_timeout(901000) # 15 минут 1 секунда в миллисекундах + # TO-DO: Должна быть проверка перехода на страницу логина для текущего пользователя, fix 890 + # Авторизация администратором admin_lp = LoginPage(browser) admin_lp.do_login() diff --git a/tests/e2e/sessions/test_session_settings_tab.py b/tests/e2e/sessions/test_session_settings_tab.py index d9569d0..81dacd7 100644 --- a/tests/e2e/sessions/test_session_settings_tab.py +++ b/tests/e2e/sessions/test_session_settings_tab.py @@ -74,7 +74,7 @@ class TestSessionSettingsTab: else: print(f"Error request session setings data from API: {response.status_text}") - #@pytest.mark.develop + # @pytest.mark.develop def test_edit_session_settings(self, browser: Page) -> None: """Тест проверки возможности редактирования выбранных полей формы настройки времени жизни сеансов. @@ -91,12 +91,14 @@ class TestSessionSettingsTab: session_settings_tab.edit_settings(new_settings) - # temporarily - # updated_settings = session_settings_tab.get_settings_values() + 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}" + 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}" + + # temporarily + session_settings_tab.click_cancel_button() # @pytest.mark.develop def test_edit_session_setting_by_arrow(self, browser: Page) -> None: diff --git a/tests/e2e/test_backup_settings_tab.py b/tests/e2e/test_backup_settings_tab.py index fe44038..9cc0b8f 100644 --- a/tests/e2e/test_backup_settings_tab.py +++ b/tests/e2e/test_backup_settings_tab.py @@ -69,7 +69,7 @@ class TestBackupSettingsTab: if response_body: expected_inventory_settings = response_body[0].copy() - + if len(expected_inventory_settings) == 0: # запрос дефолтных значений настройки 'Инвентаризация/Параметры планировщика' default_settings = {} @@ -79,16 +79,16 @@ class TestBackupSettingsTab: if response_body: default_settings = response_body["fields"].copy() - expected_inventory_settings["auto_backup"] = self._get_default_value("auto_backup", + expected_inventory_settings["auto_backup"] = self._get_default_value("auto_backup", default_settings) expected_inventory_settings["backup_limitation"] = self._get_default_value("backup_limitation", default_settings) - + # Проверка соответствия для значений настройки 'Инвентаризация/Параметры планировщика' inventory_scheduler_settings = backup_settings_tab.get_inventory_scheduler_settings_values() inventory_auto_backup = inventory_scheduler_settings.get("auto_backup") inventory_backup_limitation = inventory_scheduler_settings.get("backup_limitation") - + if inventory_auto_backup: expected = expected_inventory_settings["auto_backup"] assert inventory_auto_backup == expected,\ @@ -96,7 +96,7 @@ class TestBackupSettingsTab: is not equal expected {expected} for field 'Время создания резервной копии'" else: assert False, "No value setting for field 'Время создания резервной копии'" - + if inventory_backup_limitation: expected = expected_inventory_settings["backup_limitation"] assert inventory_backup_limitation == expected,\ @@ -113,7 +113,7 @@ class TestBackupSettingsTab: if response_body: expected_sd_settings = response_body[0].copy() - + if len(expected_sd_settings) == 0: # запрос дефолтных значений настройки 'Потоковые данные' default_sd_settings = {} @@ -128,32 +128,32 @@ class TestBackupSettingsTab: "data_limitation_default", default_sd_settings) expected_sd_settings["interval_limitation_default"] = self._get_default_value( "interval_limitation_default", default_sd_settings) - - expected_sd_settings["data_limitation_logs"] = self._get_default_value("data_limitation_logs", + + expected_sd_settings["data_limitation_logs"] = self._get_default_value("data_limitation_logs", default_sd_settings) expected_sd_settings["interval_limitation_logs"] = self._get_default_value( "interval_limitation_logs", default_sd_settings) - expected_sd_settings["data_limitation_metrics"] = self._get_default_value("data_limitation_metrics", + expected_sd_settings["data_limitation_metrics"] = self._get_default_value("data_limitation_metrics", default_sd_settings) expected_sd_settings["interval_limitation_metrics"] = self._get_default_value( "interval_limitation_metrics", default_sd_settings) - expected_sd_settings["data_limitation_syslog"] = self._get_default_value("data_limitation_syslog", + expected_sd_settings["data_limitation_syslog"] = self._get_default_value("data_limitation_syslog", default_sd_settings) expected_sd_settings["interval_limitation_syslog"] = self._get_default_value( "interval_limitation_syslog", default_sd_settings) - expected_sd_settings["data_limitation_tasks"] = self._get_default_value("data_limitation_tasks", + expected_sd_settings["data_limitation_tasks"] = self._get_default_value("data_limitation_tasks", default_sd_settings) expected_sd_settings["interval_limitation_tasks"] = self._get_default_value( "interval_limitation_tasks", default_sd_settings) - + # Проверка соответствия для значений настроек 'Потоковые данные и Параметры планировщика' dates = {"day":"ДЕНЬ", "hour":"ЧАС", "month":"МЕСЯЦ", "year":"ГОД"} streaming_data_scheduler_settings = backup_settings_tab.get_streaming_data_scheduler_settings_values() sd_auto_backup = streaming_data_scheduler_settings.get("auto_backup") streaming_data_settings = backup_settings_tab.get_streaming_data_settings_values() - + if sd_auto_backup: expected = expected_sd_settings["auto_backup"] assert sd_auto_backup == expected,\ @@ -161,8 +161,8 @@ class TestBackupSettingsTab: is not equal expected {expected} for field 'Время создания резервной копии'" else: assert False, "No value setting for field 'Время создания резервной копии' streaming data" - - settings_list = streaming_data_settings.keys() + + settings_list = streaming_data_settings.keys() for setting in settings_list: expected = expected_sd_settings[setting] if dates.get(expected): @@ -306,6 +306,14 @@ class TestBackupSettingsTab: # Инициализация страницы сеансов backup_settings_tab = BackupSettingsTab(browser) + # считываем и запоминаем текущие знчения + orig_inventory_scheduler_settings = backup_settings_tab.get_inventory_scheduler_settings_values() + orig_auto_backup = orig_inventory_scheduler_settings.get("auto_backup") + assert orig_auto_backup, "Сouldn't read the value of 'auto backup' from inventory scheduler settings" + orig_backup_limitation = orig_inventory_scheduler_settings.get("backup_limitation") + assert orig_backup_limitation, "Сouldn't read the value of 'backup limitation' from inventory scheduler settings" + + # устанавливаем новые значения backup_settings_tab.click_edit_button() backup_settings_tab.input_inventory_backup_creation_time("0 0 22 * * 7") @@ -314,6 +322,9 @@ class TestBackupSettingsTab: backup_settings_tab.decrease_inventory_backups_number() backup_settings_tab.increase_inventory_backups_number() + backup_settings_tab.click_save_button() + + # проверка ожидаемых значений inventory_scheduler_settings = backup_settings_tab.get_inventory_scheduler_settings_values() inventory_auto_backup = inventory_scheduler_settings["auto_backup"] inventory_backup_limitation = inventory_scheduler_settings["backup_limitation"] @@ -324,70 +335,86 @@ class TestBackupSettingsTab: f"Actual value '{inventory_backup_limitation}' \ is not equal expected '6' for field 'Количество резервных копий'" - # temporarily until fix 1280 - backup_settings_tab.click_cancel_button() + # восстановление ранее сохраненных значений + backup_settings_tab.click_edit_button() + backup_settings_tab.input_inventory_backup_creation_time(orig_auto_backup) + backup_settings_tab.input_inventory_backups_number(orig_backup_limitation) + backup_settings_tab.click_save_button() - # @pytest.mark.develop + @pytest.mark.develop def test_backup_settings_tab_set_streaming_data_settings(self, browser: Page) -> None: """Тест проверки возможности изменения значения настроек 'Потоковые данные'.""" # Инициализация страницы сеансов backup_settings_tab = BackupSettingsTab(browser) + # считываем и запоминаем текущие знчения + orig_streaming_data_settings = backup_settings_tab.get_streaming_data_settings_values() + for name in orig_streaming_data_settings: + val = orig_streaming_data_settings.get(name) + assert val, f"Сouldn't read the value of '{name}' from inventory scheduler settings" + orig_streaming_data_scheduler_settings = backup_settings_tab.get_streaming_data_scheduler_settings_values() + orig_auto_backup = orig_streaming_data_scheduler_settings.get("auto_backup") + assert orig_auto_backup, "Сouldn't read the value of 'auto backup' from streaming data scheduler settings" + + # устанавливаем новые значения backup_settings_tab.click_edit_button() - backup_settings_tab.input_audit_time_period("3", "месяц") + backup_settings_tab.input_audit_time_period("4", "месяц") backup_settings_tab.increase_audit_time_period() backup_settings_tab.decrease_audit_time_period() - backup_settings_tab.input_logs_time_period("3", "месяц") + backup_settings_tab.input_logs_time_period("4", "месяц") backup_settings_tab.increase_logs_time_period() backup_settings_tab.decrease_logs_time_period() - backup_settings_tab.input_metrics_time_period("3", "месяц") + backup_settings_tab.input_metrics_time_period("4", "месяц") backup_settings_tab.increase_metrics_time_period() backup_settings_tab.decrease_metrics_time_period() - backup_settings_tab.input_syslog_time_period("3", "месяц") + backup_settings_tab.input_syslog_time_period("4", "месяц") backup_settings_tab.increase_syslog_time_period() backup_settings_tab.decrease_syslog_time_period() - backup_settings_tab.input_tasks_time_period("3", "месяц") + backup_settings_tab.input_tasks_time_period("4", "месяц") backup_settings_tab.increase_tasks_time_period() backup_settings_tab.decrease_tasks_time_period() backup_settings_tab.input_streaming_data_backup_creation_time("0 0 22 * * 7") + backup_settings_tab.click_save_button() + + # проверка ожидаемых значений streaming_data_settings = backup_settings_tab.get_streaming_data_settings_values() data_limitation_default = streaming_data_settings["data_limitation_default"] - assert data_limitation_default == "3", \ - f"Actual value '{data_limitation_default}' is not equal expected '3' for category 'Аудит'" + assert data_limitation_default == "4", \ + f"Actual value '{data_limitation_default}' is not equal expected '4' for category 'Аудит'" interval_limitation_default = streaming_data_settings["interval_limitation_default"] - assert interval_limitation_default == "месяц", \ + assert interval_limitation_default == "МЕСЯЦ", \ f"Actual value '{interval_limitation_default}' is not equal expected 'месяц' for category 'Аудит'" data_limitation_logs = streaming_data_settings["data_limitation_logs"] - assert data_limitation_logs == "3", \ - f"Actual value '{data_limitation_logs}' is not equal expected '3' for category 'Логи'" + assert data_limitation_logs == "4", \ + f"Actual value '{data_limitation_logs}' is not equal expected '4' for category 'Логи'" interval_limitation_logs = streaming_data_settings["interval_limitation_logs"] - assert interval_limitation_logs == "месяц", \ + assert interval_limitation_logs == "МЕСЯЦ", \ f"Actual value '{interval_limitation_logs}' is not equal expected 'месяц' for category 'Логи'" data_limitation_metrics = streaming_data_settings["data_limitation_metrics"] - assert data_limitation_metrics == "3", \ - f"Actual value '{data_limitation_metrics}' is not equal expected '3' for category 'Метрики'" + assert data_limitation_metrics == "4", \ + f"Actual value '{data_limitation_metrics}' is not equal expected '4' for category 'Метрики'" interval_limitation_metrics = streaming_data_settings["interval_limitation_metrics"] - assert interval_limitation_metrics == "месяц", \ + assert interval_limitation_metrics == "МЕСЯЦ", \ f"Actual value '{interval_limitation_metrics}' is not equal expected 'месяц' for category 'Метрики'" data_limitation_syslog = streaming_data_settings["data_limitation_syslog"] - assert data_limitation_syslog == "3", \ - f"Actual value '{data_limitation_syslog}' is not equal expected '3' for category 'Системный лог'" + assert data_limitation_syslog == "4", \ + f"Actual value '{data_limitation_syslog}' is not equal expected '4' for category 'Системный лог'" interval_limitation_syslog = streaming_data_settings["interval_limitation_syslog"] - assert interval_limitation_syslog == "месяц", \ + assert interval_limitation_syslog == "МЕСЯЦ", \ f"Actual value '{interval_limitation_syslog}' is not equal expected 'месяц' for category 'Системный лог'" data_limitation_tasks = streaming_data_settings["data_limitation_tasks"] - assert data_limitation_tasks == "3", \ - f"Actual value '{data_limitation_tasks}' is not equal expected '3' for category 'Действия'" + assert data_limitation_tasks == "4", \ + f"Actual value '{data_limitation_tasks}' is not equal expected '4' for category 'Действия'" interval_limitation_tasks = streaming_data_settings["interval_limitation_tasks"] - assert interval_limitation_tasks == "месяц", \ + assert interval_limitation_tasks == "МЕСЯЦ", \ f"Actual value '{interval_limitation_tasks}' is not equal expected 'месяц' for category 'Действия'" streaming_data_scheduler_settings = backup_settings_tab.get_streaming_data_scheduler_settings_values() @@ -396,15 +423,34 @@ class TestBackupSettingsTab: f"Actual value '{streaming_data_auto_backup}' \ is not equal expected '0 0 22 * * 7' for field 'Потоковые данные Время создания резервной копии'" - # temporarily until fix 1280 - backup_settings_tab.click_cancel_button() + # восстановление ранее сохраненных значений + backup_settings_tab.click_edit_button() + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_audit_time_period(orig_streaming_data_settings["data_limitation_default"], + orig_streaming_data_settings["interval_limitation_default"]) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_logs_time_period(orig_streaming_data_settings["data_limitation_logs"], + orig_streaming_data_settings["interval_limitation_logs"]) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_metrics_time_period(orig_streaming_data_settings["data_limitation_metrics"], + orig_streaming_data_settings["interval_limitation_metrics"]) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_syslog_time_period(orig_streaming_data_settings["data_limitation_syslog"], + orig_streaming_data_settings["interval_limitation_syslog"]) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_tasks_time_period(orig_streaming_data_settings["data_limitation_tasks"], + orig_streaming_data_settings["interval_limitation_tasks"]) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.input_streaming_data_backup_creation_time(orig_auto_backup) + backup_settings_tab.wait_for_timeout(1000) + backup_settings_tab.click_save_button() # @pytest.mark.develop @pytest.mark.skip(reason="Временно пока работает неправильно") def test_backup_settings_tab_check_auto_copy_creation(self, browser: Page) -> None: """Тест проверки создания резервных копий в автоматическом режиме на примере блока 'Инвентаризация'.""" - # делать backup один раз в минуту + # делать backup один раз в минуту requested_creation_time = "* */1 * * * *" # Инициализация страницы сеансов @@ -423,10 +469,10 @@ class TestBackupSettingsTab: backup_settings_tab.input_inventory_backup_creation_time(requested_creation_time) backup_settings_tab.click_save_button() - + current_date = datetime.now(timezone.utc) current_ts = current_date.timestamp() - + backup_settings_tab.wait_for_timeout(time_to_wait*60000) backup_settings_tab.click_edit_button() diff --git a/tests/e2e/test_certificates_tab.py b/tests/e2e/test_certificates_tab.py index 183578f..72fcab2 100644 --- a/tests/e2e/test_certificates_tab.py +++ b/tests/e2e/test_certificates_tab.py @@ -61,7 +61,7 @@ class TestCertificatesTab: # Проверка элементов интерфейса certificates_tab.check_content() - # @pytest.mark.develop + # @pytest.mark.develop def test_certificates_tab_check_viewed_certificate(self, browser: Page) -> None: """Проверка соответствия выводимого сертификата информации из базы данных."""