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?
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"
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
.
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")
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?
}