Files
sousa-gecko/testing/web-platform/mozilla/tests/webdriver/harness/session_lifecycle.py
T
Henrik Skupin f0c596bff6 Bug 2050357 - [wdspec] Make geckodriver fixture module-scoped to avoid unnecessary restarts. r=jdescottes
The geckodriver process is reused across tests within the same module
when command line arguments, environment variables, and profile match.
A custom profile is used to avoid conflicts with the harness Firefox
instance.

Differential Revision: https://phabricator.services.mozilla.com/D308763
2026-07-02 12:31:16 +00:00

97 lines
3.3 KiB
Python

# META: timeout=long
# Tests that the session and bidi_session fixtures correctly restart or reuse
# sessions when capabilities change (webSocketUrl, acceptInsecureCerts) while
# keeping the geckodriver process running. Each test relies on state saved by
# preceding tests, so the order must not be changed.
import pytest
from support.fixtures import _geckodriver_state
_state = {}
def test_classic_session(session):
driver = _geckodriver_state["current"]
_state["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
def test_classic_session_reuse(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] == _state["firefox_pid"]
assert session.session_id == _state["session_id"]
@pytest.mark.asyncio
async def test_bidi_session_new_session(bidi_session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert bidi_session.capabilities["moz:processID"] != _state["firefox_pid"]
assert bidi_session.session_id != _state["session_id"]
_state["firefox_pid"] = bidi_session.capabilities["moz:processID"]
_state["session_id"] = bidi_session.session_id
@pytest.mark.asyncio
async def test_bidi_session_reuse(bidi_session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert bidi_session.capabilities["moz:processID"] == _state["firefox_pid"]
assert bidi_session.session_id == _state["session_id"]
def test_classic_session_after_bidi(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] != _state["firefox_pid"]
assert session.session_id != _state["session_id"]
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
def test_classic_session_reuse_after_bidi(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] == _state["firefox_pid"]
assert session.session_id == _state["session_id"]
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_classic_session_with_accept_insecure_certs(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] != _state["firefox_pid"]
assert session.session_id != _state["session_id"]
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_classic_session_reuse_with_accept_insecure_certs(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] == _state["firefox_pid"]
assert session.session_id == _state["session_id"]
def test_classic_session_after_accept_insecure_certs(session):
driver = _geckodriver_state["current"]
assert driver.proc.pid == _state["geckodriver_pid"]
assert session.capabilities["moz:processID"] != _state["firefox_pid"]
assert session.session_id != _state["session_id"]