Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /webdriver/harness/geckodriver_lifecycle.py - WPT Dashboard Interop Dashboard
# META: timeout=long
# Tests that the geckodriver fixture correctly restarts or reuses the
# geckodriver process and Firefox session depending on extra_args, extra_env,
# hostname, capabilities, and force_new. 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_session_default_args(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_session_reuse_with_default_args(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.geckodriver(allow_system_access=True)
def test_session_restart_with_allow_system_access(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["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
def test_session_restart_back_to_default_args(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["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
@pytest.mark.geckodriver(force_new=True)
def test_session_restart_with_force_new(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["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
@pytest.mark.geckodriver(force_new=True)
def test_session_restart_with_force_new_again(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["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = session.capabilities["moz:processID"]
_state["session_id"] = session.session_id
def test_session_reuse_after_force_new(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_profile_is_not_harness_profile(session, profile_folder):
assert session.capabilities["moz:profile"] != profile_folder
def test_restart_with_extra_args(geckodriver):
driver = geckodriver(extra_args=["--jsdebugger"])
driver.new_session()
assert driver.proc.pid != _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] != _state["firefox_pid"]
assert driver.session.session_id != _state["session_id"]
_state["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = driver.session.capabilities["moz:processID"]
_state["session_id"] = driver.session.session_id
def test_reuse_with_same_extra_args(geckodriver):
driver = geckodriver(extra_args=["--jsdebugger"])
driver.new_session()
assert driver.proc.pid == _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] == _state["firefox_pid"]
assert driver.session.session_id == _state["session_id"]
def test_restart_with_extra_env(geckodriver):
driver = geckodriver(extra_env={"MOZ_LOG": "1"})
driver.new_session()
assert driver.proc.pid != _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] != _state["firefox_pid"]
assert driver.session.session_id != _state["session_id"]
_state["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = driver.session.capabilities["moz:processID"]
_state["session_id"] = driver.session.session_id
def test_reuse_with_same_extra_env(geckodriver):
driver = geckodriver(extra_env={"MOZ_LOG": "1"})
driver.new_session()
assert driver.proc.pid == _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] == _state["firefox_pid"]
assert driver.session.session_id == _state["session_id"]
def test_restart_with_hostname(geckodriver, configuration):
default_host = configuration["host"]
other_host = "localhost" if default_host == "127.0.0.1" else "127.0.0.1"
driver = geckodriver(hostname=other_host)
driver.new_session()
assert driver.proc.pid != _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] != _state["firefox_pid"]
assert driver.session.session_id != _state["session_id"]
_state["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = driver.session.capabilities["moz:processID"]
_state["session_id"] = driver.session.session_id
def test_reuse_with_same_hostname(geckodriver, configuration):
default_host = configuration["host"]
other_host = "localhost" if default_host == "127.0.0.1" else "127.0.0.1"
driver = geckodriver(hostname=other_host)
driver.new_session()
assert driver.proc.pid == _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] == _state["firefox_pid"]
assert driver.session.session_id == _state["session_id"]
def test_bidi_enabled_by_default(geckodriver):
driver = geckodriver()
driver.new_session()
_state["geckodriver_pid"] = driver.proc.pid
_state["firefox_pid"] = driver.session.capabilities["moz:processID"]
_state["session_id"] = driver.session.session_id
assert driver.session.capabilities["webSocketUrl"].endswith(
driver.session.session_id
)
def test_bidi_disabled_with_capability(geckodriver):
driver = geckodriver()
driver.new_session(capabilities={"webSocketUrl": False})
assert driver.proc.pid == _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] != _state["firefox_pid"]
assert driver.session.session_id != _state["session_id"]
_state["firefox_pid"] = driver.session.capabilities["moz:processID"]
_state["session_id"] = driver.session.session_id
assert "webSocketUrl" not in driver.session.capabilities
def test_bidi_reenabled_without_capability(geckodriver):
driver = geckodriver()
driver.new_session()
assert driver.proc.pid == _state["geckodriver_pid"]
assert driver.session.capabilities["moz:processID"] != _state["firefox_pid"]
assert driver.session.session_id != _state["session_id"]
assert driver.session.capabilities["webSocketUrl"].endswith(
driver.session.session_id
)