From 6d36491d792b974b82d6020fe6b527687ae378ba Mon Sep 17 00:00:00 2001 From: nsubbot Date: Tue, 17 Feb 2026 14:28:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F/=D1=81?= =?UTF-8?q?=D0=B6=D0=B0=D1=82=D0=B8=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/expand_button_component.py | 72 --------------------------- components/navbar_component.py | 53 ++++++++++++++++++++ locators/navigation_panel_locators.py | 3 ++ pages/main_page.py | 20 ++++++++ pages/service_status_tab.py | 45 ++--------------- tests/e2e/test_service_status_tab.py | 42 ++++++++++------ 6 files changed, 109 insertions(+), 126 deletions(-) delete mode 100644 components/expand_button_component.py diff --git a/components/expand_button_component.py b/components/expand_button_component.py deleted file mode 100644 index 9772aba..0000000 --- a/components/expand_button_component.py +++ /dev/null @@ -1,72 +0,0 @@ -"""Модуль expand_button_component содержит класс для работы с кнопкой расширения/уменьшения рабочей области вкладки -на странице.""" - -from playwright.sync_api import Page -from tools.logger import get_logger -from elements.button_element import Button -from components.base_component import BaseComponent - -logger = get_logger("EXPAND_BUTTON") - - -class ExpandButton(BaseComponent): - """Класс для работы с кнопкой расширения/сжатия рабочей области вкладки на странице. - - """ - def __init__(self, page: Page): - """Инициализирует компонент. - - Args: - page: Экземпляр страницы Playwright. - """ - - super().__init__(page) - - self.expand_work_area_button_locator = page.get_by_role("button").filter(has_text="navigate_") - self.expand_work_area_button = Button(page, - self.expand_work_area_button_locator, - "expand_work_area_button") - - # Действия: - def expand(self) -> None: - """Нажатие кнопки для расширения рабочей области вкладки""" - - can_do_expand = self.is_in_expand_state() - - if can_do_expand: - self.expand_work_area_button.click() - else: - assert False, "Work area already expanded" - - def reduce(self) -> None: - """Нажатие кнопки для сжатия рабочей области вкладки""" - - can_do_expand = self.is_in_expand_state() - - if can_do_expand: - assert False, "Work area already reduced" - else: - self.expand_work_area_button.click() - - # Проверки: - def is_in_expand_state(self) -> bool: - """Проверяет состояние кнопки, способность ее увеличить размер рабочей области вкладки""" - - button_state = self.expand_work_area_button_locator.text_content() - if button_state.find("before") != -1: - return True - elif button_state.find("next") != -1: - return False - else: - assert False, f"Got unexpected button state {button_state}" - - def should_be_button(self) -> None: - """Проверяет наличие кнопки расширения/сжатия рабочей области вкладки. - - Raises: - AssertionError: Если кнопка отсутствует. - """ - - self.expand_work_area_button.check_visibility( - "Expand work area button is missing on page" - ) diff --git a/components/navbar_component.py b/components/navbar_component.py index 9a8f99a..989a3bc 100644 --- a/components/navbar_component.py +++ b/components/navbar_component.py @@ -3,6 +3,7 @@ from playwright.sync_api import Page, Locator from tools.logger import get_logger from locators.navigation_panel_locators import NavigationPanelLocators +from elements.button_element import Button from components.base_component import BaseComponent logger = get_logger("NAVIGATION_PANEL") @@ -20,6 +21,14 @@ class NavigationPanelComponent(BaseComponent): super().__init__(page) + # кнопки расширения/сжатия рабочей области вкладки на странице + self.expand_workarea_button = Button(page, + page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA), + "expand_workarea_button") + self.reduce_workarea_button = Button(page, + page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA), + "reduce_workarea_button") + # Действия: def click_item(self, locator: str | Locator, item_name: str) -> None: """Кликает по элементу с указанным текстом. @@ -224,6 +233,22 @@ class NavigationPanelComponent(BaseComponent): root_locator = self.get_locator(node_root_locator) traverse_tree(self.page, root_locator, level=level, debug=debug) + def expand_workarea(self) -> None: + """Нажатие кнопки для расширения рабочей области страницы""" + + if self.page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA).count() > 0: + self.expand_workarea_button.click() + else: + assert False, "Workarea already expanded" + + def reduce_workarea(self) -> None: + """Нажатие кнопки для сжатия рабочей области страницы""" + + if self.page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA).count() > 0: + self.reduce_workarea_button.click() + else: + assert False, "Workarea already reduced" + # Проверки: def check_item_visibility(self, locator: str | Locator, item_name: str) -> None: """Проверяет видимость элемента с указанным текстом. @@ -268,3 +293,31 @@ class NavigationPanelComponent(BaseComponent): return False return element_locator.is_visible() + + def should_be_expand_workarea_button(self) -> None: + """Проверяет наличие кнопки расширения рабочей области страницы. + + Raises: + AssertionError: Если кнопка отсутствует. + """ + + if self.page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA).count() > 0: + self.expand_workarea_button.check_visibility( + "Expand workarea button is missing on page" + ) + else: + assert False, "Expand workarea button is missing on page" + + def should_be_reduce_workarea_button(self) -> None: + """Проверяет наличие кнопки сжатия рабочей области страницы. + + Raises: + AssertionError: Если кнопка отсутствует. + """ + + if self.page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA).count() > 0: + self.reduce_workarea_button.check_visibility( + "Rduce workarea button is missing on page" + ) + else: + assert False, "Reduce workarea button is missing on page" diff --git a/locators/navigation_panel_locators.py b/locators/navigation_panel_locators.py index f0d2ffe..6bf67c3 100644 --- a/locators/navigation_panel_locators.py +++ b/locators/navigation_panel_locators.py @@ -29,3 +29,6 @@ class NavigationPanelLocators: NODE_ROOT = "//div[contains(@class,'v-treeview-node__root')]" NODE_CHILDREN = "//div[contains(@class,'v-treeview-node__children')]" TOGGLE_BUTTON = "//i[contains(@class,'v-treeview-node__toggle')]" + + BUTTON_EXPAND_WORKAREA = "//button[@data-testid='BASELINE__btn__leftBarMini']" + BUTTON_REDUCE_WORKAREA = "//button[@data-testid='BASELINE__btn__!leftBarMini']" diff --git a/pages/main_page.py b/pages/main_page.py index 4a79b3f..c510328 100644 --- a/pages/main_page.py +++ b/pages/main_page.py @@ -103,6 +103,16 @@ class MainPage(BasePage): node_locator, item_name, parent ) + def click_expand_workarea_button(self) -> None: + """Выполняеи нажатие кнопки расширения рабочей области страницы""" + + self.navigation_panel.expand_workarea() + + def click_reduce_workarea_button(self) -> None: + """Выполняеи нажатие кнопки сжатия рабочей области страницы""" + + self.navigation_panel.reduce_workarea() + def click_user_button(self) -> UserCard: """Выполняет нажатие кнопки пользователя.""" @@ -233,3 +243,13 @@ class MainPage(BasePage): NavigationPanelLocators.PANEL_MAIN, "Navigation panel is missing" ) + + def should_be_expand_workarea_button(self) -> None: + """Проверяет наличие кнопки расширения рабочей области страницы.""" + + self.navigation_panel.should_be_expand_workarea_button() + + def should_be_reduce_workarea_button(self) -> None: + """Проверяет наличие кнопки сжатия рабочей области страницы.""" + + self.navigation_panel.should_be_reduce_workarea_button() diff --git a/pages/service_status_tab.py b/pages/service_status_tab.py index d044bd2..a424d81 100644 --- a/pages/service_status_tab.py +++ b/pages/service_status_tab.py @@ -9,7 +9,6 @@ from playwright.sync_api import Page, Locator, expect from elements.text_element import Text from elements.button_element import Button from components.table_component import TableComponent -from components.expand_button_component import ExpandButton from pages.base_page import BasePage @@ -41,7 +40,6 @@ class ServiceStatusTab(BasePage): self.update_button_locator, "update_button") - self.expand_work_area_button = ExpandButton(page) self.services_table = TableComponent(page) # Действия: @@ -128,35 +126,11 @@ class ServiceStatusTab(BasePage): return self.services_table.get_rows_count(self.table_locator) - def expand_tab(self) -> None: - """Расширяет рабочую область складки.""" + def get_workarea_widht(self) -> float: + """Возвращает текущую ширину рабочей области вкладки.""" - iframe_container_bounding_box = self.iframe_container_locator.\ - evaluate("el => el.getBoundingClientRect()") - widht_before = iframe_container_bounding_box["width"] - - self.expand_work_area_button.expand() - - iframe_container_bounding_box = self.iframe_container_locator.\ - evaluate("el => el.getBoundingClientRect()") - widht_after = iframe_container_bounding_box["width"] - - assert widht_before < widht_after,"Services statuses tab should be expanded" - - def reduce_tab(self) -> None: - """Сжимает рабочую область складки.""" - - iframe_container_bounding_box = self.iframe_container_locator.\ - evaluate("el => el.getBoundingClientRect()") - widht_before = iframe_container_bounding_box["width"] - - self.expand_work_area_button.reduce() - - iframe_container_bounding_box = self.iframe_container_locator.\ - evaluate("el => el.getBoundingClientRect()") - widht_after = iframe_container_bounding_box["width"] - - assert widht_before > widht_after,"Services statuses tab should be reduced" + iframe_container_bounding_box = self.iframe_container_locator.evaluate("el => el.getBoundingClientRect()") + return iframe_container_bounding_box["width"] def scroll_services_tab_up(self) -> None: """Прокручивает содержимое вкладки вверх.""" @@ -278,7 +252,7 @@ class ServiceStatusTab(BasePage): AssertionError: Если строка не выделена. """ - offsets_scales = self.get_offsets_scales() + # offsets_scales = self.get_offsets_scales() self.services_table.check_mui_table_row_highlighting( self.table_locator, @@ -307,15 +281,6 @@ class ServiceStatusTab(BasePage): "Service statuses table is missing" ) - def should_be_expand_work_area_button(self) -> None: - """Проверяет наличие кнопки расширения/сжатия рабочей области вкладки. - - Raises: - AssertionError: Если кнопка отсутствует. - """ - - self.expand_work_area_button.should_be_button() - def should_be_update_button(self) -> None: """Проверяет наличие кнопки 'Обновить'. diff --git a/tests/e2e/test_service_status_tab.py b/tests/e2e/test_service_status_tab.py index 8268a69..30e5f8f 100644 --- a/tests/e2e/test_service_status_tab.py +++ b/tests/e2e/test_service_status_tab.py @@ -66,9 +66,6 @@ class TestServiceStatusTab: # Проверка наличия кнопки 'Обновить' sst.should_be_update_button() - # Проверка наличия кнопки расширения/сжатия рабочей области вкладки - sst.should_be_expand_work_area_button() - # Проверка наличия таблицы статусов сервисов sst.should_be_services_table() @@ -99,7 +96,7 @@ class TestServiceStatusTab: sst.check_services_table_row_highlighting(int(rows_count / 2)) sst.check_services_table_row_highlighting(rows_count - 1) - # @pytest.mark.develop + @pytest.mark.develop def test_service_status_tab_resize(self, browser: Page): """Проверяет возможность расширения/сжатия рабочей области вкладки. @@ -107,28 +104,45 @@ class TestServiceStatusTab: browser: Экземпляр страницы Playwright. """ + mp = MainPage(browser) + sst = ServiceStatusTab(browser) # Проверка наличия таблицы статусов сервисов sst.should_be_services_table() - # Проверка наличия кнопки расширения/сжатия рабочей области вкладки - sst.should_be_expand_work_area_button() + # Получение количества строк в таблице + rows_count_before = sst.get_rows_count() + + # Проверка наличия кнопки расширения рабочей области вкладки + mp.should_be_expand_workarea_button() # Проверка возможности расширения рабочей области вкладки - sst.expand_tab() + widht_before = sst.get_workarea_widht() + + mp.click_expand_workarea_button() + browser.wait_for_timeout(200) + + widht_after_expand = sst.get_workarea_widht() + assert widht_before < widht_after_expand,"Services statuses tab should be expanded" # Получение количества строк в таблице - rows_count = sst.get_rows_count() - - # Проверка выделения строк - sst.check_services_table_row_highlighting(rows_count - 1) + rows_count_after_expand = sst.get_rows_count() + assert rows_count_before == rows_count_after_expand, "Bad workarea expand action" # Проверка возможности сжатия рабочей области вкладки - sst.reduce_tab() + mp.should_be_reduce_workarea_button() - # Проверка выделения строк - sst.check_services_table_row_highlighting(0) + mp.click_reduce_workarea_button() + browser.wait_for_timeout(200) + + widht_after_reduce = sst.get_workarea_widht() + + assert widht_after_expand > widht_after_reduce,"Services statuses tab should be reduced" + + # Получение количества строк в таблице + rows_count_after_reduce = sst.get_rows_count() + assert rows_count_after_reduce == rows_count_after_expand, "Bad workarea reduce action" # @pytest.mark.develop def test_service_status_tab_reload(self, browser: Page):