Capybara: Ruby-Akzeptanztests für Web-Apps
Capybara ist eine Ruby-Bibliothek für Akzeptanztests: Seiten besuchen, Formulare ausfüllen, klicken und prüfen, mit RackTest, Selenium oder Cuprite.
Was ist Capybara?
Capybara ist eine Ruby-Bibliothek für Akzeptanztests von Webanwendungen. Sie bietet eine DSL, um Seiten zu besuchen, Formulare auszufüllen, Links anzuklicken und auf gerenderte Inhalte zu prüfen, und läuft über einen einfachen In-Process-Treiber oder einen echten Browser. Capybara ist kein Test-Runner: Sie nutzen es in RSpec, Minitest oder Cucumber. Rails-Systemtests bauen darauf auf.
Wie Capybara funktioniert
Ihr Test beschreibt, was ein Nutzer tut, und Capybara gibt jeden Schritt an einen Treiber weiter. Der Standardtreiber RackTest ist reines Ruby, braucht keinen Server und unterstützt kein JavaScript, ist also schnell, kann aber keine Skripte ausführen. Für Seiten, die von JavaScript abhängen, wechseln Sie zu einem Browser-Treiber. Capybara.javascript_driver ist standardmäßig :selenium, ein Test nutzt ihn mit dem Tag js: true in RSpec oder @javascript in Cucumber. Cuprite ist ein separates Gem, das Chrome über das Chrome DevTools Protocol steuert und weder Selenium noch ChromeDriver braucht.
Beispiel
require 'rails_helper'
RSpec.describe 'Signup', type: :system do
it 'creates an account' do
visit '/signup'
fill_in 'Email', with: 'alice@example.com'
fill_in 'Password', with: 'secret123'
click_button 'Create account'
expect(page).to have_content 'Welcome, alice'
end
endEin sleep kommt darin nicht vor. Finder und Matcher wie have_content wiederholen sich, bis sie bestehen oder die Wartezeit abläuft, und kehren bei Erfolg sofort zurück. Der Standardwert von Capybara.default_max_wait_time ist 2 Sekunden; erhöhen Sie ihn mit Capybara.default_max_wait_time = 5, wenn eine Seite wirklich langsam ist. Rails-Systemtests nutzen standardmäßig Selenium mit Chrome, mit driven_by wählen Sie einen anderen Treiber.
Häufige Fehler
- Feste Pausen. Sie bremsen die Suite und scheitern bei einem langsamen Lauf trotzdem. Nutzen Sie einen wartenden Matcher statt
sleep. - Negative Prüfungen ohne Warten. Bevorzugen Sie
expect(page).to have_no_content(...)gegenüber!page.has_content?(...), das schon beim ersten Blick aufgibt. - JavaScript von RackTest erwarten. Bewirkt ein Klick nichts, prüfen Sie, ob der Test mit einem JavaScript-Treiber läuft.
- Fragile Selektoren. Bevorzugen Sie Labels und sichtbaren Text statt langer CSS-Pfade, die bei jedem Redesign brechen.
- Unsauberer Datenaufbau. Wettläufe zwischen Browser und App-Server sind eine Hauptquelle für instabile Tests.
Capybara in der Teststrategie
Capybara prüft, ob ein Feature für einen Nutzer im Browser funktioniert. Es ist im Vergleich zu Unit-Tests langsam, setzen Sie es also für die wichtigen Abläufe ein: Registrierung, Checkout, Login. Es eignet sich gut für Regressionstests dieser Abläufe und arbeitet mit dem gerenderten DOM statt mit Ihren Interna. Arbeiten Sie nicht mit Ruby, finden Sie dasselbe Prinzip für Playwright in unserem Playwright-Tutorial.
Wie sich die App mit vielen Nutzern gleichzeitig verhält, sagt es nicht. Dafür führen Sie einen Lasttest für dieselben Abläufe aus.
Häufige Fragen zu Capybara
Ist Capybara ein Test-Framework?
Nein. Es ist eine Bibliothek, um eine Web-App zu steuern, und wird in RSpec, Minitest oder Cucumber genutzt, die Teststruktur und Berichte liefern.
Welche Treiber unterstützt Capybara?
RackTest ist der Standard und kennt kein JavaScript. Selenium steuert echte Browser. Cuprite steuert Chrome über das DevTools Protocol, weitere Treiber wie WebKit gibt es als externe Gems.
Wie lange wartet Capybara?
Standardmäßig 2 Sekunden, einstellbar mit Capybara.default_max_wait_time. Finder und Matcher wiederholen sich in dieser Zeit und kehren bei Erfolg sofort zurück.
Brauche ich Selenium für Capybara?
Nein. RackTest braucht keinen Browser, und Cuprite nutzt Chrome direkt. Selenium ist der Standard-JavaScript-Treiber und wird von Rails-Systemtests genutzt, solange Sie ihn nicht ändern.
Funktioniert Capybara mit Rails?
Ja. Rails-Systemtests bauen auf Capybara auf, den Browser-Treiber wählen Sie mit driven_by im System-Testfall.
Verwandte Begriffe
Verwandte LoadFocus-Tools
Setze dieses Konzept mit LoadFocus in die Praxis um, derselben Plattform, die alles antreibt, was du gerade gelesen hast.