Varsayılan Rails tarihi, saati ve datetime alanlarını kullanarak Capybara ile bir tarih seçici oluşturmaya çalışıyorum. Alan için seçme kutularını bulmak için within
yöntemini kullanıyorum, ancak doğru kutuyu bulmak için xPath kullandığımda, within
kapsamını terk eder ve öğenin sayfasında ilk yeri bulur.capybara - Bulmak xPath alanı içinde bırakılıyor
Kullandığım kod İşte. Test ettiğim sayfanın 2 datetime alanı var, ancak sadece bu hata nedeniyle ilkini değiştirebiliyorum. Şu anda datetime alanını tamamlayan bir div kapsayıcım var ama etiketle bulmak için kodu değiştirmeyi planlıyorum.
module Marketron
module DateTime
def select_date(field, options = {})
date_parse = Date.parse(options[:with])
year = date_parse.year.to_s
month = date_parse.strftime('%B')
day = date_parse.day.to_s
within("div##{field}") do
find(:xpath, "//select[contains(@id, \"_#{FIELDS[:year]}\")]").select(year)
find(:xpath, "//select[contains(@id, \"_#{FIELDS[:month]}\")]").select(month)
find(:xpath, "//select[contains(@id, \"_#{FIELDS[:day]}\")]").select(day)
end
end
def select_time(field, options = {})
require "time"
time_parse = Time.parse(options[:with])
hour = time_parse.hour.to_s.rjust(2, '0')
minute = time_parse.min.to_s.rjust(2, '0')
within("div##{field}") do
find(:xpath, "//select[contains(@id, \"_#{FIELDS[:hour]}\")]").find(:xpath, "option[contains(@value, '#{hour}')]").select_option
find(:xpath, "//select[contains(@id, \"_#{FIELDS[:minute]}\")]").find(:xpath, "option[contains(@value, '#{minute}')]").select_option
end
end
def select_datetime(field, options = {})
select_date(field, options)
select_time(field, options)
end
private
FIELDS = {year: "1i", month: "2i", day: "3i", hour: "4i", minute: "5i"}
end
end
World(Marketron::DateTime)