Skip to content

Commit f8027be

Browse files
committed
wait for webdriver to open window before use in tests
1 parent 7a7063a commit f8027be

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

tests/conftest.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from _pytest.fixtures import FixtureRequest
77
from selenium import webdriver
88
from selenium.common import WebDriverException
9+
from selenium.webdriver.support.wait import WebDriverWait
10+
from selenium.webdriver.support import expected_conditions as EC
911

1012
import requestium
1113

@@ -39,7 +41,9 @@ def _create_chrome_driver(headless: bool) -> webdriver.Chrome:
3941
options.add_argument("--disable-dev-shm-usage")
4042
if headless:
4143
options.add_argument("--headless=new")
42-
return webdriver.Chrome(options=options)
44+
driver = webdriver.Chrome(options=options)
45+
WebDriverWait(driver, 5).until(EC.number_of_windows_to_be(1))
46+
return driver
4347

4448

4549
def _create_firefox_driver(headless: bool) -> webdriver.Firefox:
@@ -50,7 +54,9 @@ def _create_firefox_driver(headless: bool) -> webdriver.Firefox:
5054
options.set_preference("network.http.use-cache", False)
5155
if headless:
5256
options.add_argument("--headless")
53-
return webdriver.Firefox(options=options)
57+
driver = webdriver.Firefox(options=options)
58+
WebDriverWait(driver, 5).until(EC.number_of_windows_to_be(1))
59+
return driver
5460

5561

5662
@pytest.fixture(
@@ -76,3 +82,19 @@ def session(request: FixtureRequest) -> Generator[requestium.Session, None, None
7682

7783
with contextlib.suppress(WebDriverException, OSError):
7884
driver.quit()
85+
86+
87+
@pytest.fixture(autouse=True)
88+
def ensure_valid_session(session: requestium.Session) -> None:
89+
"""Skip test if browser context is discarded."""
90+
try:
91+
_ = session.driver.current_url
92+
_ = session.driver.window_handles
93+
except WebDriverException as e:
94+
if "Browsing context has been discarded" not in str(e):
95+
raise
96+
97+
try:
98+
session.driver.switch_to.new_window("tab")
99+
except WebDriverException:
100+
pytest.skip("Browser context discarded and cannot be recovered")

0 commit comments

Comments
 (0)