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

Skip to content

# Browser Fixtures

Модуль pages содержит фикстуры и функции для работы с Playwright.

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

## `browser(request)`

Фикстура для управления экземпляром браузера.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`request` | `FixtureRequest` | Объект запроса pytest для доступа к конфигурации. | required

Returns:

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

Yields:

Name | Type | Description
--- | --- | ---
`Page` | `Page` | Страница для использования в тестах.

Note

Автоматически закрывает браузер после тестов.

Source code in `fixtures\pages.py`

    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

    @pytest.fixture(scope='class')
    def browser(request: FixtureRequest) -> Page:
        """Фикстура для управления экземпляром браузера.

        Args:
            request: Объект запроса pytest для доступа к конфигурации.

        Returns:
            Page: Экземпляр страницы браузера.

        Yields:
            Page: Страница для использования в тестах.

        Note:
            Автоматически закрывает браузер после тестов.
        """

        playwright = sync_playwright().start()

        # Выбор браузера на основе параметра командной строки
        if request.config.getoption("bn") == 'remote_chrome':
            browser = get_remote_chrome(playwright, request)
            context = get_context(browser, request, 'remote')
            page_data = context.new_page()
        elif request.config.getoption("bn") == 'firefox':
            browser = get_firefox_browser(playwright, request)
            context = get_context(browser, request, 'local')
            page_data = context.new_page()
        elif request.config.getoption("bn") == 'chrome':
            browser = get_chrome_browser(playwright, request)
            context = get_context(browser, request, 'local')
            page_data = context.new_page()
        else:
            browser = get_chrome_browser(playwright, request)
            context = get_context(browser, request, 'local')
            page_data = context.new_page()

        yield page_data

        # Очистка после завершения тестов
        for context in browser.contexts:
            context.close()
        browser.close()
        playwright.stop()

## `get_chrome_browser(playwright, request)`

Создает и возвращает экземпляр Chrome браузера.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`playwright` | `Playwright` | Экземпляр Playwright. | required
`request` | `FixtureRequest` | Объект запроса pytest. | required

Returns:

Name | Type | Description
--- | --- | ---
`Browser` | `Browser` | Экземпляр Chrome.

Source code in `fixtures\pages.py`

    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130

    def get_chrome_browser(playwright: Playwright, request: FixtureRequest) -> Browser:
        """Создает и возвращает экземпляр Chrome браузера.

        Args:
            playwright: Экземпляр Playwright.
            request: Объект запроса pytest.

        Returns:
            Browser: Экземпляр Chrome.
        """

        return playwright.chromium.launch(
            headless=request.config.getoption("h"),
            slow_mo=request.config.getoption("slow"),
            args=['--s']
        )

## `get_context(browser, request, start)`

Создает и настраивает контекст браузера.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`browser` | `Browser` | Экземпляр браузера. | required
`request` | `FixtureRequest` | Объект запроса pytest. | required
`start` | `str` | Тип запуска ('local' или 'remote'). | required

Returns:

Name | Type | Description
--- | --- | ---
`BrowserContext` | `BrowserContext` | Настроенный контекст.

Source code in `fixtures\pages.py`

    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185

    def get_context(browser: Browser, request: FixtureRequest, start: str) -> BrowserContext:
        """Создает и настраивает контекст браузера.

        Args:
            browser: Экземпляр браузера.
            request: Объект запроса pytest.
            start: Тип запуска ('local' или 'remote').

        Returns:
            BrowserContext: Настроенный контекст.
        """

        if start == 'local':
            context = browser.new_context(
                # no_viewport=True,
                viewport=request.config.getoption('s'),
                locale=request.config.getoption('l')
            )
            context.set_default_timeout(
                timeout=request.config.getoption('t')
            )
            # Пример добавления кук (закомментировано)
            # context.add_cookies([{'url': 'https://example.ru', 'name': 'ab_test', 'value': 'd'}])
            return context

        elif start == 'remote':
            context = browser.new_context(
                viewport=request.config.getoption('s'),
                locale=request.config.getoption('l')
            )
            context.set_default_timeout(
                timeout=request.config.getoption('t')
            )
            # Пример добавления кук (закомментировано)
            # context.add_cookies([{'url': 'https://example.ru', 'name': 'ab_test', 'value': 'd'}])
            return context

## `get_firefox_browser(playwright, request)`

Создает и возвращает экземпляр Firefox браузера.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`playwright` | `Playwright` | Экземпляр Playwright. | required
`request` | `FixtureRequest` | Объект запроса pytest. | required

Returns:

Name | Type | Description
--- | --- | ---
`Browser` | `Browser` | Экземпляр Firefox.

Source code in `fixtures\pages.py`

     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112

    def get_firefox_browser(playwright: Playwright, request: FixtureRequest) -> Browser:
        """Создает и возвращает экземпляр Firefox браузера.

        Args:
            playwright: Экземпляр Playwright.
            request: Объект запроса pytest.

        Returns:
            Browser: Экземпляр Firefox.
        """

        return playwright.firefox.launch(
            headless=request.config.getoption("h"),
            slow_mo=request.config.getoption("slow"),
        )

## `get_remote_chrome(playwright, request)`

Создает экземпляр Chrome для удаленного запуска.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`playwright` | `Playwright` | Экземпляр Playwright. | required
`request` | `FixtureRequest` | Объект запроса pytest. | required

Returns:

Name | Type | Description
--- | --- | ---
`Browser` | `Browser` | Экземпляр Chrome в headless режиме.

Source code in `fixtures\pages.py`

    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147

    def get_remote_chrome(playwright: Playwright, request: FixtureRequest) -> Browser:
        """Создает экземпляр Chrome для удаленного запуска.

        Args:
            playwright: Экземпляр Playwright.
            request: Объект запроса pytest.

        Returns:
            Browser: Экземпляр Chrome в headless режиме.
        """

        return playwright.chromium.launch(
            headless=True,
            slow_mo=request.config.getoption("slow")
        )

## `pytest_addoption(parser)`

Добавляет опции командной строки для настройки браузера.

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`parser` | `Parser` | Парсер pytest для добавления опций. | required

Опции

--bn: Браузер (chrome, remote_chrome, firefox) --h: Режим headless (True/False) --s: Размер окна {'width': int, 'height': int} --slow: Задержка между действиями (мс) --t: Таймаут по умолчанию (мс) --l: Локаль браузера

Source code in `fixtures\pages.py`

    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

    def pytest_addoption(parser: Parser):
        """Добавляет опции командной строки для настройки браузера.

        Args:
            parser: Парсер pytest для добавления опций.

        Опции:
            --bn: Браузер (chrome, remote_chrome, firefox)
            --h: Режим headless (True/False)
            --s: Размер окна {'width': int, 'height': int}
            --slow: Задержка между действиями (мс)
            --t: Таймаут по умолчанию (мс)
            --l: Локаль браузера
        """

        parser.addoption('--bn', action='store', default="chrome",
                       help="Choose browser: chrome, remote_chrome or firefox")
        parser.addoption('--h', action='store', default=False,
                       help='Choose headless: True or False')
        parser.addoption('--s', action='store', default={'width': 1600, 'height': 900},
                       help='Size window: width,height')
        # Закомментированные альтернативные размеры окон
        # parser.addoption('--s', action='store', default={'width': 1920, 'height': 1080},
        #                 help='Size window: width,height')
        # parser.addoption('--s', action='store', default={'width': 1920, 'height': 300},
        #                 help='Size window: width,height')
        # parser.addoption('--s', action='store', default={'width': 300, 'height': 420},
        #               help='Size window: width,height')
        parser.addoption('--slow', action='store', default=200,
                       help='Choose slow_mo for robot action')
        parser.addoption('--t', action='store', default=60000,
                       help='Choose timeout')
        parser.addoption('--l', action='store', default='ru-RU',
                       help='Choose locale')

## `return_back(browser)`

Фикстура для возврата на предыдущую страницу.

Parameters:

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

Source code in `fixtures\pages.py`

    188
    189
    190
    191
    192
    193
    194
    195
    196

    @pytest.fixture(scope="function")
    def return_back(browser: Page):
        """Фикстура для возврата на предыдущую страницу.

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

        browser.go_back()