Testes de aceitação com o Selenium

Selenium é uma ferramenta para testar aplicações web pelo browser de forma automatizada. Selenium se refere ao Acceptance Testing (ou functional testing) que involve rodar testes num sistema finalizado. Os testes rodam diretamente num browser, exatamente como o usuário faria.

Por que Selenium?
Temos que testar o nosso código, mas em uma aplicação web fica dificil de testar a camada de apresentação, o resultado final. Como testar os custom tags (por exemplo erro.tag ou select.tag)? Como testar a compatibilidade entre browser diferentes de forma automatizada? Em geral, como testar que a página renderizada tem o resultado desejado?

Para isso serve Selenium, que se preocupa basicamente com duas tarefas

  • testes de funcionalidades da aplicação web
  • testes de compatibilidade entre browser e plataformas diferentes

Componentes do Selenium:

Dois componentes são importante para gerar e rodar testes com Selenium:

1. Selenium RC

É um servidor escrito em java. Ele recebe chamadas http e executa os testes. As chamadas vem dos testes unitários (com junit, por exemplo). Este blog tem foco nesse componente.

2. Selenium IDE

É uma extensão do firefox. Com ela podemos criar testes. Ela funciona com um recorder e grava as ações do usuário. As ações podem ser transformadas em código em várias linguagens entre elas java.

Integração com JUnit

Vamos criar um teste de funcionalidade com Selenium e JUnit. Precisamos:

– uma aplicação web
– o selenium server
– o selenium test client com junit

Objetivo é testar um combo box numa página jsp. Vamos deixar o selenium abrir um browser, chamar a página e testar a combo box.

A página do aplicação web

Aqui tem uma página ( index.jsp) simples para testar a opção selecionada num combo box:

<html>

<head>
      <title>Selenium e JUnit HowTo</title>
</head>

<body>
Size:
<select name=”size”>
      <option id=”x-large”>X-Large</option>
      <option id=”large”>Large</option>
      <option id=”medium” selected>Medium</option>
      <option id=”small”>Small</option>
      <option id=”tiny”>Tiny</option>
</select>
</body>

</html>

Vamos supor que esta página é acessível pela url: http://localhost:8080/test/index.jsp

O Selenium Server

O servidor Selenium tem obviamente estar rodando antes de executar os testes de funcionalidade. Para iniciar o server precisamos o selenium-server.jar que está dentro do Selenium-RC download .

Executamos na linha de comando:

$java -jar selenium-server.jar

Existe um modo interativo do server para passar testes diretamente na linha de comando. Basta adicionar a opção -interactiv.

$java -jar selenium-server.jar -interactiv

Mais sobre o modo interativo aqui.

O selenium client

Com a aplicação web e o servidor selenium rodando podemos escrever o teste com junit. Os métodos setUp e tearDown da classe de teste vão abrir e fechar a conexão com o servidor selenium. A classe DefaultSelenium é utilizado para a conexão. Aqui o selenium-java-client-driver.jar que vem com o Selenium RC é necessário:

new DefaultSelenium("localhost", 4444, "*firefox /usr/lib/firefox/firefox-bin", "http://localhost:8080");

A porta 4444 é a padrão do Selenium, o terceiro parâmetro é o perfil do browser junto com o caminho executável (tem que ser binario mesmo), por último a url do servidor web. Existem perfis disponíveis para os browser mais usados do mercado.

Aqui temos o começo código do nosso teste unitário:

private static DefaultSelenium selenium;
 
     @BeforeClass
     public static void setup() {
         String url = "http://localhost:8080";
         selenium = new DefaultSelenium("localhost", 4444, "*firefox /usr/lib/firefox/firefox-bin", url);
         selenium.start();
     }


     @AfterClass
     public static void tearDown() {
         selenium.stop();
     }
}

Falta agora o método de teste que abre a página index.jsp e verifica a opção selecionada no combobox:

@Test
public void testSelectedIdOfSizeComboBox() {
     selenium.open("/test/index.jsp");
     assertEquals("medium", selenium.getSelectedId("size"));
}

Ao rodar o teste o Selenium abrirá o firefox e chamará a página. Existem muitos métodos para que o Selenium preencha campos, submeta formulários, navegue entre as páginas e muito mais. Você pode utilizar o Selenium IDE e realizar as operações que deseja testar, e o Selenium IDE vai gerar um código com tudo o que você fez durante aquela sessão no browser, depois basta você adicionar as assertions desejadas, gastando pouco esforço para codificar a simulação de cliques e preenchimento de formulários.

Problemas com Firefox 2.0

Usando Firefox 2.0.1 eu tive problemas na versão atual do Selenium. Lendo o forum li que isso já foi resolvido no snapshot do selenium (que não está disponível atualmente) e será resolvido na próxima versão.

Versões usadas

  • selenium-remote-control-0.9.1-SNAPSHOT
  • selenium client 0.9.0
  • junit 4.1

32 Comentários

  1. Victor de Souza Couto 01/03/2007 at 12:37 #

    Interessantíssima ferramenta.
    Estou pensando seriamente em colocá-la na minha etapa de teste em um projeto que estou gerindo em programing eXtreme. Parece se encaixar perfeitamente em nosso caso.

  2. ASOBrasil 05/03/2007 at 10:44 #

    Muito bom o artigo! Parabéns!
    Até onde sei o pessoal do Glassfish vai começar a usar o Selenium para testar toda a GUI. Estou estudando ele há um tempinho e estou gostando, muito muito prático!

  3. Anne Caroline Rocha 04/07/2007 at 23:46 #

    Estou tentando instalar o Selenium, mas não consegui continuar porque estou usando o windows e o comando para iniciar o firefox é do linux:
    *firefox /usr/lib/firefox/firefox-bin

    Alguém sabe qual comando devo colocar para executar no windows?

  4. Nico Steppat 05/07/2007 at 06:43 #

    Anne, nunca testei, mas tente o caminho p/ o firefox.exe.

  5. Daniel Nascimento 11/07/2007 at 09:08 #

    O Selenium pode ser incorporado ao Firefox como um complemento. Para isso basta ir em:
    Ferramentas>Complementos>Extensões>Mais Extensões.
    Será aberta uma página do Firefox onde estão armazenadas todas as atuais extensões disponíveis… para baixar o Selenium basta digitar na caixa de Busca “Selenium IDE” e logo após seguir o passo a passo.

  6. Daniel Nascimento 11/07/2007 at 09:12 #

    Vou aproveitar para deixar uma dúvida aqui também. Uso o Selenium Integrado ao Firefox (Windows/Linux) e queria saber como faço para utilizar o Java ou o PHP para trabalhar com descisões de fluxos no Selenium.
    Para usar essas funcionalidades devo baixar um complemento? Ou devo ter apenas a linguagem instalada na minha máquina?

  7. Joamar Cardoso 18/09/2007 at 13:56 #

    Como faço pra criar testes no Selenium????
    Instalei o Selenium Core e o IDE, mas até agora só conseguí gravar testes no Selenium IDE e depois rodar no Selenium TestRunner, não sei como crio testes para rodar direto no Selenium TestRunner.

    Agradeço se alguém me ajudar nisso.

  8. Aristóteles Júnior 20/12/2007 at 20:51 #

    Tenho a mesma dúvida do colega acima.
    Preciso fazer a automação dos teste no meu trabalho e gostei do Selenium porque é mais fácil criar os scripts.
    Queria saber como fazer rodá-los no firefox e no iexplore (sem o IDE e sem HTA, por favor). É possível sem o JUnit?

    Já criei o servidor selenium e já rodei o TestRunner por ele, mas quando executo meu TestSuite ele dá erro logo no começo (e funciona perfeitamente no IDE).

    Tenho a faca e o queijo. Como é que eu corto?

    E qual a vantagem de usar outras linguagens a não ser o Selenese?

    Agradeço desde já pela atenção.

  9. Welita Lisa 31/01/2008 at 12:36 #

    Tenho a mesma dúvida dos comentários acima.
    como faço para fazer os testes no internet explorer?
    Preciso entender melhor o funcionamento do selenium TestRunner, baixei ele mais não consegui executa-lo.
    Existe um tutoral que fala sobre isto? sobre o selenium IDE já encontrei varios.
    Aguardo respostas.
    Agradeço pela atenção desde já.

  10. Daniel Abella 20/02/2008 at 14:13 #

    Pessoal,

    Para testar no windows, é só colocar assim:
    selenium = new DefaultSelenium(“localhost”, 4444,”*firefox”, url);

    Apenas isso e funciona.

    Parabéns pelo artigo, muito legal ;D

  11. Ana Claudia 07/04/2008 at 17:38 #

    Eu criei os scriptis no fire fox, mas não estou sabendo como reproduzi-los de uma única vez. Gostaria que alguém me enviasse um passo a passo.

    Obrigada.

  12. Fiamma Custódio 30/07/2008 at 16:51 #

    Muito bom o Atigo! Parabéns.

    Mas tenho um dúvida, é necessário usar o JUnit?
    Não tenho ele instalado!!!!!:D

  13. Hebert Thomé 04/09/2008 at 03:00 #

    Deixo aqui também meus elogios pelo artigo, Parabéns Nico.

    Porém tenho tido problemas com a autenticação no proxy, estou a 2 dias procurando uma solução para o meu problema e nada encontro.

    Seguindo a sugestão de configuração no próprio site da Openga.

    java -jar selenium-server.jar -Dhttp.proxyHost=10.2.2.10 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=userTest -Dhttp.proxyPassword=passTest

    Eu consigo configurar o proxy numa boa, mas a autenticação não é feita. Existe alguma alternativa para esse problema?

  14. Wallison 06/10/2008 at 03:04 #

    Gostei muito do artigo, so to com um problema to tentanto rodar no eclipse mais nao consigui.
    Voce tem alguma dica ou material que posso me ajudar?

    desde ja obrigado

  15. Paulo 14/09/2009 at 17:07 #

    Bom artigo, parabéns!

  16. Leandro 23/12/2009 at 15:19 #

    pessoal,

    eu tenho que fazer um teste que faz o selenium sair de uma pagina e ir para outra pagina, alguem sabe como se faz isso?

  17. Shirlei 05/01/2010 at 23:30 #

    Olá gente,

    Comecei a utilizar o Selenium IDE na empresa onde trabalho e preciso gravar testes onde formulários são preenchidos e estes formulários possuem o botão Salvar, ocorre que ao gravar este teste na hora de eu executá-lo novamente ele irá preencher com os mesmos dados digitados na gravação do teste e aí dá pau, pq já contém no banco de dados.

    Como fazer com que o IDE preencha algo como ana1; ana2; ana3…

  18. leandro 20/01/2010 at 09:48 #

    bom dia pessoal, estou como um problema com o selenium IDE, como eu faço pra fazer uma comparação de valores (comparar 2 valores xpath), alguem sabe???

  19. leandro 28/01/2010 at 15:31 #

    Olá Pessoal, como eu faço pra fazer o selenium verificar se existe um valor em um campo “type”, caso exista algun valor o selenium exibe erro, senao continua execução.

  20. Cristian Pietro 05/02/2010 at 10:58 #

    Comment by Shirlei — January 5

    Olá Shirlei,
    usa um while para preencher os campos por exemplo;
    while (${i} < 100)
    type ana${i}

  21. erika 07/06/2010 at 15:40 #

    Olá,
    Estou começando a testar a compatibilidade do Selenium Ide, com um aplicativo de linguagem Java e arquitetura AJAX, porém, a ferramenta identifica o ComboBox como Imagem.
    Alguém sabe por que isso acontece? Tem alguma solução?

  22. Fabio Araujo 20/03/2011 at 13:24 #

    Muito bom esse post, em menos de 10 minutos já estava fazendo uns testes interessantes aqui, isso vai agilizar muito os testes da camada de apresentação ^^

    Parabéns!

  23. Gil 29/03/2011 at 14:40 #

    o selenium RC é indispensável?

  24. Eudson Bambo 22/03/2013 at 05:34 #

    Bom dia pessoal,

    Sou novo numa empresa de desenvolvimento. Sempre trabalhei com programação apenas e nada de testes. foi me incumbida a missão de testar o Selenium. Encontrei este exemplo, segui todos os passos mas na execução da instrução: selenium.open(“/test/index.jsp”); da nullPointer, alguém ajuda????? por favor

  25. daiane 26/12/2013 at 16:12 #

    Olá gente,
    Comecei a utilizar o Selenium IDE na empresa onde trabalho e preciso gravar testes onde formulários são preenchidos e estes formulários possuem o botão Salvar, ocorre que ao gravar este teste na hora de eu executá-lo novamente ele irá preencher com os mesmos dados digitados na gravação do teste e aí dá pau, pq já contém no banco de dados.
    Como fazer com que o IDE preencha algo como ana1; ana2; ana3…

  26. Rafael 01/05/2014 at 12:43 #

    Tem como colocar o teste do selenium na web para junto da aplicação colocar o teste automatizado mostrando ao usuário um exemplo do CRUD e os testes de caixa branca/preta?

  27. Wellington 01/07/2014 at 13:53 #

    Muito bom, estou com a missão de testar o selenium e por enquanto os testes estão perfeitos

  28. juliano 28/10/2016 at 14:57 #

    é possível usar o seleniun, integrado a uma job do jenkins?

Deixe uma resposta