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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top