Skip to content

BaseElement

Модуль base_element содержит базовый класс для работы с элементами страницы.

Класс BaseElement предоставляет основные методы взаимодействия с элементами и их проверки через Playwright.

BaseElement

Базовый класс для работы с элементами страницы через Playwright.

Предоставляет основные методы взаимодействия с элементами: клики, получение текста, ожидание и проверки состояния.

Source code in elements\base_element.py
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 BaseElement:
    """Базовый класс для работы с элементами страницы через Playwright.

    Предоставляет основные методы взаимодействия с элементами:
    клики, получение текста, ожидание и проверки состояния.
    """

    def __init__(self, page: Page, locator: str | Locator, name: str) -> None:
        """Инициализирует базовый элемент страницы.

        Args:
            page: Экземпляр страницы Playwright
            locator: Локатор элемента (строка или объект Locator)
            name: Имя элемента для логирования
        """

        self.page = page
        self.name = name
        self.locator: Locator

        if isinstance(locator, Locator):
            self.locator = locator
        elif isinstance(locator, str):
            self.locator = self.page.locator(locator)
        else:
            raise TypeError("locator value should be string type or Locator type")

    @property
    def type_of(self) -> str:
        """Возвращает тип элемента (для логирования)."""

        return "base element"

    # Действия:
    def click(self) -> None:
        """Выполняет клик по элементу."""

        logger.info(f"Clicking {self.type_of} '{self.name}'")
        self.locator.click()

    def get_text(self, index: int) -> str:
        """Возвращает текст элемента по указанному индексу."""

        logger.info(f"Get text for {self.type_of} '{self.name}'")
        return self.locator.nth(index).text_content()

    def wait_for_element(self, timeout: int = 12000) -> None:
        """Ожидает появление элемента в течение заданного времени."""

        logger.info(f"Wait for {self.type_of} '{self.name}'")
        self.locator.wait_for(timeout=timeout)

    # Проверки:
    def check_have_text(self, text: str, msg: str) -> None:
        """Проверяет наличие указанного текста в элементе."""

        logger.info(f"Check that {self.type_of} '{self.name}' has text '{text}'")
        expect(self.locator).to_have_text(text), msg

    def check_presence(self, msg: str) -> None:
        """Проверяет видимость элемента на странице."""

        logger.info(f"Check that {self.type_of} '{self.name}' is present")
        print(self.locator)
        expect(self.locator).to_be_visible(visible=True, timeout=12000), msg

    def is_present(self, timeout: int = 5000) -> bool:
        """Проверяет наличие элемента в течение заданного времени."""

        logger.info(f"Check that {self.type_of} '{self.name}' is present")
        try:
            self.locator.wait_for(timeout=timeout)
        except TimeoutError:
            return False
        return True

    def is_not_present(self, timeout: int = 5000) -> bool:
        """Проверяет отсутствие элемента в течение заданного времени."""

        logger.info(f"Check that {self.type_of} '{self.name}' is missing")
        try:
            self.locator.wait_for(timeout=timeout)
        except TimeoutError:
            return True
        return False

type_of property

Возвращает тип элемента (для логирования).

__init__(page, locator, name)

Инициализирует базовый элемент страницы.

Parameters:

Name Type Description Default
page Page

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

required
locator str | Locator

Локатор элемента (строка или объект Locator)

required
name str

Имя элемента для логирования

required
Source code in elements\base_element.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def __init__(self, page: Page, locator: str | Locator, name: str) -> None:
    """Инициализирует базовый элемент страницы.

    Args:
        page: Экземпляр страницы Playwright
        locator: Локатор элемента (строка или объект Locator)
        name: Имя элемента для логирования
    """

    self.page = page
    self.name = name
    self.locator: Locator

    if isinstance(locator, Locator):
        self.locator = locator
    elif isinstance(locator, str):
        self.locator = self.page.locator(locator)
    else:
        raise TypeError("locator value should be string type or Locator type")

check_have_text(text, msg)

Проверяет наличие указанного текста в элементе.

Source code in elements\base_element.py
65
66
67
68
69
def check_have_text(self, text: str, msg: str) -> None:
    """Проверяет наличие указанного текста в элементе."""

    logger.info(f"Check that {self.type_of} '{self.name}' has text '{text}'")
    expect(self.locator).to_have_text(text), msg

check_presence(msg)

Проверяет видимость элемента на странице.

Source code in elements\base_element.py
71
72
73
74
75
76
def check_presence(self, msg: str) -> None:
    """Проверяет видимость элемента на странице."""

    logger.info(f"Check that {self.type_of} '{self.name}' is present")
    print(self.locator)
    expect(self.locator).to_be_visible(visible=True, timeout=12000), msg

click()

Выполняет клик по элементу.

Source code in elements\base_element.py
46
47
48
49
50
def click(self) -> None:
    """Выполняет клик по элементу."""

    logger.info(f"Clicking {self.type_of} '{self.name}'")
    self.locator.click()

get_text(index)

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

Source code in elements\base_element.py
52
53
54
55
56
def get_text(self, index: int) -> str:
    """Возвращает текст элемента по указанному индексу."""

    logger.info(f"Get text for {self.type_of} '{self.name}'")
    return self.locator.nth(index).text_content()

is_not_present(timeout=5000)

Проверяет отсутствие элемента в течение заданного времени.

Source code in elements\base_element.py
88
89
90
91
92
93
94
95
96
def is_not_present(self, timeout: int = 5000) -> bool:
    """Проверяет отсутствие элемента в течение заданного времени."""

    logger.info(f"Check that {self.type_of} '{self.name}' is missing")
    try:
        self.locator.wait_for(timeout=timeout)
    except TimeoutError:
        return True
    return False

is_present(timeout=5000)

Проверяет наличие элемента в течение заданного времени.

Source code in elements\base_element.py
78
79
80
81
82
83
84
85
86
def is_present(self, timeout: int = 5000) -> bool:
    """Проверяет наличие элемента в течение заданного времени."""

    logger.info(f"Check that {self.type_of} '{self.name}' is present")
    try:
        self.locator.wait_for(timeout=timeout)
    except TimeoutError:
        return False
    return True

wait_for_element(timeout=12000)

Ожидает появление элемента в течение заданного времени.

Source code in elements\base_element.py
58
59
60
61
62
def wait_for_element(self, timeout: int = 12000) -> None:
    """Ожидает появление элемента в течение заданного времени."""

    logger.info(f"Wait for {self.type_of} '{self.name}'")
    self.locator.wait_for(timeout=timeout)