web-dev-qa-db-fra.com

Comment puis-je vérifier qu'un champ de formulaire est pré-rempli correctement à l'aide de capybara?

J'ai un champ avec une étiquette appropriée que je peux remplir avec capybara sans problème:

fill_in 'Your name', with: 'John'

Je voudrais vérifier la valeur qu'il a avant de le remplir et ne peut pas le comprendre.

Si j'ajoute après le fill_in la ligne suivante:

find_field('Your name').should have_content('John')

Ce test échoue, bien que le remplissage juste avant fonctionne comme j'ai vérifié en enregistrant la page.

Qu'est-ce que je rate?

134

Vous pouvez utiliser une requête xpath pour vérifier s'il existe un élément input avec une valeur particulière (par exemple, 'John'):

expect(page).to have_xpath("//input[@value='John']")

Voir http://www.w3schools.com/xpath/xpath_syntax.asp pour plus d'informations.

Pour une façon peut-être plus jolie:

expect(find_field('Your name').value).to eq 'John'

EDIT: De nos jours, j'utiliserais probablement have_selector

expect(page).to have_selector("input[value='John']")

Si vous utilisez le modèle d'objet de page (vous devriez l'être!)

class MyPage < SitePrism::Page
  element :my_field, "input#my_id"

  def has_secret_value?(value)
    my_field.value == value
  end
end

my_page = MyPage.new

expect(my_page).to have_secret_value "foo"
169
DVG

Une autre jolie solution serait:

page.should have_field('Your name', with: 'John')

ou

expect(page).to have_field('Your name', with: 'John')

respectivement.

Voir aussi le référence .

Note: pour les entrées désactivées, vous devrez ajouter l'option disabled: true.

275
fqxp

Si vous souhaitez spécifiquement tester un espace réservé, utilisez:

page.should have_field("some_field_name", placeholder: "Some Placeholder")

ou:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")

Si vous souhaitez tester la valeur entrée par l'utilisateur:

page.should have_field("some_field_name", with: "Some Entered Value")
1
Jim Stewart

Je me demandais comment faire quelque chose de légèrement différent: je voulais vérifier si le champ avait une valeur une valeur (en utilisant la capacité de Capybara à tester à nouveau le matcher jusqu'à ce qu'il corresponde à ). Il s'avère qu'il est possible d'utiliser un "bloc de filtre" pour faire ceci:

expect(page).to have_field("field_name") { |field|
  field.value.present?
}
0
jonleighton