wabot/tests/integration/test_external_server.py
Mathew Sir Guest the best 68978a34e7 style: apply ruff format across the codebase
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 23:12:23 -06:00

67 lines
1.9 KiB
Python

"""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()