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)