Comment sélectionner une option dans la liste déroulante à l'aide de Capybara
Je suis en train de sélectionner un élément dans un menu déroulant à l'aide de Capybara (2.1.0).
Je veux sélectionner par numéro (sens sélectionnez la deuxième, troisième, etc option).
J'ai Googlé comme un fou en essayant toutes sortes de choses, mais pas de chance.
J'ai pu sélectionner à l'aide de la valeur:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
Mais je ne veux pas utiliser cette méthode b/c la valeur est quelque chose qui va changer et que va faire mon test cassants.
Le code HTML de la liste déroulante est:
<td class="value">
<select name="organizationSelect" id="organizationSelect" class="required">
<option value="NULL">Choose...</option>
<option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8"> Institution1</option>
<option value="e1a4efa7-352d-410a-957e-35c8a3b92944"> Institution / test</option>
</select>
</td>
J'ai aussi essayé ceci:
option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text
select(option, :from => organizationSelect)
Mais il en résulte cette erreur:
Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)
Alors, comment puis-je sélectionner la première, deuxième, troisième, etc option dans le menu déroulant (à l'aide de Capybara) ?
InformationsquelleAutor Farooq | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
Si vous jetez un oeil à la source de l'
select
méthode, vous pouvez voir que ce qu'il fait quand vous passez unefrom
clé est essentiellement:En d'autres termes, il trouve le
<select>
qui vous intéresse, puis trouve le<option>
sein, puis appelleselect_option
sur le<option>
nœud.Vous ai déjà assez bien fait les deux premières choses, je venais de les réorganiser. Ensuite, vous pouvez fixer le
select_option
méthode sur la fin:click
fonctionne très bien.select('option_name', from: 'select_box')
. Où les valeurs peuvent être: id, nom, liées à l'élément label. Vous pouvez en lire plus à propos de Capybara et DSL options ici.Pour une raison quelconque, il ne fonctionne pas pour moi. J'ai donc dû utiliser quelque chose d'autre.
a fonctionné pour moi.
form
, il estfrom
. Voici la documentation sur selectune autre option est d'ajouter une méthode comme ceci
Malheureusement, la réponse la plus populaire n'a pas fonctionné pour moi tout à fait. J'ai dû ajouter
.select_option
à la fin de l'instructionselect("option_name_here", from: "organizationSelect").select_option
sans
select_option
, pas de sélectionner a été effectuée.select_option
, depuis leselect
méthode renvoie une valeur booléenne?Pour ajouter encore une autre réponse à la pile (car apparemment il y a tellement de façons de le faire, selon votre installation) - je l'ai fait en sélectionnant le littéral
option
élément et en cliquant dessusCe n'est pas très joli, mais ça fonctionne :/
aucune réponse n'a fonctionné pour moi en 2017 avec le capybara 2.7.
J'ai eu "ArgumentError: mauvais nombre d'arguments (2, attendu 0)"
Mais ce n':
Ce n'est pas une réponse directe, mais vous pouvez (si votre serveur le permettent):
1) Créer un modèle pour votre Organisation;
extra: Il sera plus facile de remplir votre HTML.
2) Créer une usine (FactoryGirl) pour votre modèle;
3) Créer une liste (create_list) avec l'usine;
4) 'pick' (échantillon) d'une Organisation à partir de la liste avec:
Voici le plus concis moyen que j'ai trouvé (à l'aide de capybara 3.3.0 et chrome pilote):
permettra de sélectionner la 2ème option. Incrémenter l'index en tant que de besoin.
Dans le Capybara, vous pouvez utiliser seulement trouver avec xpath
et de la méthode cliquez sur