Zundler/tests/conftest.py
Adrian Vollmer 6b9c894ed2 Fix document once more after DOM content loaded
This is because some documents alter itself using `document.write`,
which can insert again tags (img, style, script) that expect to live in
a normal environment.

This commit also refactors some of the `retrieveFile` logic. The
function should behave differently when called in the iframe vs the
parent document.
2024-04-30 14:39:41 +02:00

85 lines
2.0 KiB
Python

import pytest
import subprocess
from selenium import webdriver
from pathlib import Path
@pytest.fixture(scope="session")
def firefox_driver():
_driver = webdriver.Firefox()
yield _driver
_driver.quit()
@pytest.fixture(scope="session")
def chrome_driver():
_driver = webdriver.Chrome()
yield _driver
_driver.quit()
@pytest.fixture(scope="session")
def docker_compose_command() -> str:
return "podman-compose"
def is_responsive(port):
import socket
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(("127.0.0.1", port))
if result == 0:
return True
else:
return False
sock.close()
except Exception:
return False
@pytest.fixture(scope="session")
def selenium_drivers(docker_ip, docker_services):
# `port_for` takes a container port and returns the corresponding host port
drivers = {}
for browser in ["firefox"]:
port = docker_services.port_for(browser, 5900)
docker_services.wait_until_responsive(
timeout=30.0, pause=0.1, check=lambda: is_responsive(port)
)
options = webdriver.FirefoxOptions()
drivers[browser] = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub",
options=options,
)
yield drivers
for browser, driver in drivers.items():
driver.quit()
@pytest.fixture(autouse=True)
def run_make_commands(request):
# Get the directory of the current test file
test_dir = request.fspath.dirname
cmd = """
( cd .. ; uv venv ) && \\
. ../.venv/bin/activate && \\
uv pip install -r requirements.txt && \\
rm -rf _build && \\
../.venv/bin/sphinx-build -M zundler . _build
"""
for d in [
"copy-button",
"mermaid",
"multi-page",
"dark-mode",
"dark-listing",
"pydata-theme",
]:
subprocess.run(cmd.strip(), shell=True, check=True, cwd=Path(test_dir) / d)