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
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le chemin xpath que vous voulez commencer avec le nœud courant par l'ajout d'un
.
le début:Exemple:
J'ai testé une page HTML de cet (j'espère ne pas sur la simplification de votre page):
À l'aide de la dans les méthodes, vous pouvez voir votre problème quand vous faites cela:
Mais vous pouvez le voir, mais en spécifiant le chemin xpath de regarder à l'intérieur du noeud courant (c'est à dire à l'aide de
.
), vous obtenez les résultats que vous voulez:OriginalL'auteur Justin Ko