Source code for univention.testing.pytest_univention_playwright

# SPDX-FileCopyrightText: 2023-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only

import os
import time
from pathlib import Path
from urllib.parse import quote

from playwright.sync_api import BrowserContext, Page, expect

from univention.testing.browser import logger
from univention.testing.browser.lib import SEC


[docs] def check_for_backtrace(page: Page, page_index: int = 0): show_backtrace_button = page.get_by_role('button', name='Show server error message') notification_502_error = page.get_by_text('An unknown error with status code 502 occurred').first try: expect(show_backtrace_button.or_(notification_502_error)).to_be_visible(timeout=5 * SEC) if show_backtrace_button.is_visible(): show_backtrace_button.click() backtrace_container = page.get_by_role( 'region', name='Hide server error message', ) logger.info("Recorded backtrace on page %s", page_index) print(backtrace_container.inner_text()) else: logger.info('An unknown error with status code 502 occurred while connecting to the server.') except AssertionError: pass
[docs] def save_screenshot(page: Page, node_name, path: Path, ucr, page_index: int = 0, timestamp: int | None = None): ts = timestamp or time.time_ns() screenshot_filename = path / f'{ts}-{node_name}-page_{page_index}.jpeg' page.screenshot(path=screenshot_filename) print_path_in_jenkins(screenshot_filename.name, ucr)
[docs] def save_trace( context: BrowserContext, node_name: str, path: Path, ucr, tracing_stop_chunk: bool = False, timestamp: int | None = None, ): ts = timestamp or time.time_ns() trace_filename = path / f'{ts}-{node_name}_trace.zip' if tracing_stop_chunk: context.tracing.stop_chunk(path=trace_filename) else: context.tracing.stop(path=trace_filename) print_path_in_jenkins(trace_filename.name, ucr, 'trace')