From 7e24d3445dedfd38c2459bf5db73f67eba929a47 Mon Sep 17 00:00:00 2001 From: Mathew Sir Guest the best Date: Wed, 8 Jul 2026 22:53:01 -0600 Subject: [PATCH] test: external WebDriver server mode (persist + ephemeral) --- tests/integration/test_external_server.py | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/integration/test_external_server.py diff --git a/tests/integration/test_external_server.py b/tests/integration/test_external_server.py new file mode 100644 index 0000000..8bb1268 --- /dev/null +++ b/tests/integration/test_external_server.py @@ -0,0 +1,58 @@ +"""host= mode: wabot connects to a WebDriver server it does not manage.""" + +import shutil +import subprocess +import time + +import pytest + +import wabot +from wabot.hosts import service_alive + + +@pytest.fixture +def external_chromedriver(): + binary = shutil.which("chromedriver") + if binary is None: + pytest.skip("chromedriver not on PATH") + proc = subprocess.Popen( + [binary, "--port=19515"], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, + ) + url = "http://127.0.0.1:19515" + deadline = time.monotonic() + 15 + while time.monotonic() < deadline and not service_alive(url): + time.sleep(0.2) + assert service_alive(url), "chromedriver never came up" + yield url + proc.terminate() + proc.wait(timeout=10) + + +def test_persistent_session_on_external_host(external_chromedriver, site_url, store): + bot = wabot.browser( + session="ext", browser="chromium", host=external_chromedriver, + headless=True, pacing=wabot.NoPacing(), store=store, + ) + bot.driver.get(f"{site_url}/welcome.html") + record = store.get("ext") + assert record.executor_url == external_chromedriver + assert record.service_pid is None # not ours to kill + + # same process, second browser() call: must reattach, not create + bot2 = wabot.browser(session="ext", store=store, pacing=wabot.NoPacing()) + assert bot2.driver.session_id == record.session_id + assert bot2.driver.current_url == f"{site_url}/welcome.html" + + bot2.driver.quit() + store.remove("ext") + + +def test_ephemeral_on_external_host(external_chromedriver, site_url, store): + bot = wabot.browser( + host=external_chromedriver, browser="chromium", + headless=True, pacing=wabot.NoPacing(), store=store, + ) + bot.driver.get(f"{site_url}/welcome.html") + assert store.names() == [] # session=None never persists + bot.driver.quit()