Module: Capybara::Node::Actions

Included in:
Base
Defined in:
lib/capybara/node/actions.rb

Instance Method Summary collapse

Instance Method Details

#attach_file(locator, path, options = {}) ⇒ Object

Find a file field on the page and attach a file given its path. The file field can be found via its name, id or label text.

page.attach_file(locator, '/path/to/file.png')

Parameters:

  • locator (String)

    Which field to attach the file to

  • path (String)

    The path of the file that will be attached, or an array of paths

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • match (Symbol) — default: Capybara.match

    The matching strategy to use (:one, :first, :prefer_exact, :smart).

  • exact (Boolean) — default: Capybara.exact

    Match the exact label name/contents or accept a partial match.

  • wait (Fixnum) — default: Capybara.default_max_wait_time

    If using a Javascript driver, maximum number of seconds during which the element will be searched for.

  • multiple (Boolean)

    Match field which allows multiple file selection



159
160
161
162
163
164
# File 'lib/capybara/node/actions.rb', line 159

def attach_file(locator, path, options={})
  Array(path).each do |p|
    raise Capybara::FileNotFound, "cannot attach file, #{p} does not exist" unless File.exist?(p.to_s)
  end
  find(:file_field, locator, options).set(path)
end

#check(locator, options = {}) ⇒ Object

Find a check box and mark it as checked. The check box can be found via name, id or label text.

page.check('German')

Parameters:

  • locator (String)

    Which check box to check



84
85
86
# File 'lib/capybara/node/actions.rb', line 84

def check(locator, options={})
  find(:checkbox, locator, options).set(true)
end

#choose(locator, options = {}) ⇒ Object

Find a radio button and mark it as checked. The radio button can be found via name, id or label text.

page.choose('Male')

Parameters:

  • locator (String)

    Which radio button to choose



71
72
73
# File 'lib/capybara/node/actions.rb', line 71

def choose(locator, options={})
  find(:radio_button, locator, options).set(true)
end

#click_button(locator, options = {}) ⇒ Object

Finds a button on the page and clicks it. This can be any <input> element of type submit, reset, image, button or it can be a <button> element. All buttons can be found by their id, value, or title. <button> elements can also be found by their text content, and image <input> elements by their alt attribute

Parameters:

  • locator (String)

    Which button to find

  • options (defaults to: {})


39
40
41
# File 'lib/capybara/node/actions.rb', line 39

def click_button(locator, options={})
  find(:button, locator, options).click
end

Finds a link by id, text or title and clicks it. Also looks at image alt text inside the link.

Parameters:

  • locator (String)

    text, id, title or nested image’s alt attribute

  • options (defaults to: {})


26
27
28
# File 'lib/capybara/node/actions.rb', line 26

def click_link(locator, options={})
  find(:link, locator, options).click
end

Finds a button or link by id, text or value and clicks it. Also looks at image alt text inside the link.

Parameters:

  • locator (String)

    Text, id or value of link or button



13
14
15
# File 'lib/capybara/node/actions.rb', line 13

def click_link_or_button(locator, options={})
  find(:link_or_button, locator, options).click
end

#fill_in(locator, options = {}) ⇒ Object

Locate a text field or text area and fill it in with the given text The field can be found via its name, id or label text.

page.fill_in 'Name', :with => 'Bob'

Parameters:

  • locator (String)

    Which field to fill in

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :with (String)

    The value to fill in - required

  • :fill_options (Hash)

    Driver specific options regarding how to fill fields



55
56
57
58
59
60
# File 'lib/capybara/node/actions.rb', line 55

def fill_in(locator, options={})
  raise "Must pass a hash containing 'with'" if not options.is_a?(Hash) or not options.has_key?(:with)
  with = options.delete(:with)
  fill_options = options.delete(:fill_options)
  find(:fillable_field, locator, options).set(with, fill_options)
end

#select(value, options = {}) ⇒ Object

If ‘:from` option is present, `select` finds a select box on the page and selects a particular option from it. Otherwise it finds an option inside current scope and selects it. If the select box is a multiple select, select can be called multiple times to select more than one option. The select box can be found via its name, id or label text. The option can be found by its text.

page.select 'March', :from => 'Month'

Parameters:

  • value (String)

    Which option to select

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :from (String)

    The id, name or label of the select box



115
116
117
118
119
120
121
122
# File 'lib/capybara/node/actions.rb', line 115

def select(value, options={})
  if options.has_key?(:from)
    from = options.delete(:from)
    find(:select, from, options).find(:option, value, options).select_option
  else
    find(:option, value, options).select_option
  end
end

#uncheck(locator, options = {}) ⇒ Object

Find a check box and mark uncheck it. The check box can be found via name, id or label text.

page.uncheck('German')

Parameters:

  • locator (String)

    Which check box to uncheck



97
98
99
# File 'lib/capybara/node/actions.rb', line 97

def uncheck(locator, options={})
  find(:checkbox, locator, options).set(false)
end

#unselect(value, options = {}) ⇒ Object

Find a select box on the page and unselect a particular option from it. If the select box is a multiple select, unselect can be called multiple times to unselect more than one option. The select box can be found via its name, id or label text.

page.unselect 'March', :from => 'Month'

Parameters:

  • value (String)

    Which option to unselect

  • options (Hash{:from => String}) (defaults to: {})

    The id, name or label of the select box



135
136
137
138
139
140
141
142
# File 'lib/capybara/node/actions.rb', line 135

def unselect(value, options={})
  if options.has_key?(:from)
    from = options.delete(:from)
    find(:select, from, options).find(:option, value, options).unselect_option
  else
    find(:option, value, options).unselect_option
  end
end