VLearnVibium

Waiting and Actionability in Vibium

How Vibium auto-waits for elements with actionability checks. Learn the visible, stable, receives-events, and enabled gates before every action.

By Pramod Dutta··3 min read·Verified with Vibium 26.2
▶ Animated overview · made with Remotion

Vibium auto-waits before every interaction, so you rarely write explicit waits. Before it clicks, types, or fills, Vibium checks that the element is actionable — visible, stable, receiving events, and enabled — and polls until those conditions hold or a timeout is reached.

Do I need to add waits in Vibium?

In most cases, no. Vibium handles waiting inside its Go engine, so a single line like the one below already waits for the element to become clickable before acting.

from vibium import browser_sync as browser
 
vibe = browser.launch()
vibe.go("https://example.com")
 
# Vibium waits until the link is actionable, then clicks
vibe.find("a").click()
 
vibe.quit()

This is why Vibium code stays so short: there is no wait_for_element call to sprinkle before each action. The waiting is built into find() and the interaction methods themselves.

What does "actionable" mean?

Actionability is a set of conditions an element must satisfy before Vibium interacts with it. The core checks are:

  • Visible — the element has a non-zero size and is not hidden with display: none or visibility: hidden.
  • Stable — its bounding box has stopped moving, so animations and layout shifts have settled.
  • Receives events — a hit-test at the element's center returns the element itself (or one of its descendants), not an overlay covering it.
  • Enabled — the element is not disabled, aria-disabled, or inside a disabled <fieldset>.
  • Editable — only checked for fill-style actions; the field must accept input and not be read-only.

Different actions require different subsets. A click needs visible, stable, receives-events, and enabled. A fill needs visible, enabled, and editable. Vibium also scrolls the element into view before running these checks, so off-screen elements get a fair chance to pass.

How long does Vibium wait?

Vibium polls for actionability with a default timeout of 30 seconds. It re-checks the element repeatedly, and if every required condition passes, the action proceeds. If the element never becomes actionable within the window, the action raises a timeout error instead of silently doing nothing.

# Times out after the default window if #submit never becomes clickable
vibe.find("#submit").click()

That explicit failure is a feature: a clear timeout points you at the real problem — a hidden element, a disabled control, or an overlay — rather than producing a confusing no-op.

When should I still wait manually?

The main reason to think about waiting is when an element stays unactionable for a legitimate reason, such as a cookie banner or modal sitting on top of your target. The fix is to act on the blocker first, then on your element, rather than adding arbitrary delays.

# Dismiss the overlay first, then the real target becomes actionable
vibe.find(role="button", text="Accept").click()
vibe.find("#start-checkout").click()

Because Vibium already waits internally, adding time.sleep() usually just slows your script down and hides the actual cause. Lean on actionability instead.

Next steps

Frequently asked questions

Do I need to add waits in Vibium?

Usually not. Vibium auto-waits before every interaction by running actionability checks and polling until they pass or the timeout is reached. A plain find().click() already waits for the element to be ready, so explicit sleeps and wait-for loops are rarely needed.

What is actionability in Vibium?

Actionability is a set of conditions an element must meet before Vibium acts on it: visible, stable position, receiving pointer events, and enabled. Editable is also checked for fill actions. If any required condition fails, Vibium keeps polling instead of acting on an unready element.

What is Vibium's default wait timeout?

Vibium polls for actionability with a default timeout of 30 seconds. If an element never becomes actionable in that window, the action raises a timeout error rather than silently doing nothing, which makes the real cause of a failure easier to spot.

Vibium is created by Jason Huggins. This is an independent tutorial — see the official Vibium site and GitHub repo for canonical docs.

Related guides