3.5.1 / August 4, 2018
|Type||Behavior driven development framework / Test tool|
Capybara is a web-based test automation software that simulates scenarios for user stories and automates web application testing for behavior-driven software development. It is a part of the Cucumber testing framework written in the Ruby programming language that simulates various aspects of a web browser from the perspective of a real user.
Background and Motivation
In the course of the software development process especially in the Agile and Test-driven Development environments, as the size of the tests increase, it becomes difficult to manage tests which are complex and not modular.
By extending the human-readable behavior-driven development style of frameworks such as Cucumber and RSpec into the automation code itself, Capybara aims to develop simple web-based automated tests.
Anatomy of Capybara
Capybara is a library/gem built to be used on top of an underlying web-based driver. It offers a user-friendly DSL (Domain Specific Language) which is used to describe actions that are executed by the underlying web driver.
When the page is loaded using the DSL (and underlying web driver), Capybara will try to locate the relevant element in the DOM (Document Object Model) and execute the action, such as click button, link, etc.
By default, Capybara uses the
Written in Ruby, Capybara's default driver RackTest does not require a server to be started since it directly interacts with Rack interfaces. Consequently, it can only be used for Rack applications.
Capybara finds an element either using Domain-specific language or XPath/CSS Selectors. Partial matches can lead to unexpected results. Two or more matches can even result in a failure with an Ambiguous match error. The following are the matching strategies supported by Capybara:
first: Pick the first element which matches. Not advisable to use.
one: Allow only one element match. Error raised if more than one match.
smart: If Capybara.exact is true, it behaves like the above option (one). If Capybara.exact is false, it will first try to find an exact match. Ambiguous exception is raised if more than one match is found. If no element is found, a new search for inexact matches is commenced. Again, an ambiguous exception is raised if more than one match is found.
prefer_exact: Finds all matching (exact and which are not exact) elements. If multiple matches are found then the first exactly matching element is returned discarding other matches.
Here is an example of how user registration test is done using Capybara. There is a test to see if the user can continue with the registration process or if there are any holds on him. If he has the requisite credentials, he will be registered and then redirected to the 'Welcome' page.
describe 'UserRegistration' do it 'allows a user to register' do visit new_user_registration_path fill_in 'First name', :with => 'New' fill_in 'Last name', :with => 'User' fill_in 'Email', :with => 'email@example.com' fill_in 'Password', :with => 'userpassword' fill_in 'Password Confirmation', :with => 'userpassword' click_button 'Register' page.should have_content 'Welcome' end end
Capybara with Cucumber
An example of a Capybara feature used with Cucumber:
When /^I want to add/ do fill_in 'a', :with => 100 fill_in 'b', :with => 100 click_button 'Add' end
Capybara with RSpec
describe 'go to home page' do it 'opens the home page' do visit (get_homepage) expect(page).to have_content('Welcome') end end
- Acceptance testing
- Acceptance test-driven development
- Behavior-driven development
- Test automation
- List of web testing tools
- Regression testing
- "Releases - teamcapybara/capybara". Retrieved 9 August 2018 – via GitHub.
- Engineering Software as a Service: An Agile Approach Using Cloud Computing. ISBN 9780984881246.
- Application Testing with Capybara. ISBN 9781783281268.
- "The Basics of Capybara and Improving Your Tests". SitePoint. Retrieved 2016-02-08.
- "Integration testing Devise with RSpec and Capybara". garyrafferty.com. Retrieved 2016-02-16.
- Liss, Jo. "Capybara (and Selenium) with RSpec & Rails 3: quick tutorial". www.opinionatedprogrammer.com. Retrieved 2016-02-08.