Posted about 1 month 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.

Copy
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:

Copy
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).

By refactoring problematic code and creating automated tests, makandra can vastly improve the maintainability of your Rails application.

Owner of this card:

Avatar
Dominik Schöler
Last edit:
about 1 month 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 cookies to improve usability and analyze traffic.
Accept or learn more