web-dev-qa-db-fra.com

Comment cocher une case à cocher dans capybara?

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">
115
John Dow

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)
146
Jon M

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

120
installero

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.

53
p1100i

Je pense que vous devrez peut-être donner tout d'abord une ids 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é.

26
buruzaemon

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.

6
Michael Cruz

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.

1
kulssaka

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

1
user3853159

Un vieux sujet mais une autre solution est:

check('Option 3', allow_label_click: true)

1
Samuel
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'
0
Obromios