Sto provando a creare un selettore di data con Capybara utilizzando i campi predefiniti di data, ora e data/ora. Sto usando il metodo within
per trovare le caselle di selezione per il campo, ma quando uso xPath per trovare la casella corretta lascia l'ambito within
e trova la prima occorrenza sulla pagina dell'elemento.capybara - Trova con xPath sta rientrando nell'ambito di applicazione
Ecco il codice che sto usando. La pagina su cui sto eseguendo il test ha 2 campi datetime ma posso solo farlo cambiare prima a causa di questo errore. Al momento ho un contenitore div con id che avvolge il campo datetime, ma ho intenzione di cambiare il codice per trovare l'etichetta.
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)