# NavigationPanelComponent - Документация тестов eNODE-Мониторинг

Skip to content

# NavigationPanelComponent

Модуль компонента панели навигации. Содержит класс для работы с элементами навигации.

## `NavigationPanelComponent`

Bases: `BaseComponent`

Компонент панели навигации. Предоставляет методы для взаимодействия с ней.

Source code in `components\navbar_component.py`

    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96

    class NavigationPanelComponent(BaseComponent):
        """Компонент панели навигации. Предоставляет методы для взаимодействия с ней."""

        def __init__(self, page: Page):
            """Инициализирует компонент панели навигации.

            Args:
                page: Экземпляр страницы Playwright.
            """

            super().__init__(page)

        # Действия:
        def get_item_names(self, locator: str | Locator) -> list[str]:
            """Возвращает тексты всех элементов по указанному локатору.

            Args:
                locator: Локатор элементов или строка с CSS/XPath.

            Returns:
                Список текстов элементов.
            """

            loc = self.get_locator(locator)
            return loc.all_inner_texts()

        def click_item(self, locator: str | Locator, item_name: str) -> None:
            """Кликает по элементу с указанным текстом.

            Args:
                locator: Локатор элемента или строка с CSS/XPath.
                item_name: Текст элемента для клика.
            """

            loc = self.get_locator(locator)
            loc.get_by_text(item_name).click()

        def click_sub_item(self, locator: str | Locator, sublevel_number: int, item_name: str) -> None:
            """Кликает по вложенному элементу с указанным текстом.

            Args:
                locator: Локатор родительского элемента.
                sublevel_number: Уровень вложенности (1 или 2).
                item_name: Текст элемента для клика.

            Raises:
                ValueError: Если уровень вложенности не 1 или 2.
            """

            root_locator = self.get_locator(NavigationPanelLocators.NODE_ROOT)
            children_locator = self.get_locator(NavigationPanelLocators.NODE_CHILDREN)

            loc = self.get_locator(locator)

            if sublevel_number == 1:
                loc.locator(root_locator).get_by_text(item_name).click()
            elif sublevel_number == 2:
                loc.locator(children_locator).locator(root_locator).get_by_text(item_name).click()
            else:
                raise ValueError("the navigation panel has two levels of nesting only")

        # Проверки:
        def check_item_visibility(self, locator: str | Locator, item_name: str) -> None:
            """Проверяет видимость элемента с указанным текстом.

            Args:
                locator: Локатор элемента или строка с CSS/XPath.
                item_name: Текст элемента для проверки.

            Note:
                Временная обработка для элементов с текстом 'Шаблоны'.
            """

            msg = f"Navigation panel item '{item_name}' is not visible"

            ## временно: в навигационной панели есть две панели с именем Шаблоны
            ## для их различия добавлены индексы Шаблоны_1 для Настройки/Шаблоны
            ## Шаблоны_2 для Настройки/ZTP/Шаблоны
            loc = self.get_locator(locator)
            if item_name == "Шаблоны_1":
                loc = loc.get_by_text("Шаблоны").first
            elif item_name == "Шаблоны_2":
                loc = loc.get_by_text("Шаблоны").nth(1)
            else:
                loc = loc.get_by_text(item_name)
            self.check_presence(loc, msg)

### `__init__(page)`

Инициализирует компонент панели навигации.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`page` | `Page` | Экземпляр страницы Playwright. | required

Source code in `components\navbar_component.py`

    14
    15
    16
    17
    18
    19
    20
    21

    def __init__(self, page: Page):
        """Инициализирует компонент панели навигации.

        Args:
            page: Экземпляр страницы Playwright.
        """

        super().__init__(page)

### `check_item_visibility(locator, item_name)`

Проверяет видимость элемента с указанным текстом.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор элемента или строка с CSS/XPath. | required
`item_name` | `str` | Текст элемента для проверки. | required

Note

Временная обработка для элементов с текстом 'Шаблоны'.

Source code in `components\navbar_component.py`

    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96

    def check_item_visibility(self, locator: str | Locator, item_name: str) -> None:
        """Проверяет видимость элемента с указанным текстом.

        Args:
            locator: Локатор элемента или строка с CSS/XPath.
            item_name: Текст элемента для проверки.

        Note:
            Временная обработка для элементов с текстом 'Шаблоны'.
        """

        msg = f"Navigation panel item '{item_name}' is not visible"

        ## временно: в навигационной панели есть две панели с именем Шаблоны
        ## для их различия добавлены индексы Шаблоны_1 для Настройки/Шаблоны
        ## Шаблоны_2 для Настройки/ZTP/Шаблоны
        loc = self.get_locator(locator)
        if item_name == "Шаблоны_1":
            loc = loc.get_by_text("Шаблоны").first
        elif item_name == "Шаблоны_2":
            loc = loc.get_by_text("Шаблоны").nth(1)
        else:
            loc = loc.get_by_text(item_name)
        self.check_presence(loc, msg)

### `click_item(locator, item_name)`

Кликает по элементу с указанным текстом.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор элемента или строка с CSS/XPath. | required
`item_name` | `str` | Текст элемента для клика. | required

Source code in `components\navbar_component.py`

    37
    38
    39
    40
    41
    42
    43
    44
    45
    46

    def click_item(self, locator: str | Locator, item_name: str) -> None:
        """Кликает по элементу с указанным текстом.

        Args:
            locator: Локатор элемента или строка с CSS/XPath.
            item_name: Текст элемента для клика.
        """

        loc = self.get_locator(locator)
        loc.get_by_text(item_name).click()

### `click_sub_item(locator, sublevel_number, item_name)`

Кликает по вложенному элементу с указанным текстом.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор родительского элемента. | required
`sublevel_number` | `int` | Уровень вложенности (1 или 2). | required
`item_name` | `str` | Текст элемента для клика. | required

Raises:

Type | Description
--- | ---
`ValueError` | Если уровень вложенности не 1 или 2.

Source code in `components\navbar_component.py`

    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70

    def click_sub_item(self, locator: str | Locator, sublevel_number: int, item_name: str) -> None:
        """Кликает по вложенному элементу с указанным текстом.

        Args:
            locator: Локатор родительского элемента.
            sublevel_number: Уровень вложенности (1 или 2).
            item_name: Текст элемента для клика.

        Raises:
            ValueError: Если уровень вложенности не 1 или 2.
        """

        root_locator = self.get_locator(NavigationPanelLocators.NODE_ROOT)
        children_locator = self.get_locator(NavigationPanelLocators.NODE_CHILDREN)

        loc = self.get_locator(locator)

        if sublevel_number == 1:
            loc.locator(root_locator).get_by_text(item_name).click()
        elif sublevel_number == 2:
            loc.locator(children_locator).locator(root_locator).get_by_text(item_name).click()
        else:
            raise ValueError("the navigation panel has two levels of nesting only")

### `get_item_names(locator)`

Возвращает тексты всех элементов по указанному локатору.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор элементов или строка с CSS/XPath. | required

Returns:

Type | Description
--- | ---
`list[str]` | Список текстов элементов.

Source code in `components\navbar_component.py`

    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    def get_item_names(self, locator: str | Locator) -> list[str]:
        """Возвращает тексты всех элементов по указанному локатору.

        Args:
            locator: Локатор элементов или строка с CSS/XPath.

        Returns:
            Список текстов элементов.
        """

        loc = self.get_locator(locator)
        return loc.all_inner_texts()