Selecionar uma opção em combobox - Selenium WebDriver

11,833 views
Skip to first unread message

Leandro Alves dos Santos

unread,
Jul 8, 2014, 9:44:10 AM7/8/14
to seleniu...@googlegroups.com
Bom dia Pessoal!

Gostaria de um auxilio, quanto á um problema que estou tendo, em relação á selecionar uma opção num combobox.
Estou tentando selecionar um item usando XPATH, mas não esta funcionando, estou usando o comando abaixo, para chegar ao item em questão (Selecionado abaixo na imagem).

 
 driver.findElement(By.xpath("//select[@id='ddlPartner']/option[4]")).click();

Agradeço desde já pela atenção




rafaelcrvs

unread,
Jul 8, 2014, 9:51:41 AM7/8/14
to seleniu...@googlegroups.com
Antes de tentar selecionar a opção, tu clicou no dropdown, certo?

após o comando para abrir a dropdown, tente isto:

driver.findElement(By.xpath("//*[@value='150']")).click();

Stefan Teixeira

unread,
Jul 8, 2014, 9:53:15 AM7/8/14
to Leandro Alves dos Santos, seleniu...@googlegroups.com
Oi Leandro, tudo bem?

No Selenium WebDriver, para se trabalhar com elementos como comboboxes, é necessário usar a classe Select, passando como parâmetro um WebElement, que represente o seu elemento <select>. No exemplo que você passou, você poderia selecionar essa opção da seguinte forma:

WebElement comboboxElement = driver.findElement(By.id("ddlPartner));
Select combobox = new Select(comboboxElement);
combobox.selectByVisibleText("ASIA TELECOM TELEFONIA E COMUNICACAO LTDA ME");

OU

combobox.selectByValue("150");


Abraços!


--
Você recebeu essa mensagem porque está inscrito no grupo quot;Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Leandro Alves dos Santos

unread,
Jul 8, 2014, 10:42:42 AM7/8/14
to seleniu...@googlegroups.com, leandrosa...@gmail.com
Bom dia Stefan e Rafael !

Obrigado pelo retorno.

Porém tentei como falaram, mas ainda não consegui selecionar o item, vai somente até o item em questão, mas não seleciona o mesmo.

rafaelcrvs

unread,
Jul 8, 2014, 10:57:52 AM7/8/14
to seleniu...@googlegroups.com, leandrosa...@gmail.com
Pode enviar a página que tu está testando, por favor?

Stefan Teixeira

unread,
Jul 8, 2014, 11:11:17 AM7/8/14
to Leandro Alves dos Santos, seleniu...@googlegroups.com
Rafael, clicar no combobox e depois na option não é o ideal. Existe uma classe que foi feita só pra isso, pra simplificar a nossa vida.

Leandro, faz o que falei sobre o Select e manda, se puder, o código do seu teste e um screenshot desse combobox.

Abs

rafaelcrvs

unread,
Jul 8, 2014, 11:14:53 AM7/8/14
to seleniu...@googlegroups.com, leandrosa...@gmail.com
Stefan, eu me toquei disso após tu enviar teu código. Tu está certo!

Obrigado.

Elias Nogueira

unread,
Jul 9, 2014, 5:08:23 PM7/9/14
to rafaelcrvs, selenium-brasil, Leandro Alves dos Santos
Leandro,
Quando tu acessa a página, sou seleciona algo em outro elemento esta combo sobre uma "demora" no carregamento?
Se esta combo é dinamicamente preenchida (os dados podem varias de acordo com alguma seleção), tu precisarás esperar algum valor da combo primeiro para depois selecionar.

Só para testar essa hipótese, adicione a seguinte linha logo depois de instanciar um browser:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Abraço!

--
Elias Nogueira

rafaelcrvs

unread,
Jul 10, 2014, 9:59:55 AM7/10/14
to seleniu...@googlegroups.com, rafae...@gmail.com, leandrosa...@gmail.com
Elias,

Qual a diferença desta linha de comando que citou acima para o WebElement wait (que usamos para esperar que um certo elemento carregue)?

Stefan Teixeira

unread,
Jul 10, 2014, 10:19:38 AM7/10/14
to rafaelcrvs, seleniu...@googlegroups.com, Leandro Alves dos Santos
Rafael, esse post pode te ajudar a entender essa diferença: http://goo.gl/5w5SMI

Abs
Message has been deleted

Stefan Teixeira

unread,
Jul 10, 2014, 12:00:05 PM7/10/14
to Leandro Alves dos Santos, seleniu...@googlegroups.com, rafaelcrvs
Leandro, na parte de "Seleciona um parceiro", tira essa linha na qual você tá dando um "driver.findElement(By.xpath(...)).click()". Você não precisa clicar no elemento, basta usar o selectByValue ou selectByVisibleText.


Abs,
Stefan.


Em 10 de julho de 2014 12:57, Leandro Alves dos Santos <leandrosa...@gmail.com> escreveu:
Boa tarde Pessoal !

Elias, 

Este campo não é dinâmico, mas de qualquer forma inclui o comando que citou. Porém ainda não consegui selecionar um item neste combo. Parece faltar algum outro comando.
Segue imagem e o código até agora.


public static void main(String[] args){
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
   
        // Informa nome de usuário
WebElement campoLogin = driver.findElement(By.id("UserName"));
campoLogin.sendKeys("admin");
//Informa nome de usuário
WebElement campoSenha = driver.findElement(By.id("Password"));
campoSenha.sendKeys("admin");
//Aciona o botão "Entrar";
driver.findElement(By.xpath(".//*[@id='loginForm']/form/input[2]")).click();
//Seleciona a opção "Cadastro" no menu;
driver.findElement(By.xpath("html/body/div[1]/div/div/div[2]/ul[1]/li[2]/a")).click();
//Seleciona a opção "Usuário" no menu;
driver.findElement(By.xpath("html/body/div[1]/div/div/div[2]/ul[1]/li[2]/ul/li[3]/a")).click();
//Seleciona a opção "incluir Usuário";
driver.findElement(By.xpath("html/body/div[2]/div/div[1]/div/ul/li[4]/a")).click();
//Preenche o campo "Login";
WebElement formLogin =  driver.findElement(By.id("inputLogin"));
formLogin.sendKeys("loginteste");
//Preenche o campo "Nome";
WebElement formName =  driver.findElement(By.id("InputName"));
formName.sendKeys("VendedorTeste");
                // Informa o CPF
//WebElement formCpf =  driver.findElement(By.id("cpf"));
//formCpf.sendKeys("25278324074");
//Seleciona um Perfil;
driver.findElement(By.xpath("html/body/div[2]/form/fieldset/div[4]/div/select/option[8]")).click();
//Seleciona um Estado;
driver.findElement(By.xpath("html/body/div[2]/form/fieldset/div[5]/div/select/option[3]")).click();

//Seleciona um parceiro
WebElement comboboxElement = driver.findElement(By.id("ddlPartner"));
driver.findElement(By.xpath("//*[@id='ddlPartner']")).click();
Select combobox = new Select(comboboxElement);
                combobox.selectByValue("150");

//combobox.selectByVisibleText("ASIA TELECOM TELEFONIA E COMUNICACAO LTDA ME");


Em quarta-feira, 9 de julho de 2014 18h08min23s UTC-3, Elias Nogueira escreveu:

Leandro Alves dos Santos

unread,
Jul 10, 2014, 12:05:02 PM7/10/14
to seleniu...@googlegroups.com, leandrosa...@gmail.com, rafae...@gmail.com
Stefan.

Valeu. Deu certo agora.

Obrigado a todos pela atenção.

Lucas Fraga

unread,
Jan 25, 2017, 9:51:43 AM1/25/17
to Selenium Brasil

Galera, pegando carona nesse post...
Em alguns casos eu consegui usar o select, mas, nesse em específico, não estou conseguindo.

Vamos lá, enviei um print do HTML.
Eu preciso clicar em no combobox e pegar um elemento (value/text/index - tanto faz) desse combobox.

Porém, nesse HTML está aparecendo o "select" inativo. (vide foto em anexo)
E, não consigo pegar pela UL ou pela LI.

Somente simulando o mouse.
Mas, gostaria de usar a classe Select.

Alguém consegue me ajudar?
Att;

Combobox - List.jpg

Elias Nogueira

unread,
Jan 25, 2017, 10:14:13 AM1/25/17
to Lucas Fraga, selenium-brasil
Lucas,
Tu só consegue usar o classe Select do Selenium e selecionar algo por value, Index ou text se o elemento for obrigatoriamente um select

No caso do teu print ele é um elemento web que algum framework (magicamente) põe uma roupagem de select, mas na verdade não passam de um monte de elementos web.

A abordagem que tu precisa aplicar é a seleção/clique/ação no elemento seguido de esperas por algum mecanismo (aparecer o elemento com propriedade XPTO, aparecer o texto xyZ e assim por diante).


Abraço!


--
Visite em https://groups.google.com/d/forum/selenium-brasil
---
Você recebeu essa mensagem porque está inscrito no grupo "Selenium Brasil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-brasil+unsubscribe@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/selenium-brasil.

Gabriel Oliveira

unread,
Jan 25, 2017, 10:30:44 AM1/25/17
to Elias Nogueira, Lucas Fraga, selenium-brasil
Seguindo na linha do que o Elias comentou, pensa como vc faria manualmente - você ia clicar no box (provável naquela div com classe chosen-drop), ia observar o que apareceu na tela (provável espera por aparecer o select com id selectAllCenas) e ia clicar numa das opções em tela (provável em algum ul filho do select com id selectAllCenas). 

Faz esse exercício "manualmente" (entre aspas mesmo por quê eu uso jquery no console do browser pra interagir com a tela usando seletores css, por exemplo, o que já me ajuda a validar meus seletores e a sequência de uso deles) e ve o quanto consegue reproduzir com Selenium. 

Se não for tão suave esse mapeamento, alternativas mais esotéricas (como dar mouse.down/mouse.up no elemento ao invés de click) talvez sejam necessárias...

-- 

Gabriel P.A. de Oliveira
https://gpaoliveirablog.wordpress.com









Lucas Fraga

unread,
Jan 25, 2017, 1:57:43 PM1/25/17
to Selenium Brasil, elias.n...@gmail.com, lucass...@gmail.com
Elias e Gabriel, muito obrigado, de verdade!

Ah, agora tudo fez sentido.
Não estava entendendo esse "Select".

Bom, dessa forma que o Elias citou, eu consegui interagir com o elemento e consigo o click.
Mas, no select a possibilidade de escolher exatamente algum item por "texto" (por exemplo) era mais fácil pra mim.
Já no click, eu teria que interagir diretamente com ele. 

E Gabriel, estou aprendendo o uso do JQuery, está mudando a minha vida! (tenho só 2 meses de automação haha).
Mas confesso que não soube qual evento eu teria que ter para interagir com esse maldito select.

Obrigado de novo!
Att;

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.

--
Visite em https://groups.google.com/d/forum/selenium-brasil
---
Você recebeu essa mensagem porque está inscrito no grupo "Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.

marcio ximenes

unread,
Mar 30, 2017, 12:45:52 PM3/30/17
to Selenium Brasil
Pessoal boa tarde! Acompanhando o tópico eu testei todos os exemplos e não selecionar um item da combo, detalhe que no meu script ele roda e não da erro porém ele não seleciona nada. Teria outra possivel solucão?

Trecho do Código: 

new Select(driver.findElement(By.id("formGeral:formTabIdentificacao:municNasc"))).selectByVisibleText("Brasília");

Trecho do HTML

<select id="formGeral:formTabIdentificacao:municNasc" class="w50pc" size="1" name="formGeral:formTabIdentificacao:municNasc" xmlns="http://www.w3.org/1999/xhtml">
<option selected="selected" value="org.jboss.seam.ui.NoSelectionConverter.noSelectionValue">--Selecione--</option>
<option value="1259">Brasília</option>

Bruno Rodrigues

unread,
Dec 6, 2017, 12:28:30 PM12/6/17
to Selenium Brasil
Stefan boa tarde..


Estou com o mesmo problema, estou tentando selecionar um intem dentro de uma caixa de listas, mas na hora de usar o "select" o eclipse não reconhece, pode ajudar?

Andre Damasceno Dias

unread,
Dec 6, 2017, 12:43:27 PM12/6/17
to Bruno Rodrigues, Selenium Brasil
Boa tarde,

Esse item depende de selecionar um item anterior? Por exemplo selecionar País para carregar os estados...  Caso dependa da seleção de um item anterior precisa de uma espera...

Pode mandar o trecho do código para facilitar? 


Andre Damasceno Dias
MBA, CTFL
Celular: (21) 98758-0608 
  
Play the game, test the game

Você recebeu essa mensagem porque está inscrito no grupo "Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-brasil+unsubscribe@googlegroups.com.

Bruno Rodrigues

unread,
Dec 6, 2017, 1:00:30 PM12/6/17
to Selenium Brasil
vou mandar o código, e estou com dois problemas. Estou tentando automatizar a tela de cadastro do site smiles, quando a pagina carrega por completo, aparece um "ALERT" perguntando algo... eu quero tirar esse alert, clicando no "Não, obrigado" e o outro problema é esse que vc falou, preciso clicar em "Nacionalidade" para selecionar "Brasileiro" e depois clicar em "idioma" para selecionar "português", mas não estou conseguindo com o idioma...


WebElement cadastro = smiles.findElement(By.xpath("//*[@id='_smilesregistermemberportlet_WAR_smilesaccountportlet_firstname']"));
cadastro.sendKeys("Bruno Cesar");
WebElement sobrenome = smiles.findElement(By.xpath("//*[@id='_smilesregistermemberportlet_WAR_smilesaccountportlet_lastname']"));
sobrenome.sendKeys("Rodrigues");
smiles.findElement(By.xpath("//a[@class='dk_toggle dk_label' and contains (text(),'Nacionalidade')]")).click();
        smiles.findElement(By.xpath("//a[@data-dk-dropdown-value='Brazilian']")).click();
        
        smiles.findElement(By.xpath("//*[@class='dk_toggle dk_label']/a' and contains (text(),'Idioma')]")).click();
        smiles.findElement(By.xpath("//a[@data-dk-dropdown-value='Português'']/a']")).click();
Select selecionar = new Select();
selecionar.selectByValue("Brasileiro");
selecionar.selectByVisibleText("Brasileiro");






Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.

Andre Damasceno Dias

unread,
Dec 6, 2017, 1:08:41 PM12/6/17
to Bruno Rodrigues, Selenium Brasil
Sobre o primeiro problema seria um poupup? Se não for aquela do windows seria a solução é essa https://stackoverflow.com/questions/19403949/how-to-handle-pop-up-in-selenium-webdriver-using-java

Sobre o segundo problema você teria que colocar uma espera, eu colocaria uma espera pelo elemento que você está procurando mesmo, no caso "Português"




Andre Damasceno Dias
MBA, CTFL
Celular: (21) 98758-0608 
  
Play the game, test the game

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-brasil+unsubscribe@googlegroups.com.

Bruno Rodrigues

unread,
Dec 6, 2017, 1:28:47 PM12/6/17
to Selenium Brasil
Andre, quando eu coloco o sleep ou o wait, abaixo eu coloco "smiles.click();" e o compilador diz que "The method click() is undefined for the type WebDriver"

o que pode ser?

Andre Damasceno Dias

unread,
Dec 6, 2017, 1:36:27 PM12/6/17
to Bruno Rodrigues, Selenium Brasil
Seria interessante você debugar, mas não vi como foi declarado esse smiles

no trecho que você mandou cadastro está recebendo smiles, então seria cadastro.click() não smiles.click() será que não é isso?

WebElement cadastro = smiles.findElement(By.xpath("//*[@id='_smilesregistermemberportlet_WAR_smilesaccountportlet_firstname']"));
cadastro.sendKeys("Bruno Cesar");

Seria smiles se fosse igual ao exemplo abaixo
WebElement smiles = driver.findElement(By.id("UserName"));
smiles.click();
 


Andre Damasceno Dias
MBA, CTFL
Celular: (21) 98758-0608 
  
Play the game, test the game

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-brasil+unsubscribe@googlegroups.com.

Miécio Costa

unread,
Dec 6, 2017, 1:40:43 PM12/6/17
to Andre Damasceno Dias, Bruno Rodrigues, Selenium Brasil
Bruno tenta isso. O código está feio, mas veja se funciona... se funcionar é porque precisa botar esse sleep antes de cada click.:

     Thread.sleep(1000);
WebElement Nacionalidade;
Nacionalidade = smiles.findElement(By.xpath("//a[@class='dk_toggle dk_label' and contains (text(),'Nacionalidade')]"));
Thread.sleep(1000);
Nacionalidade.click();
Thread.sleep(1000);
WebElement Brazilian;
Brazilian = smiles.findElement(By.xpath("//a[@data-dk-dropdown-value='Brazilian']"));
Thread.sleep(1000);
Brazilian.click();

Thread.sleep(1000);
WebElement Idioma;
Idioma = smiles.findElement(By.xpath("//*[@class='dk_toggle dk_label']/a' and contains (text(),'Idioma')]"));
Thread.sleep(1000);
Idioma.click();

Thread.sleep(1000);
WebElement Português;
Português = smiles.findElement(By.xpath("//a[@data-dk-dropdown-value='Português'']/a']"));
Thread.sleep(1000);
Idioma.click();



M i é c i o  S a n t o s  C o s t a
___________________________________________
MBA-Gerenciamento de Projetos
Bacharel Ciência da Computação
Certificação CTFL

Bruno Rodrigues

unread,
Dec 6, 2017, 1:54:30 PM12/6/17
to Selenium Brasil
Assim deu certo, muito obrigado, Andre! 

Tudo de bom pra vc!!
Reply all
Reply to author
Forward
0 new messages