summaryrefslogtreecommitdiff
path: root/test/unit/conftest.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/conftest.py')
-rw-r--r--test/unit/conftest.py44
1 files changed, 32 insertions, 12 deletions
diff --git a/test/unit/conftest.py b/test/unit/conftest.py
index e1c98a1..eec311c 100644
--- a/test/unit/conftest.py
+++ b/test/unit/conftest.py
@@ -27,6 +27,7 @@ Common fixtures for Haketilo unit tests
import pytest
from pathlib import Path
+from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
@@ -42,11 +43,24 @@ def proxy():
httpd.shutdown()
@pytest.fixture(scope="package")
-def driver(proxy):
+def _driver(proxy):
with firefox_safe_mode() as driver:
yield driver
driver.quit()
+def close_all_but_one_window(driver):
+ while len(driver.window_handles) > 1:
+ driver.switch_to.window(driver.window_handles[-1])
+ driver.close()
+ driver.switch_to.window(driver.window_handles[0])
+
+@pytest.fixture()
+def driver(_driver, request):
+ nav_target = request.node.get_closest_marker('get_page')
+ close_all_but_one_window(_driver)
+ _driver.get(nav_target.args[0] if nav_target else 'about:blank')
+ yield _driver
+
@pytest.fixture()
def webextension(driver, request):
ext_data = request.node.get_closest_marker('ext_data')
@@ -58,7 +72,7 @@ def webextension(driver, request):
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")
+ EC.url_matches('^moz-extension://.*')
)
yield
driver.uninstall_addon(addon_id)
@@ -115,22 +129,28 @@ def _execute_in_page_context(driver, script, args):
raise e from None
-@pytest.fixture(scope="package")
-def execute_in_page(driver):
- def do_execute(script, *args, **kwargs):
- if 'page' in kwargs:
- driver.get(kwargs['page'])
+# Some fixtures here just define functions that operate on driver. We should
+# consider making them into webdriver wrapper class methods.
+@pytest.fixture()
+def execute_in_page(driver):
+ def do_execute(script, *args):
return _execute_in_page_context(driver, script, args)
yield do_execute
-@pytest.fixture(scope="package")
+@pytest.fixture()
def load_into_page(driver):
- def do_load(path, import_dirs, *args, **kwargs):
- if 'page' in kwargs:
- driver.get(kwargs['page'])
-
+ def do_load(path, import_dirs, *args):
_execute_in_page_context(driver, load_script(path, import_dirs), args)
yield do_load
+
+@pytest.fixture()
+def wait_elem_text(driver):
+ def do_wait(id, text):
+ WebDriverWait(driver, 10).until(
+ EC.text_to_be_present_in_element((By.ID, id), text)
+ )
+
+ yield do_wait