Estou tentando selecionar um item em um menu suspenso usando a Capivara (2.1.0).
Quero selecionar por número (ou seja, selecione a segunda, terceira, etc).
Eu pesquisei no Google como um louco tentando todo tipo de coisa, mas sem sorte.
Consegui selecioná-lo usando o valor:
find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click
Mas não quero usar esse método porque o valor é algo que mudará e tornará meu teste frágil.
O HTML da lista suspensa é:
<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>
Eu também tentei isso:
option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text
select(option, :from => organizationSelect)
Mas resulta neste erro:
Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)
Então, como posso selecionar a primeira, a segunda, a terceira, etc opção no menu suspenso (usando Capivara)?
fonte
select('option_name', from: 'select_box')
. Onde os valores podem estar: id, nome, elemento de rótulo relacionado. Você pode ler mais sobre as opções de Capivara e DSL aqui .Por alguma razão, não funcionou para mim. Então eu tive que usar outra coisa.
trabalhou para mim.
fonte
form
, éfrom
. Aqui está a documentação sobre selectOutra opção é adicionar um método como este
fonte
find("select[name='organization_search[role]']").find(:option, text: :Staff).select_option
find(:css, "#search_field").find(:option, "Opp Last Name").select_option
, que é o texto da opção exibida, funcionou para mim, enquanto o valor da opção não.Infelizmente, a resposta mais popular não funcionou totalmente para mim. Eu tive que adicionar
.select_option
ao final da declaraçãoselect("option_name_here", from: "organizationSelect").select_option
sem o
select_option
, nenhuma seleção estava sendo executadafonte
.select_option
, já que oselect
método retorna um valor booleano?Para adicionar mais uma resposta à pilha (porque aparentemente existem muitas maneiras de fazer isso, dependendo da sua configuração) - eu fiz isso selecionando o
option
elemento literal e clicando neleNão é muito bonito, mas funciona: /
fonte
nenhuma das respostas funcionou para mim em 2017 com a capivara 2.7. Eu recebi "ArgumentError: número errado de argumentos (dado 2, esperado 0)"
Mas isso fez:
fonte
Não é uma resposta direta, mas você pode (se o seu servidor permitir):
1) Crie um modelo para sua organização; extra: será mais fácil preencher seu HTML.
2) Crie uma fábrica (FactoryGirl) para o seu modelo;
3) Crie uma lista (create_list) com a fábrica;
4) 'escolha' (amostra) uma organização da lista com:
fonte
Aqui está a maneira mais concisa que eu encontrei (usando o capybara 3.3.0 e o driver de cromo):
selecionará a segunda opção. Incremente o índice conforme necessário.
fonte
Na Capivara, você pode usar somente find com xpath
e clique no método
fonte