Skip to main content

Waitless 1.0.3: Better Stability Signals, Clearer Limits

The latest Waitless release fixes signal accounting and clarifies what page stability can tell a Selenium test.

3 min read
Waitless 1.0.3: Better Stability Signals, Clearer Limits
On this page

Release checked September 5, 2026
This article now reflects v1.0.3 and the documented behavior of that project. Existing URLs are preserved so older links continue to work.

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

ModeMandatory checks
normal (default)DOM and network thresholds
strictDOM, network, animation, and layout checks
relaxedDOM activity only

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.

python
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.

bash
python -m waitless doctor --file diagnostics.json

Measure 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.

bash
python -m pip install "waitless==1.0.3"

Read the original synchronization guide for the reasoning behind the wrapper.

Current project documentation

Dhiraj Das

About the Author

Dhiraj Das is an Automation Consultant with over a decade of experience building systems that expose failures, reduce flakiness, and make complex workflows repeatable. He applies that discipline to AI-agent validation, LLM testing, and postmortems.

He shares small open source utilities from real automation work, including: waitless (flaky tests), sb-stealth-wrapper (bot detection), selenium-teleport (state persistence), selenium-chatbot-test (AI chatbot testing), lumos-shadowdom (Shadow DOM), and visual-guard (visual regression).

Share this article: