Posted over 1 year ago. Visible to the public. Repeats.

Capybara: Quick checking for element presence (without retries or timeout)

Element finding is a central feature of Capybara. Since #find is normally used to get elements from the current page and interact with them, it's a good thing that some Capybara drivers (e.g. Selenium) will wait an amount of time until the expected element shows up. But if Capybara cannot #find it at all, you'll get an error.

if page.find('.that-element') # Do something else # Never happens because #find raises end

In order to simply check whether an element is present, without errors raised, you can use #has_css?. It will return a Boolean – but will wait as well. If the element does not exist, it will take the configured Capybara.default_wait_time for this check to return false, which is usually several seconds.

The solution is to disable the waiting for just that check:

if page.has_css?('.that-element', wait: 0) # Do something else # Do something else end

Note the wait: 0 argument. Actually there is a host of options worth knowing (scroll down to the "Options Hash" section).

Does your version of Ruby on Rails still receive security updates?
Rails LTS provides security patches for old versions of Ruby on Rails (3.2 and 2.3).

Owner of this card:

Dominik Schöler
Last edit:
over 1 year ago
by Dominik Schöler
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Dominik Schöler to makandra dev
This website uses short-lived cookies to improve usability.
Accept or learn more