J'utilise Rspec et Capybara.
Comment puis-je écrire une étape pour vérifier une checkbox
? J'ai essayé check
par valeur mais il ne trouve pas ma checkbox
. Je ne sais pas quoi faire, car j'ai en fait le même identifiant avec des valeurs différentes
Voici le code:
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">
J'ai trouvé ce qui suit a fonctionné pour moi:
# Check
find(:css, "#cityID[value='62']").set(true)
# Uncheck
find(:css, "#cityID[value='62']").set(false)
Il est préférable de ne pas créer plusieurs éléments avec le même id, afin que (et pas seulement pour cela), vous puissiez facilement cocher/décocher une checkbox avec élégance
check 'cityID'
uncheck 'cityID'
Si on ne peut pas éviter plusieurs éléments avec le même identifiant et qu'il faut quand même cocher une case avec une certaine valeur, il peut le faire avec
find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)
Plus d'informations sur les manipulations d'entrée capybara peuvent être trouvées ici
Lors de l'exécution du test capybara, vous avez obtenu l'objet page
. Vous pouvez utiliser cette option pour cocher/décocher les cases. Comme @buruzaemon l'a déjà mentionné:
pour rechercher et cocher une case à cocher par nom, identifiant ou libellé.
Supposons donc que vous ayez une case à cocher dans votre code HTML, comme:
<label>
<input type="checkbox" value="myvalue" name="myname" id="myid">
MyLabel
</label>
Vous pouvez vérifier ceci avec:
page.check('myid')
page.check('MyLabel')
page.check('myname')
Décocher est identique, utilisez simplement la méthode page.uncheck
.
Je pense que vous devrez peut-être donner tout d'abord une id
s unique à vos éléments de formulaire .
Mais en ce qui concerne Capybara et les cases à cocher, la méthode d'instance de vérification Capybara :: Node :: Actions # vous permettra de rechercher et de vérifier une case à cocher par nom, identifiant ou libellé.
Je sais que c’est une question plus ancienne, mais j’ai travaillé moi-même et, après avoir essayé toutes les solutions ci-dessus, c’est finalement ce qui a fonctionné pour moi:
find("input[type='checkbox'][value='#{cityID.id}']").set(true)
J'espère que cela est utile à quelqu'un. J'utilise Capybara 2.4.4.
vous pouvez également utiliser: xpath au lieu de: css si vous rencontrez des difficultés pour le trouver.
find (: xpath, '//*[@id="example"]').set(true)
sur Chrome (et sûrement sur d'autres navigateurs), vous pouvez "inspecter un élément", puis en cliquant avec le bouton droit de la souris sur l'élément qui vous intéresse, il y a "copier xpath" si vous ne savez pas ce que xpath était, maintenant vous le savez.
Vous pouvez également vérifier que toutes les cases à cocher ne sont pas cochées avec cet exemple.
all ('input [type = checkbox]'). Chaque do | checkbox | checkbox.should_not be_checked end
Un vieux sujet mais une autre solution est:
check('Option 3', allow_label_click: true)
check find(".whenever input")[:id]
Je pense que cela fera attendre capybara à tout écouteur d'événement attaché à cette entrée, ce qui est parfois pénible si elle n'attend pas .... Si cette entrée n'a pas d'identifiant, choisissez une autre propriété (il doit y en avoir une) ...
Si la case est associée à du texte, par exemple 'Option 3', alors à partir de capybara 3.0.3
vous pouvez simplement faire
check 'Option 3'