Concombre: trouver l'entrée avec le texte de l'étiquette X?
-
08-10-2019 - |
Question
Dans Concombre, je suis en train de créer une étape comme ceci:
Then I should see "Example business name" in the "Business name" input
Je voudrais l'entrée « Nom de l'entreprise » à définir comme « l'entrée dont l'étiquette a le texte « Nom ».
Voici ce que j'ai sur l'étape jusqu'à présent:
Then /^I should see "([^"]*)" in the "([^"]*)" input$/ do |content, labeltext|
# Not sure what to put here
end
Dans jQuery, je voudrais chercher l'étiquette avec ce texte, regardez son « pour » attribut, et trouver l'entrée avec cet identifiant. Mais les seuls sélecteurs que j'ai vu jusqu'à présent dans le concombre sont les suivants:
within("input:nth-child(#{pos.to_i}")
et
page.should have_content('foo')
Quelqu'un peut-il proposer une solution en utilisant la syntaxe du sélecteur Webrat / Capybara?
La solution
figured it out
Vous pouvez trouver une entrée par le texte de l'étiquette en utilisant find_field(labeltext)
.
# Example:
# 'I should see "Howdy" in the "Greeting" input' ("Greeting" is the label text)
Then /^I should see "([^"]*)" in the "([^"]*)" input$/ do |content, labeltext|
find_field("#{labeltext}").value.should == content
end
Autres conseils
Cela fonctionne aussi. La différence ici est qu'il trouve le champ basé sur une correspondance partielle du texte de l'étiquette. Nos champs ont un « : » à la fin d'eux, mais ce n'est pas toujours raison par elle, donc je ne voulais pas correspondre à la valeur entière de l'étiquette ...
When /^i enter "([^"]*)" in the "([^"]*)" field$/i do |value, fieldname|
@thefield = all("label").detect { |l| l.has_content?(fieldname) }
if @thefield.nil? then
raise Exception.new("Couldn't find field #{fieldname}")
end
fill_in @thefield[:for], :with=>value
end
Je veux encore prolonger ce pour être insensible à la casse cependant. Ceci est mon premier jour avec rspec, le concombre et je vraiment ne jamais utiliser Ruby Pardonne donc le code «moins de rubyish / rspec. mais il ne semble travailler.
Mise à jour
Le suivant se trouve le champ en fonction de l'étiquette partielle par un match insensible à la casse. Cela fonctionne comme un charme pour mes besoins.
When= /^i enter "([^"]*)" in the "([^"]*)" field$/i do |value, fieldname|
@thefield = all("label").detect { |l| (l.text =~ /#{fieldname}/i).nil? == false }
if @thefield.nil? then
raise Exception.new("Couldn't find field '#{fieldname}'")
end
fill_in @thefield[:for], :with=>value
end