Skip to content

# AlertComponent

Модуль для работы с компонентом alert-окна в Playwright.

Содержит класс AlertComponent для взаимодействия с различными типами alert-окон (error, success, info, warning) и проверки их состояния.

## `AlertComponent`

Bases: `BaseComponent`

Компонент для работы с alert-окнами Playwright.

Поддерживает типы: error, success, info, warning. Позволяет проверять наличие, отсутствие и текст сообщений.

Source code in `components\alert_component.py`

     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
    class AlertComponent(BaseComponent):
        """Компонент для работы с alert-окнами Playwright.

        Поддерживает типы: error, success, info, warning.
        Позволяет проверять наличие, отсутствие и текст сообщений.
        """

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

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

            super().__init__(page)

            self.text = Text(page, "//div[contains(@class,'v-alert')]/div", "Alert message")

        # Действия:
        def get_alert_type(self) -> str:
            """Возвращает тип alert-окна.

            Returns:
                str: Тип alert-окна.

            Raises:
                ValueError: Если получен неподдерживаемый тип alert-окна.
            """

            class_attr = self.page.get_by_role("alert").locator('>div').get_attribute('class')

            alert_type = None
            if 'v-alert' in class_attr:
                alert_type = class_attr.replace("v-alert ", "")

            alert_types = ["error", "success", "info", "warning"]
            if alert_type not in alert_types:
                raise ValueError("Unsupported type of alert window")

            return alert_type

        def get_text(self) -> str:
            """Возвращает текст сообщения из alert-окна.

            Returns:
                str: Текст сообщения.
            """

            return self.text.get_text(0)

        # Проверки:
        def check_alert_presence(self, text: str):
            """Проверяет наличие alert-окна с заданным текстом.

            Args:
                text: Текст для проверки. Если пустая строка - проверяет только
                      наличие окна.

            Raises:
                AssertionError: Если alert-окно не найдено.
            """

            msg = "Alert window is missing"
            if text == "":
                expect(self.page.get_by_role("alert")).to_be_visible(), msg
            else:
                expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_visible(), msg

        def check_alert_absence(self, text: str, timeout: int = 30000):
            """Проверяет отсутствие alert-окна с заданным текстом.

            Args:
                text: Текст для проверки.
                timeout: Время ожидания исчезновения (мс).

            Raises:
                AssertionError: Если окно не исчезает в течение заданного времени.
            """

            seconds = int(timeout/1000)
            msg = f"Alert window should disappear after {seconds} seconds"
            expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_hidden(timeout=timeout), msg

        def check_text(self, alert_text: str):
            """Проверяет точное соответствие текста в alert-окне.

            Args:
                alert_text: Ожидаемый текст сообщения.

            Raises:
                AssertionError: Если текст не соответствует ожидаемому.
            """

            self.text.check_have_text(alert_text,
                                      "Unexpected message in alert window")

### `__init__(page)`

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

Parameters:

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

Source code in `components\alert_component.py`

    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    def __init__(self, page: Page):
        """Инициализирует компонент alert-окна.

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

        super().__init__(page)

        self.text = Text(page, "//div[contains(@class,'v-alert')]/div", "Alert message")

### `check_alert_absence(text, timeout=30000)`

Проверяет отсутствие alert-окна с заданным текстом.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`text` | `str` | Текст для проверки. | required
`timeout` | `int` | Время ожидания исчезновения (мс). | `30000`

Raises:

Type | Description
--- | ---
`AssertionError` | Если окно не исчезает в течение заданного времени.

Source code in `components\alert_component.py`

    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    def check_alert_absence(self, text: str, timeout: int = 30000):
        """Проверяет отсутствие alert-окна с заданным текстом.

        Args:
            text: Текст для проверки.
            timeout: Время ожидания исчезновения (мс).

        Raises:
            AssertionError: Если окно не исчезает в течение заданного времени.
        """

        seconds = int(timeout/1000)
        msg = f"Alert window should disappear after {seconds} seconds"
        expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_hidden(timeout=timeout), msg

### `check_alert_presence(text)`

Проверяет наличие alert-окна с заданным текстом.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`text` | `str` | Текст для проверки. Если пустая строка - проверяет только наличие окна. | required

Raises:

Type | Description
--- | ---
`AssertionError` | Если alert-окно не найдено.

Source code in `components\alert_component.py`

    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    def check_alert_presence(self, text: str):
        """Проверяет наличие alert-окна с заданным текстом.

        Args:
            text: Текст для проверки. Если пустая строка - проверяет только
                  наличие окна.

        Raises:
            AssertionError: Если alert-окно не найдено.
        """

        msg = "Alert window is missing"
        if text == "":
            expect(self.page.get_by_role("alert")).to_be_visible(), msg
        else:
            expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_visible(), msg

### `check_text(alert_text)`

Проверяет точное соответствие текста в alert-окне.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`alert_text` | `str` | Ожидаемый текст сообщения. | required

Raises:

Type | Description
--- | ---
`AssertionError` | Если текст не соответствует ожидаемому.

Source code in `components\alert_component.py`

     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    def check_text(self, alert_text: str):
        """Проверяет точное соответствие текста в alert-окне.

        Args:
            alert_text: Ожидаемый текст сообщения.

        Raises:
            AssertionError: Если текст не соответствует ожидаемому.
        """

        self.text.check_have_text(alert_text,
                                  "Unexpected message in alert window")

### `get_alert_type()`

Возвращает тип alert-окна.

Returns:

Name | Type | Description
--- | --- | ---
`str` | `str` | Тип alert-окна.

Raises:

Type | Description
--- | ---
`ValueError` | Если получен неподдерживаемый тип alert-окна.

Source code in `components\alert_component.py`

    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    def get_alert_type(self) -> str:
        """Возвращает тип alert-окна.

        Returns:
            str: Тип alert-окна.

        Raises:
            ValueError: Если получен неподдерживаемый тип alert-окна.
        """

        class_attr = self.page.get_by_role("alert").locator('>div').get_attribute('class')

        alert_type = None
        if 'v-alert' in class_attr:
            alert_type = class_attr.replace("v-alert ", "")

        alert_types = ["error", "success", "info", "warning"]
        if alert_type not in alert_types:
            raise ValueError("Unsupported type of alert window")

        return alert_type

### `get_text()`

Возвращает текст сообщения из alert-окна.

Returns:

Name | Type | Description
--- | --- | ---
`str` | `str` | Текст сообщения.

Source code in `components\alert_component.py`

    56
    57
    58
    59
    60
    61
    62
    63
    def get_text(self) -> str:
        """Возвращает текст сообщения из alert-окна.

        Returns:
            str: Текст сообщения.
        """

        return self.text.get_text(0)