class BootstrapDatepickerSpec::DatePicker
Public Class Methods
new(node)
click to toggle source
Calls superclass method
# File lib/bootstrap_datepicker_spec.rb, line 8 def initialize(node) @node = super(node) expected_class = Capybara::Node::Element unless @node.is_a? expected_class raise "Expecting node of type: #{expected_class}, but received node of type #{@node.class} " end end
Public Instance Methods
date_string()
click to toggle source
# File lib/bootstrap_datepicker_spec.rb, line 75 def date_string @node[:value] end
select_date(value_string)
click to toggle source
# File lib/bootstrap_datepicker_spec.rb, line 17 def select_date(value_string) value = Date.parse(value_string) @node.click rescue @node.trigger("click") page = @node.send(:session) # bootstrap-datepicker appends the container to the end of the body tag picker = page.within(:xpath, "//body") do # break out of any `within` page.all('body > div.datepicker').last end picker_years = picker.find('.datepicker-years', visible: false) picker_months = picker.find('.datepicker-months', visible: false) picker_days = picker.find('.datepicker-days', visible: false) picker_current_decade = picker_years.find('th.datepicker-switch', visible: false) picker_current_year = picker_months.find('th.datepicker-switch', visible: false) picker_current_month = picker_days.find('th.datepicker-switch', visible: false) if picker_days.visible? picker_current_month.click rescue picker_current_month.trigger("click") end if picker_months.visible? picker_current_year.click rescue picker_current_year.trigger("click") end decade_start, decade_end = picker_current_decade.text.split('-').map(&:to_i) if value.year < decade_start.to_i gap = decade_start / 10 - value.year / 10 gap.times do th_prev = picker_years.find('th.prev') th_prev.click rescue th_prev.trigger("click") end elsif value.year > decade_end gap = value.year / 10 - decade_end / 10 gap.times do th_next = picker_years.find('th.next') th_next.click rescue th_next.trigger("click") end end year_el = picker_years.find('.year', text: value.year) year_el.click rescue year_el.trigger("click") month_el = picker_months.find('.month', text: value.strftime('%b')) month_el.click rescue month_eltrigger("click") day_xpath = <<-eos .//*[contains(concat(' ', @class, ' '), ' day ') and not(contains(concat(' ', @class, ' '), ' old ')) and not(contains(concat(' ', @class, ' '), ' new ')) and normalize-space(text())='#{value.day}'] eos picker_day = picker_days.find(:xpath, day_xpath) picker_day.click rescue picker_day.trigger("click") # fail unless page.has_no_css? '.datepicker' end