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()