forked from cucumber/cucumber-rails
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathselect_dates_and_times.rb
42 lines (35 loc) · 1.56 KB
/
select_dates_and_times.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module Cucumber
module Rails
module Capybara
# This module defines methods for selecting dates and times
module SelectDatesAndTimes
# Select a Rails date. Options hash must include from: +label+
def select_date(date, options)
date = Date.parse(date)
base_dom_id = get_base_dom_id_from_label_tag(options[:from])
find(:xpath, ".//select[@id='#{base_dom_id}_1i']").select(date.year.to_s)
find(:xpath, ".//select[@id='#{base_dom_id}_2i']").select(I18n.l date, format: '%B')
find(:xpath, ".//select[@id='#{base_dom_id}_3i']").select(date.day.to_s)
end
# Select a Rails time. Options hash must include from: +label+
def select_time(time, options)
time = Time.zone.parse(time)
base_dom_id = get_base_dom_id_from_label_tag(options[:from])
find(:xpath, ".//select[@id='#{base_dom_id}_4i']").select(time.hour.to_s.rjust(2, '0'))
find(:xpath, ".//select[@id='#{base_dom_id}_5i']").select(time.min.to_s.rjust(2, '0'))
end
# Select a Rails datetime. Options hash must include from: +label+
def select_datetime(datetime, options)
select_date(datetime, options)
select_time(datetime, options)
end
private
# @example "event_starts_at_"
def get_base_dom_id_from_label_tag(field)
find(:xpath, ".//label[contains(., '#{field}')]")['for'].gsub(/(_[1-5]i)$/, '')
end
end
end
end
end
World(::Cucumber::Rails::Capybara::SelectDatesAndTimes)