summaryrefslogtreecommitdiff
path: root/test/unit/conftest.py
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2021-12-13 17:58:29 +0100
committerWojtek Kosior <koszko@koszko.org>2021-12-13 17:58:29 +0100
commitc699b6409e98fe64a70417a18b6e335b4c60f86d (patch)
treed01108437eaaa89fb167b35a7e4439e69b5d38d2 /test/unit/conftest.py
parent4c933941e64ba2b4b5da3c19e5ed5924a30e0752 (diff)
downloadbrowser-extension-c699b6409e98fe64a70417a18b6e335b4c60f86d.tar.gz
browser-extension-c699b6409e98fe64a70417a18b6e335b4c60f86d.zip
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.
Diffstat (limited to 'test/unit/conftest.py')
-rw-r--r--test/unit/conftest.py31
1 files changed, 26 insertions, 5 deletions
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)