From c699b6409e98fe64a70417a18b6e335b4c60f86d Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Mon, 13 Dec 2021 17:58:29 +0100 Subject: facilitate creating and installing WebExtensions during tests It is now possible to more conveniently test WebExtension APIs code by wrapping it into a test WebExtension and temporarily installing in the driven browser. --- test/unit/conftest.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'test/unit/conftest.py') diff --git a/test/unit/conftest.py b/test/unit/conftest.py index 1500006..e1c98a1 100644 --- a/test/unit/conftest.py +++ b/test/unit/conftest.py @@ -26,10 +26,14 @@ Common fixtures for Haketilo unit tests # proprietary program, I am not going to enforce this in court. import pytest +from pathlib import Path +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC -from ..profiles import firefox_safe_mode -from ..server import do_an_internet -from ..script_loader import load_script +from ..profiles import firefox_safe_mode +from ..server import do_an_internet +from ..script_loader import load_script +from ..extension_crafting import make_extension @pytest.fixture(scope="package") def proxy(): @@ -43,6 +47,23 @@ def driver(proxy): yield driver driver.quit() +@pytest.fixture() +def webextension(driver, request): + ext_data = request.node.get_closest_marker('ext_data') + if ext_data is None: + raise Exception('"webextension" fixture requires "ext_data" marker to be set') + + ext_path = make_extension(Path(driver.firefox_profile.path), + **ext_data.args[0]) + driver.get('https://gotmyowndoma.in/') + addon_id = driver.install_addon(str(ext_path), temporary=True) + WebDriverWait(driver, 10).until( + EC.title_contains("Extension's options page for testing") + ) + yield + driver.uninstall_addon(addon_id) + ext_path.unlink() + script_injecting_script = '''\ /* * Selenium by default executes scripts in some weird one-time context. We want @@ -63,8 +84,8 @@ window.arguments = arguments[1]; document.body.append(script_elem); /* - * To ease debugging, we want this script to forward signal all exceptions from - * the injectee. + * To ease debugging, we want this script to signal all exceptions from the + * injectee. */ try { if (window.haketilo_selenium_exception !== false) -- cgit v1.2.3