Skip to content

Instantly share code, notes, and snippets.

@vicmaster
Forked from WaKeMaTTa/capybara_cheat_sheet.md
Created November 29, 2016 23:47
Show Gist options
  • Save vicmaster/b0bc1c3b83dc1d702e11374d09f51347 to your computer and use it in GitHub Desktop.
Save vicmaster/b0bc1c3b83dc1d702e11374d09f51347 to your computer and use it in GitHub Desktop.
Capybara - Cheat Sheet

Navigating

visit("/projects")
visit(post_comments_path(post))

Clicking links and buttons

click_link("id-of-link")
click_link("Link Text")
click_button("Save")
click("Link Text") # Click either a link or a button
click("Button Value")

Interacting with forms

fill_in("First Name", with: "John")
fill_in("Password", with: "Seekrit")
fill_in("Description", with: "Really Long Text...")
choose("A Radio Button")
check("A Checkbox")
uncheck("A Checkbox")
attach_file("Image", "/path/to/image.jpg")
select("Option", from: "Select Box")

Scoping

within("//li[@id='employee']") do
  fill_in("Name", with: "Jimmy")
end
within(:css, "li#employee") do
  fill_in("Name", with: "Jimmy")
end
within_fieldset("Employee") do
  fill_in("Name", with: "Jimmy")
end
within_table("Employee") do
  fill_in("Name", with: "Jimmy")
end

Querying

page.has_xpath?("//table/tr")
page.has_css?("table tr.foo")
page.has_content?("foo")
page.should have_xpath("//table/tr")
page.should have_css("table tr.foo")
page.should have_content("foo")
page.should have_no_content("foo")
find_field("First Name").value
find_link("Hello").visible?
find_button("Send").click
find("//table/tr").click
locate("//*[@id='overlay'").find("//h1").click
all("a").each { |a| a[:href] }

Scripting

result = page.evaluate_script("4 + 4");

Debugging

save_and_open_page

Asynchronous JavaScript

click_link("foo")
click_link("bar")
page.should have_content("baz")
page.should_not have_xpath("//a")
page.should have_no_xpath("//a")

XPath and CSS

within(:css, "ul li") { ... }
find(:css, "ul li").text
locate(:css, "input#name").value
Capybara.default_selector = :css
within("ul li") { ... }
find("ul li").text
locate("input#name").value
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment