From 6e5eeaf4d675f21475add895ea116676c04dc160 Mon Sep 17 00:00:00 2001 From: nsubbot Date: Tue, 23 Dec 2025 10:05:14 +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=B0?= =?UTF-8?q?=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=20=D0=A1=D0=B5?= =?UTF-8?q?=D0=B0=D0=BD=D1=81=D1=8B/=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/base_component.py | 20 +++++ locators/settings_form_locators.py | 4 + pages/session_settings_tab.py | 90 ++++++------------- .../scrolling/test_session_settings.py | 2 +- .../e2e/sessions/test_session_settings_tab.py | 5 +- 5 files changed, 56 insertions(+), 65 deletions(-) diff --git a/components/base_component.py b/components/base_component.py index d106690..b098e08 100644 --- a/components/base_component.py +++ b/components/base_component.py @@ -28,6 +28,26 @@ class BaseComponent: self.page = page # Действия: + def get_input_fields_locators(self, container_locator: Locator, css_class: str) -> dict: + """Получение объекта словаря имя поля ввода : Locator. + + Args: + locator: объект Locator. + css_class: css класс для уточнения положения искомого объекта в DOM. + Returns: + dict: словарь имя поля ввода : Locator. + """ + + fields_locators = {} + + elements = container_locator.locator(f"div.flex.{css_class} div.v-text-field__slot > input").all() + + for el in elements: + val = el.input_value().strip() + if val: + fields_locators[val] = el.locator("../ancestor::div[6]") + return fields_locators + def get_locator(self, locator: str | Locator) -> Locator: """Получение объекта Locator из строки или существующего Locator. diff --git a/locators/settings_form_locators.py b/locators/settings_form_locators.py index 7b7356d..f7562db 100644 --- a/locators/settings_form_locators.py +++ b/locators/settings_form_locators.py @@ -18,6 +18,10 @@ class SettingsFormLocators: SETTTINGS_FORM_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]" SETTTINGS_FORM_TITLE = f"{SETTTINGS_FORM_SCROLL_CONTAINER}//div[contains(@class, 'v-toolbar__title')]" + SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/following-sibling::div" + SETTINGS_FORM_INPUT_FIELD = "div:nth-child(2) div.v-text-field__slot > input" + SETTINGS_FORM_INPUT_VALUE_SUFFIX = "div:nth-child(2) div.v-text-field__slot div.v-text-field__suffix" + DROPDOWN_LIST = "//div[contains(@class, 'menuable__content__active')]" SELECTED_VALUES = "//div[@class='v-select__selections']" CLEAR_SELECTION_BUTTON = "div.v-input__icon--clear" diff --git a/pages/session_settings_tab.py b/pages/session_settings_tab.py index 93e8dcf..bf0c731 100644 --- a/pages/session_settings_tab.py +++ b/pages/session_settings_tab.py @@ -7,7 +7,6 @@ import re from playwright.sync_api import Page from locators.settings_form_locators import SettingsFormLocators from elements.text_input_element import TextInput -from elements.text_element import Text from components.toolbar_component import ToolbarComponent from components.alert_component import AlertComponent from components_derived.settings_form_component import SettingsFormComponent @@ -45,58 +44,32 @@ class SessionSettingsTab(BasePage): self.settings_form.add_toolbar_title("Время жизни сеанса") - admin_setting_label = Text(page, - page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_text('Администратор'), - "admin_setting_label") - self.settings_form.add_content_item("admin_setting_label", admin_setting_label) + css_class = "xs4" + container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER) + self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator, css_class) - loc_admin = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_label('Администратор') + loc = self.input_fields_locators.get("Администратор") + loc_admin = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD) admin_setting = TextInput(page, loc_admin, "admin_setting") self.settings_form.add_content_item("admin_setting", admin_setting) - operator_setting_label = Text(page, - page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_text('Оператор'), - "operator_setting_label") - self.settings_form.add_content_item("operator_setting_label", operator_setting_label) - - loc_oper = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_label('Оператор') + loc = self.input_fields_locators.get("Оператор") + loc_oper = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD) operator_setting = TextInput(page, loc_oper, "operator_setting") self.settings_form.add_content_item("operator_setting", operator_setting) - manager_setting_label = Text(page, - page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_text('Контактное лицо'), - "manager_setting_label") - self.settings_form.add_content_item("manager_setting_label", manager_setting_label) - - loc_manager = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_label('Контактное лицо') + loc = self.input_fields_locators.get("Контактное лицо") + loc_manager = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD) manager_setting = TextInput(page, loc_manager, "manager_setting") self.settings_form.add_content_item("manager_setting", manager_setting) - inform_secur_user_setting_label = Text(page, - page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_text('Специалист информационной безопасности'), - "inform_secur_user_setting_label") - self.settings_form.add_content_item("inform_secur_user_setting_label", inform_secur_user_setting_label) - - loc_inform_secur_user = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_label('Специалист информационной безопасности') + loc = self.input_fields_locators.get("Специалист информационной безопасности") + loc_inform_secur_user = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD) inform_secur_user_setting = TextInput(page, loc_inform_secur_user, "inform_secur_user_setting") self.settings_form.add_content_item("inform_secur_user_setting", inform_secur_user_setting) - collector_setting_label = Text(page, - page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_text('$collector'), - "collector_setting_label") - self.settings_form.add_content_item("collector_setting_label", collector_setting_label) - - loc_collector = page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ - get_by_label('$collector') + loc = self.input_fields_locators.get('$collector') + loc_collector = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD) collector_setting = TextInput(page, loc_collector, "collector_setting") self.settings_form.add_content_item("collector_setting", collector_setting) @@ -155,27 +128,6 @@ 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: """Возвращает текущее значение требуемого поля настроек. @@ -248,17 +200,31 @@ class SessionSettingsTab(BasePage): def check_content(self): """Проверяет наличие и корректность всех элементов формы.""" + expected_input_field_names = ["Администратор", "Оператор", + "Специалист информационной безопасности", + "Контактное лицо", "$collector"] + self.should_be_toolbar() self.should_be_toolbar_buttons() self.should_be_form_toolbar() + actual_input_field_names = self.input_fields_locators.keys() + assert set(actual_input_field_names) == set(expected_input_field_names), \ + f"Misscomparison input field names: Expected {expected_input_field_names}, Actual {actual_input_field_names}" + for name in self.settings_form.content_items.keys(): item = self.settings_form.get_content_item(name) item.check_visibility( f"Session settings input form item with name '{name}' is missing" ) + for name in actual_input_field_names: + value_suffix_loc = self.input_fields_locators.get(name).\ + locator(SettingsFormLocators.SETTINGS_FORM_INPUT_VALUE_SUFFIX) + value_suffix = value_suffix_loc.text_content().strip() + assert value_suffix == "минут", f"Incorrect value suffix for field {name}" + def check_vertical_scrolling(self) -> bool: """Проверка возможности вертикального скроллинга формы настроек времени жизни сессии. """ @@ -327,4 +293,4 @@ class SessionSettingsTab(BasePage): field_value = self.settings_form.get_content_item("collector_setting").get_input_value().strip() else: assert False, f"Got unsupported field name {key}" - assert field_value == str(value), f"{key} field value {field_value} is not equal value {value} from data base" + assert field_value==str(value),f"{key} field value {field_value} is not equal value {value} from data base" diff --git a/tests/components/scrolling/test_session_settings.py b/tests/components/scrolling/test_session_settings.py index 7a747d9..da34eee 100644 --- a/tests/components/scrolling/test_session_settings.py +++ b/tests/components/scrolling/test_session_settings.py @@ -51,7 +51,7 @@ class TestSessionSettingsForm: 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.get_field_by_name('$collector').check_visibility("Text '$collector' should be visible") sst.wait_for_timeout(3000) sst.scroll_up() diff --git a/tests/e2e/sessions/test_session_settings_tab.py b/tests/e2e/sessions/test_session_settings_tab.py index 6fc024d..d9569d0 100644 --- a/tests/e2e/sessions/test_session_settings_tab.py +++ b/tests/e2e/sessions/test_session_settings_tab.py @@ -48,7 +48,7 @@ class TestSessionSettingsTab: main_page.click_subpanel_item("Сеансы") main_page.click_subpanel_item("Настройки", parent="Сеансы") - # @pytest.mark.develop + # @pytest.mark.develop def test_session_settings_tab_content(self, browser: Page) -> None: """Тест содержимого вкладки 'Сеансы/Настройки'. @@ -100,7 +100,8 @@ class TestSessionSettingsTab: # @pytest.mark.develop def test_edit_session_setting_by_arrow(self, browser: Page) -> None: - """Тест проверки возможности увеличения/уменьшения значения выбранного поля формы с помощью стрелочек Вверх/Вниз. + """Тест проверки возможности увеличения/уменьшения значения выбранного поля формы с помощью + стрелочек Вверх/Вниз. """ field_name = 'operator'