3 category: Ruby libraries
14 ### Clicking links and buttons
22 ### Interacting with forms
25 attach_file 'Image', '/path/to/image.jpg'
26 fill_in 'First Name', with: 'John'
35 choose 'A radio button'
39 select 'Option', from: 'Select box'
46 within '.classname' do
52 within_fieldset :id do
62 page.has_css?('.button')
63 expect(page).to have_css('.button')
64 page.should have_css('.button')
68 | Positive | Negative |
70 | `has_content?` | `has_no_content?` |
72 | `has_css?` _(selector)_ | `has_no_css?` |
74 | `has_xpath?` _(path)_ | `has_no_xpath?` |
76 | `has_link?` _(selector)_ | `has_no_link?` |
78 | `has_button?` _(selector)_ | `has_no_button?` |
80 | `has_field?` _(selector)_ | `has_no_field?` |
82 | `has_checked_field?` _(selector)_ | `has_unchecked_field?` |
84 | `has_table?` _(selector)_ | `has_no_table?` |
86 | `has_select?` _(selector)_ | `has_no_select?` |
87 {: .-headers.-left-align}
89 In Rspec, these also map to matchers like `page.should have_content`.
94 expect(page).to have_button('Save')
98 expect(page).to have_button('#submit')
102 expect(page).to have_button('//[@id="submit"]')
105 The `selector` arguments can be text, CSS selector, or XPath expression.
110 page.has_button?('Save')
114 expect(page).to have_no_button('Save')
117 In RSpec, you can use `page.should` assertions.
122 expect(page).to have_no_button('Save') # OK
125 expect(page).not_to have_button('Save') # Bad
128 Use `should have_no_*` versions with RSpec matchers because
129 `should_not have_*` doesn't wait for a timeout from the driver.
141 have_selector '.blank-state'
142 have_selector 'h1#hola', text: 'Welcome'
144 have_checked_field '#field'
153 have_link 'Logout', href: logout_path
157 have_select 'Language',
159 options: ['Engish', 'German']
160 with_options: ['Engish', 'German'] # partial match
165 type: :visible # or :all
166 # alias: have_content
171 All matchers have these options:
191 find_button(selector)
201 within '#delivery' do
202 fill_in 'Street', with: 'Hello'
207 within :xpath, '//article'
215 find('#x').fill_in('Street', with: 'Hello')
222 execute_script('$("input").trigger("change")')
223 evaluate_script('window.ga')
234 Opens the webpage in your browser.
252 using_wait_time 10 do
265 page.status_code == 200
266 page.response_headers
269 See: <http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Session>
274 Capybara.register_driver :poltergeist do |app|
275 Capybara::Poltergeist::Driver.new(app, :inspector => true)
277 Capybara.javascript_driver = :poltergeist
280 Use [poltergeist](https://github.com/teampoltergeist/poltergeist) to integrate PhantomJS.
285 config.before :each, :js do
286 page.driver.browser.url_blacklist = [
287 'fonts.googleapis.com',
291 'www.googletagmanager.com'
292 ].flat_map { |domain| [ "http://#{domain}", "https://#{domain}" ] }
298 Enable `inspector: true` and then:
305 To pause execution for a while:
313 ### Accepting confirm() and alert()
317 dismiss_confirm { ... }
318 accept_prompt(with: 'hi') { ... }
324 page.driver.browser.switch_to.alert.accept
330 page.set_rack_session(foo: 'bar')
336 - <http://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers>
337 - <http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers>