J'essaie de sélectionner un élément dans un menu déroulant en utilisant Capybara (2.1.0).
Je veux sélectionner par numéro (ce qui signifie sélectionner l'option deuxième, troisième, etc.).
J'ai googlé comme un fou en essayant toutes sortes de choses mais pas de chance.
J'ai pu le sélectionner en utilisant la valeur:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
Mais je ne veux pas utiliser cette méthode car la valeur est quelque chose qui va changer et qui rendra mon test fragile.
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 cela entraîne 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 la liste déroulante (en utilisant Capybara)?
la source
select('option_name', from: 'select_box')
. Où les valeurs peuvent être: id, nom, élément d'étiquette associé. Vous pouvez en savoir plus sur Capybara et les options DSL ici .Pour une raison quelconque, cela n'a pas fonctionné pour moi. J'ai donc dû utiliser autre chose.
travaillé pour moi.
la source
form
, ça l'estfrom
. Voici la documentation sur selectune autre option est d'ajouter une méthode comme celle-ci
la source
find("select[name='organization_search[role]']").find(:option, text: :Staff).select_option
find(:css, "#search_field").find(:option, "Opp Last Name").select_option
, qui est le texte de l'option affiché, a fonctionné pour moi, contrairement à la valeur de l'option.Malheureusement, la réponse la plus populaire n'a pas fonctionné entièrement pour moi. J'ai dû ajouter
.select_option
à la fin de la déclarationselect("option_name_here", from: "organizationSelect").select_option
sans le
select_option
, aucune sélection n'était effectuéela source
.select_option
, puisque laselect
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 en fonction de votre configuration) - je l'ai fait en sélectionnant l'
option
élément littéral et en cliquant dessusCe n'est pas très joli, mais ça marche: /
la source
aucune des réponses n'a fonctionné pour moi en 2017 avec capybara 2.7. J'ai eu "ArgumentError: nombre incorrect d'arguments (donné 2, attendu 0)"
Mais cela a fait:
la source
Ce n'est pas une réponse directe, mais vous pouvez (si votre serveur le permet):
1) Créez un modèle pour votre organisation; extra: il sera plus facile de remplir votre HTML.
2) Créez une usine (FactoryGirl) pour votre modèle;
3) Créez une liste (create_list) avec la fabrique;
4) `` choisir '' (échantillonner) une organisation dans la liste avec:
la source
Voici le moyen le plus concis que j'ai trouvé (en utilisant capybara 3.3.0 et le pilote chromium):
sélectionnera la 2ème option. Incrémentez l'index selon vos besoins.
la source
Dans Capybara, vous ne pouvez utiliser que rechercher avec xpath
et méthode cliquez
la source