diff --git a/test/e2e/playwright/browser_manager.py b/test/e2e/playwright/browser_manager.py index aaa5615..6402dd0 100644 --- a/test/e2e/playwright/browser_manager.py +++ b/test/e2e/playwright/browser_manager.py @@ -1,17 +1,38 @@ +import contextlib import logging from test.e2e.env_config import is_headless - -from playwright.sync_api import Page, Playwright +from typing import Optional +from playwright.sync_api import BrowserContext, Page, Playwright log = logging.getLogger(__name__) class BrowserManager: - def __init__(self, playwright: Playwright) -> None: - self.playwright = playwright - def create_new_context(self, headless=is_headless()) -> Page: + @classmethod + @contextlib.contextmanager + def new_context(cls, playwright: Playwright, headless: Optional[bool] = None) -> BrowserContext: log.info("creating new browser context") - browser = self.playwright.chromium.launch(headless=headless) + headless = headless if headless is not None else is_headless() + browser = playwright.chromium.launch(headless=headless) context = browser.new_context() - return context.new_page() + try: + yield context + except Exception as e: + log.exception(e) + finally: + context.close() + + @classmethod + @contextlib.contextmanager + def new_page(cls, playwright: Playwright, headless: Optional[bool] = None) -> Page: + headless = headless if headless is not None else is_headless() + with cls.new_context(playwright=playwright, headless=headless) as context: + page = context.new_page() + try: + yield page + except Exception as e: + log.exception(e) + finally: + page.close() + diff --git a/test/e2e/testscenarios/test_copy_paste.py b/test/e2e/testscenarios/test_copy_paste.py index a18c2ba..2ad25c2 100644 --- a/test/e2e/testscenarios/test_copy_paste.py +++ b/test/e2e/testscenarios/test_copy_paste.py @@ -11,23 +11,23 @@ @pytest.mark.e2e def test_copy_paste(playwright: Playwright, request): # This test needs to be run in a headed mode for the clipboard to work correctly - page = BrowserManager(playwright).create_new_context(headless=False) - try: - create_paste_page = CreatePastePage(page) - create_paste_page.open() - first_pasted_text = create_paste_page.paste_random_text(paste_number=0) - create_paste_page.click_add_another_file_button() - second_pasted_text = create_paste_page.paste_random_text(paste_number=1) - create_paste_page.click_submit() + with BrowserManager.new_page(playwright, headless=False) as page: + try: + create_paste_page = CreatePastePage(page) + create_paste_page.open() + first_pasted_text = create_paste_page.paste_random_text(paste_number=0) + create_paste_page.click_add_another_file_button() + second_pasted_text = create_paste_page.paste_random_text(paste_number=1) + create_paste_page.click_submit() - view_paste_page = ViewPastePage(page) - view_paste_page.should_be_opened() + view_paste_page = ViewPastePage(page) + view_paste_page.should_be_opened() - view_paste_page.click_copy_button(related_paste_number=0) - verify_clipboard_contents(first_pasted_text) + view_paste_page.click_copy_button(related_paste_number=0) + verify_clipboard_contents(first_pasted_text) - view_paste_page.click_copy_button(related_paste_number=1) - verify_clipboard_contents(second_pasted_text) - except Exception: - make_screenshot(request.node, page) - raise + view_paste_page.click_copy_button(related_paste_number=1) + verify_clipboard_contents(second_pasted_text) + except Exception: + make_screenshot(request.node, page) + raise diff --git a/test/e2e/testscenarios/test_create_paste.py b/test/e2e/testscenarios/test_create_paste.py index 127dcd7..8d461a0 100644 --- a/test/e2e/testscenarios/test_create_paste.py +++ b/test/e2e/testscenarios/test_create_paste.py @@ -1,15 +1,14 @@ from test.e2e.conftest import create_paste_page from test.e2e.pageobjects.create_paste_page import CreatePastePage from test.e2e.pageobjects.view_paste_page import ViewPastePage -from test.e2e.playwright.browser_manager import BrowserManager import pytest -from playwright.sync_api import Page, Playwright +from playwright.sync_api import Page @pytest.mark.e2e def test_create_single_paste( - page: Page, playwright: Playwright, create_paste_page: CreatePastePage + page: Page, create_paste_page: CreatePastePage ): create_paste_page.should_have_title("Create new paste") @@ -21,12 +20,12 @@ def test_create_single_paste( view_paste_page.should_have_pasted_text(pasted_text) paste_url = view_paste_page.current_url() - reopen_created_paste(playwright, paste_url) + reopen_created_paste(page, paste_url) @pytest.mark.e2e def test_create_multi_paste( - page: Page, playwright: Playwright, create_paste_page: CreatePastePage + page: Page, create_paste_page: CreatePastePage ): first_pasted_text = create_paste_page.paste_random_text(paste_number=0) create_paste_page.click_add_another_file_button() @@ -45,11 +44,10 @@ def test_create_multi_paste( view_paste_page.should_have_pasted_text(third_pasted_text, paste_number=2) paste_url = view_paste_page.current_url() - reopen_created_paste(playwright, paste_url) + reopen_created_paste(page, paste_url) -def reopen_created_paste(playwright, paste_url): - new_page = BrowserManager(playwright).create_new_context() - new_view_paste_page = ViewPastePage(new_page) +def reopen_created_paste(page: Page, paste_url: str): + new_view_paste_page = ViewPastePage(page) new_view_paste_page.open(paste_url) new_view_paste_page.should_be_opened()