1
0
Fork 0
mirror of https://github.com/teamcapybara/capybara.git synced 2022-11-09 12:08:07 -05:00

Implementation for issue #1319 - propagate fill_in options to Element#set

This commit is contained in:
Thomas Walpole 2014-06-18 16:36:11 -07:00
parent 6ba0c70ade
commit 2ce36695eb
3 changed files with 24 additions and 5 deletions

View file

@ -25,7 +25,8 @@ module Capybara
end end
# @param value String or Array. Array is only allowed if node has 'multiple' attribute # @param value String or Array. Array is only allowed if node has 'multiple' attribute
def set(value) # @param options [Hash{}] Driver specific options for how to set a value on a node
def set(value, options={})
raise NotImplementedError raise NotImplementedError
end end

View file

@ -45,12 +45,15 @@ module Capybara
# page.fill_in 'Name', :with => 'Bob' # page.fill_in 'Name', :with => 'Bob'
# #
# @param [String] locator Which field to fill in # @param [String] locator Which field to fill in
# @param [Hash{:with => String}] options The value to fill in # @param [Hash] options
# @option options [String] :with The value to fill in - required
# @option options [Hash] :fill_options Driver specific options regarding how to fill fields
# #
def fill_in(locator, options={}) def fill_in(locator, options={})
raise "Must pass a hash containing 'with'" if not options.is_a?(Hash) or not options.has_key?(:with) raise "Must pass a hash containing 'with'" if not options.is_a?(Hash) or not options.has_key?(:with)
with = options.delete(:with) with = options.delete(:with)
find(:fillable_field, locator, options).set(with) fill_options = options.delete(:fill_options)
find(:fillable_field, locator, options).set(with, fill_options)
end end
## ##

View file

@ -89,9 +89,24 @@ module Capybara
# Set the value of the form element to the given value. # Set the value of the form element to the given value.
# #
# @param [String] value The new value # @param [String] value The new value
# @param [Hash{}] options Driver specific options for how to set the value
# #
def set(value) def set(value, options={})
synchronize { base.set(value) } options ||= {}
driver_supports_options = (base.method(:set).arity != 1)
unless options.empty? || driver_supports_options
warn "Options passed to Capybara::Node#set but the driver doesn't support them"
end
synchronize do
if driver_supports_options
base.set(value, options)
else
base.set(value)
end
end
end end
## ##