capybara - Trouver avec xPath est de laisser l'intérieur de la portée

Je suis en train de construire un sélecteur de date avec le Capybara à l'aide de la valeur par défaut Rails date, time, datetime et de champs. Je suis l'aide de la within méthode pour trouver les listes de sélection pour le champ, mais lorsque j'utilise xPath pour trouver la bonne boîte, il quitte le within champ d'application et de trouver la première occurrence sur la page de l'élément.

Voici le code que j'utilise. La page que je suis en train de tester sur a 2 champs de type dateheure mais je ne peut obtenir la modification de la première raison de cette erreur. Pour le moment j'ai un conteneur div avec l'id qui enveloppent le champ datetime mais je ne plan sur la manière de changer le code pour trouver de l'étiquette.

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)

OriginalL'auteur Nick | 2012-04-20