Waitless reduces synchronization boilerplate by evaluating page-level activity before supported Selenium interactions. Version 1.0.3 includes fixes that make the v1 signals operational and correct failed-XHR accounting. The useful promise is more observable synchronization, not the elimination of every flaky test.
What the release changes
An incorrectly counted request can leave a page looking permanently busy. The latest release fixes failed-XHR accounting and tightens the documented guarantees. If your earlier evaluation stalled or treated optional signals as more comprehensive than they were, retest the affected behavior with the current release.
Choose the signals that match your application
The default network threshold permits two pending requests. That may suit background analytics, but it does not prove that the request your test depends on has completed. Keep an assertion or explicit wait for the business state you need.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from waitless import stabilize, StabilizationConfig
driver = stabilize(webdriver.Chrome(), config=StabilizationConfig(
timeout=15,
network_idle_threshold=0,
track_websocket=True,
track_sse=True,
framework_hooks=['react'],
track_iframes=True,
))
try:
driver.get('https://test.example.com/dashboard')
driver.find_element(By.ID, 'load-orders').click()
WebDriverWait(driver, 15).until(
EC.text_to_be_present_in_element((By.ID, 'orders-status'), 'Loaded')
)
finally:
driver.quit()This is an integration example for an application you control. Replace the URL and locators with your fixture. A page with continuous network traffic may never meet a zero-request threshold; choose thresholds from observed application behavior.
Optional signals have boundaries
- WebSocket and SSE tracking observes activity available after instrumentation. A quiet stream is not proof that all future work has finished.
- Framework hooks depend on the hooks exposed by the installed framework and environment.
- Same-origin iframe support checks load readiness; it does not inject full signal tracking into every child frame.
- Cross-origin iframe internals remain outside the same-origin boundary.
- Wrapped elements are not ordinary WebElement instances; use
.unwrap()when an integration requires the original object.
Diagnose before increasing the timeout
Inspect a stabilization timeout and determine which enabled signal remained busy. Fix the cause or justify a threshold change. Raising all limits can conceal a stalled request or a product race.
python -m waitless doctor --file diagnostics.jsonMeasure the improvement in your suite
Record elapsed runtime, retry rate, failure categories, browser versions, and sample size before and after adoption. Earlier millisecond and 10x speed claims in this article were not a portable benchmark. From a repository checkout, python benchmarks/overhead_test.py measures overhead in your environment.
python -m pip install "waitless==1.0.3"Read the original synchronization guide for the reasoning behind the wrapper.

