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

Skip to content

# TableComponent

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

## `TableComponent`

Bases: `BaseComponent`

Компонент таблицы. Предоставляет методы для работы с табличными данными.

Source code in `components\table_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
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118

    class TableComponent(BaseComponent):
        """Компонент таблицы. Предоставляет методы для работы с табличными данными."""

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

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

            super().__init__(page)

        # Действия:
        def get_row_locator(self, table_locator: str | Locator, row_index: int) -> Locator | None:
            """Возвращает локатор строки по индексу.

            Args:
                table_locator: Локатор таблицы.
                row_index: Индекс строки.

            Returns:
                Локатор строки или None, если индекс вне диапазона.
            """

            table = self.get_locator(table_locator)

            rows = table.locator("//tbody/tr")

            if row_index in range(rows.count()):
                return rows.nth(row_index)
            else:
                return None

        def read(self, locator: str | Locator) -> list[list[str]]:
            """Читает данные таблицы, включая заголовки.

            Args:
                locator: Локатор таблицы.

            Returns:
                Двумерный список с данными таблицы.
            """

            table_data = []
            table = self.get_locator(locator)

            # Чтение заголовка таблицы
            header_cells = table.locator("//thead/tr")
            header_cell_text = header_cells.nth(0).inner_text()
            header_data = header_cell_text.split('\n')
            table_data.append(header_data)

            # Чтение ячеек таблицы
            rows = table.locator("//tbody/tr")
            for i in range(rows.count()):
                row = rows.nth(i)
                cells = row.locator("td")
                row_data = []
                for j in range(cells.count()):
                    cell_text = cells.nth(j).inner_text()
                    row_data.append(cell_text)
                table_data.append(row_data)

            return table_data

        # Проверки:
        def check_first_row_visibility(self, locator: str | Locator) -> None:
            """Проверяет видимость первой строки таблицы.

            Args:
                locator: Локатор таблицы.
            """

            table = self.get_locator(locator)
            first_row = table.locator("//tbody/tr").first
            expect(first_row).to_be_visible(), "The first table row is not visible"

        def check_last_row_visibility(self, locator: str | Locator) -> None:
            """Проверяет видимость последней строки таблицы.

            Args:
                locator: Локатор таблицы.
            """

            table = self.get_locator(locator)
            last_row = table.locator("//tbody/tr").last
            expect(last_row).to_be_visible(), "The last table row is not visible"

        def check_row_highlighting(self, locator: str | Locator, row_index: int) -> None:
            """Проверяет изменение цвета строки при наведении.

            Args:
                locator: Локатор таблицы.
                row_index: Индекс проверяемой строки.
            """

            table = self.get_locator(locator)
            row = table.locator("//tbody/tr").nth(row_index)

            row.scroll_into_view_if_needed()
            hover_element = row.locator(".body-row-hover")
            initial_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")

            row.hover()
            self.page.wait_for_timeout(300)

            new_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")
            assert initial_color != new_color, "Color of row did not change when hovering the cursor"

### `__init__(page)`

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

Parameters:

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

Source code in `components\table_component.py`

    14
    15
    16
    17
    18
    19
    20
    21

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

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

        super().__init__(page)

### `check_first_row_visibility(locator)`

Проверяет видимость первой строки таблицы.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор таблицы. | required

Source code in `components\table_component.py`

    77
    78
    79
    80
    81
    82
    83
    84
    85
    86

    def check_first_row_visibility(self, locator: str | Locator) -> None:
        """Проверяет видимость первой строки таблицы.

        Args:
            locator: Локатор таблицы.
        """

        table = self.get_locator(locator)
        first_row = table.locator("//tbody/tr").first
        expect(first_row).to_be_visible(), "The first table row is not visible"

### `check_last_row_visibility(locator)`

Проверяет видимость последней строки таблицы.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор таблицы. | required

Source code in `components\table_component.py`

    88
    89
    90
    91
    92
    93
    94
    95
    96
    97

    def check_last_row_visibility(self, locator: str | Locator) -> None:
        """Проверяет видимость последней строки таблицы.

        Args:
            locator: Локатор таблицы.
        """

        table = self.get_locator(locator)
        last_row = table.locator("//tbody/tr").last
        expect(last_row).to_be_visible(), "The last table row is not visible"

### `check_row_highlighting(locator, row_index)`

Проверяет изменение цвета строки при наведении.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор таблицы. | required
`row_index` | `int` | Индекс проверяемой строки. | required

Source code in `components\table_component.py`

     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118

    def check_row_highlighting(self, locator: str | Locator, row_index: int) -> None:
        """Проверяет изменение цвета строки при наведении.

        Args:
            locator: Локатор таблицы.
            row_index: Индекс проверяемой строки.
        """

        table = self.get_locator(locator)
        row = table.locator("//tbody/tr").nth(row_index)

        row.scroll_into_view_if_needed()
        hover_element = row.locator(".body-row-hover")
        initial_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")

        row.hover()
        self.page.wait_for_timeout(300)

        new_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")
        assert initial_color != new_color, "Color of row did not change when hovering the cursor"

### `get_row_locator(table_locator, row_index)`

Возвращает локатор строки по индексу.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`table_locator` | `str | Locator` | Локатор таблицы. | required
`row_index` | `int` | Индекс строки. | required

Returns:

Type | Description
--- | ---
`Locator | None` | Локатор строки или None, если индекс вне диапазона.

Source code in `components\table_component.py`

    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42

    def get_row_locator(self, table_locator: str | Locator, row_index: int) -> Locator | None:
        """Возвращает локатор строки по индексу.

        Args:
            table_locator: Локатор таблицы.
            row_index: Индекс строки.

        Returns:
            Локатор строки или None, если индекс вне диапазона.
        """

        table = self.get_locator(table_locator)

        rows = table.locator("//tbody/tr")

        if row_index in range(rows.count()):
            return rows.nth(row_index)
        else:
            return None

### `read(locator)`

Читает данные таблицы, включая заголовки.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`locator` | `str | Locator` | Локатор таблицы. | required

Returns:

Type | Description
--- | ---
`list[list[str]]` | Двумерный список с данными таблицы.

Source code in `components\table_component.py`

    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

    def read(self, locator: str | Locator) -> list[list[str]]:
        """Читает данные таблицы, включая заголовки.

        Args:
            locator: Локатор таблицы.

        Returns:
            Двумерный список с данными таблицы.
        """

        table_data = []
        table = self.get_locator(locator)

        # Чтение заголовка таблицы
        header_cells = table.locator("//thead/tr")
        header_cell_text = header_cells.nth(0).inner_text()
        header_data = header_cell_text.split('\n')
        table_data.append(header_data)

        # Чтение ячеек таблицы
        rows = table.locator("//tbody/tr")
        for i in range(rows.count()):
            row = rows.nth(i)
            cells = row.locator("td")
            row_data = []
            for j in range(cells.count()):
                cell_text = cells.nth(j).inner_text()
                row_data.append(cell_text)
            table_data.append(row_data)

        return table_data