Skip to content

TableComponent

TableComponent

Bases: BaseComponent

Компонент таблицы.

Предоставляет методы для взаимодействия с таблицами и проверки их состояния. Наследуется от BaseComponent.

Атрибуты

page: Page - экземпляр страницы Playwright

Source code in components\table_component.py
 10
 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
class TableComponent(BaseComponent):
    """Компонент таблицы.

    Предоставляет методы для взаимодействия с таблицами и проверки их состояния.
    Наследуется от BaseComponent.

    Атрибуты:
        page: Page - экземпляр страницы Playwright
    """

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

        Args:
            page: Page - экземпляр страницы Playwright
        """
        super().__init__(page)

    # Действия:
    def read(self, locator) -> []:
        """Читает данные из таблицы, включая заголовки и содержимое ячеек.

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

        Returns:
            list: Двумерный список с данными таблицы (первый элемент - заголовки)
        """
        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):
        """Проверяет видимость первой строки таблицы.

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

        Raises:
            AssertionError: Если первая строка не видима
        """
        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):
        """Проверяет видимость последней строки таблицы.

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

        Raises:
            AssertionError: Если последняя строка не видима
        """
        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, row_index):
        """Проверяет изменение цвета строки при наведении курсора.

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

        Raises:
            AssertionError: Если цвет строки не изменился при наведении
        """
        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)  # 0.3 секунды

        # Получение нового цвета
        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

Page - экземпляр страницы Playwright

required
Source code in components\table_component.py
20
21
22
23
24
25
26
def __init__(self, page: Page):
    """Инициализация компонента таблицы.

    Args:
        page: Page - экземпляр страницы Playwright
    """
    super().__init__(page)

check_first_row_visibility(locator)

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

Parameters:

Name Type Description Default
locator

Локатор таблицы

required

Raises:

Type Description
AssertionError

Если первая строка не видима

Source code in components\table_component.py
62
63
64
65
66
67
68
69
70
71
72
73
def check_first_row_visibility(self, locator):
    """Проверяет видимость первой строки таблицы.

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

    Raises:
        AssertionError: Если первая строка не видима
    """
    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

Локатор таблицы

required

Raises:

Type Description
AssertionError

Если последняя строка не видима

Source code in components\table_component.py
75
76
77
78
79
80
81
82
83
84
85
86
def check_last_row_visibility(self, locator):
    """Проверяет видимость последней строки таблицы.

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

    Raises:
        AssertionError: Если последняя строка не видима
    """
    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

Локатор таблицы

required
row_index

Индекс проверяемой строки

required

Raises:

Type Description
AssertionError

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

Source code in components\table_component.py
 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
def check_row_highlighting(self, locator, row_index):
    """Проверяет изменение цвета строки при наведении курсора.

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

    Raises:
        AssertionError: Если цвет строки не изменился при наведении
    """
    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)  # 0.3 секунды

    # Получение нового цвета
    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"

read(locator)

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

Parameters:

Name Type Description Default
locator

Локатор таблицы

required

Returns:

Name Type Description
list []

Двумерный список с данными таблицы (первый элемент - заголовки)

Source code in components\table_component.py
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
def read(self, locator) -> []:
    """Читает данные из таблицы, включая заголовки и содержимое ячеек.

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

    Returns:
        list: Двумерный список с данными таблицы (первый элемент - заголовки)
    """
    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