Add support for setting date, time, and datetime-local inputs
This commit is contained in:
parent
8e735d68a0
commit
1750932349
|
@ -1,6 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Capybara::Selenium::Node < Capybara::Driver::Node
|
||||
SET_FORMATS = Hash.new(date: '%Y-%m-%d', time: '%H:%M', datetime: "%m%d%Y\t%I%M%P").merge(
|
||||
firefox: {
|
||||
date: '%Y-%m-%d',
|
||||
time: '%H:%M',
|
||||
datetime: "%m%d%Y\t%I%M%P"
|
||||
},
|
||||
chrome: {
|
||||
date: '%m%d%Y',
|
||||
time: '%I%M%P',
|
||||
datetime: "%m%d%Y\t%I%M%P"
|
||||
}
|
||||
)
|
||||
|
||||
def visible_text
|
||||
# Selenium doesn't normalize Unicode whitespace.
|
||||
Capybara::Helpers.normalize_whitespace(native.text)
|
||||
|
@ -48,6 +61,12 @@ class Capybara::Selenium::Node < Capybara::Driver::Node
|
|||
click if value ^ checked?
|
||||
when 'file'
|
||||
set_file(value)
|
||||
when 'date'
|
||||
set_date(value)
|
||||
when 'time'
|
||||
set_time(value)
|
||||
when 'datetime-local'
|
||||
set_datetime_local(value)
|
||||
else
|
||||
set_text(value, options)
|
||||
end
|
||||
|
@ -231,6 +250,30 @@ private
|
|||
yield
|
||||
end
|
||||
|
||||
def set_date(value) # rubocop:disable Naming/AccessorMethodName
|
||||
if value.respond_to?(:to_date)
|
||||
set_text(value.to_date.strftime(SET_FORMATS[driver.options[:browser].to_sym][:date]))
|
||||
else
|
||||
set_text(value)
|
||||
end
|
||||
end
|
||||
|
||||
def set_time(value) # rubocop:disable Naming/AccessorMethodName
|
||||
if value.respond_to?(:to_time)
|
||||
set_text(value.to_time.strftime(SET_FORMATS[driver.options[:browser].to_sym][:time]))
|
||||
else
|
||||
set_text(value)
|
||||
end
|
||||
end
|
||||
|
||||
def set_datetime_local(value) # rubocop:disable Naming/AccessorMethodName
|
||||
if value.respond_to?(:to_time)
|
||||
set_text(value.to_time.strftime(SET_FORMATS[driver.options[:browser].to_sym][:datetime]))
|
||||
else
|
||||
set_text(value)
|
||||
end
|
||||
end
|
||||
|
||||
def set_file(value) # rubocop:disable Naming/AccessorMethodName
|
||||
path_names = value.to_s.empty? ? [] : value
|
||||
if driver.chrome?
|
||||
|
|
|
@ -53,6 +53,30 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|||
expect(extract_results(@session)['password']).to eq('supasikrit')
|
||||
end
|
||||
|
||||
context "Date/Time" do
|
||||
it "should fill in a date input" do
|
||||
date = Date.today
|
||||
@session.fill_in('form_date', with: date)
|
||||
@session.click_button('awesome')
|
||||
expect(Date.parse(extract_results(@session)['date'])).to eq date
|
||||
end
|
||||
|
||||
it "should fill in a time input" do
|
||||
time = Time.new(2018, 3, 9, 15, 26)
|
||||
@session.fill_in('form_time', with: time)
|
||||
@session.click_button('awesome')
|
||||
results = extract_results(@session)['time']
|
||||
expect(Time.parse(results).strftime('%r')).to eq time.strftime('%r')
|
||||
end
|
||||
|
||||
it "should fill in a datetime input" do
|
||||
dt = Time.new(2018, 3, 13, 9, 53)
|
||||
@session.fill_in('form_datetime', with: dt)
|
||||
@session.click_button('awesome')
|
||||
expect(Time.parse(extract_results(@session)['datetime'])).to eq dt
|
||||
end
|
||||
end
|
||||
|
||||
it "should handle HTML in a textarea" do
|
||||
@session.fill_in('form_description', with: 'is <strong>very</strong> secret!')
|
||||
@session.click_button('awesome')
|
||||
|
|
|
@ -426,6 +426,12 @@ New line after and before textarea tag
|
|||
<input type="button" disabled="disabled" value="Disabled button"/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<input type="date" name="form[date]" id="form_date"/>
|
||||
<input type="time" name="form[time]" id="form_time"/>
|
||||
<input type="datetime-local" name="form[datetime]" id="form_datetime">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<input id="readonly" name="form[readonly_test]" readonly/>
|
||||
<input id="not_readonly" name="form[readonly_test]" />
|
||||
|
|
Loading…
Reference in New Issue