Olá Pessoal,
No post de hoje vamos ver como usar o Selenium para criação de testes funcionais. A ideia é um teste simples para mostrar a potência do framework e daí cabe a cada um usar de forma que atenda as necessidades do projeto. Para o post vou usar a versão selenium-server-standalone-2.32.0.jar disponível http://docs.seleniumhq.org/
lets go…
Overview sobre o Selenium
Bem, se você usar o Google e pesquisar sobre “Selenium unit test” verá vários links para a definição, então não há motivos para repetir no post. Veja no famoso Wikipedia. Há um post que gosto bastante sobre o Selenium que está no blog da Caelum.
Em poucas palavras, nos permite realizar teste funcionais simulando ações que um usuário estaria fazendo.
Mas por que usar um framework para isso?
Há vários motivos para fazer isso de maneira automatizada, como por exemplo:
- – produtividade;
- – qualidade;
- – custo;
- – feedback.
Contratar um time de profissionais para fazer testes que você pode automatizar, além de custar caro, o tempo gasto é muito maior que de forma automatizada e isso é importante. Assim podemos contratar profissionais para realizar em pontos estratégicos onde não temos como testar de forma automatizada. Como toda e qualquer ferramenta sempre há uma limitação e ai que entra o fator o humano.
Colocando mão na massa
Vamos colocar a mão na massa e criar um projeto muito simples. Faremos um teste que terá como objetivo acessar uma determinada página na internet e fazer uma pesquisa. Se tudo ocorrer bem, o teste vai passar. Mas, por exemplo, se a página estiver indisponível ou o endereço informado para o teste for inválido o teste vai falhar.
- Crie um Java project e dê o nome que quiser;
- Adicione a biblioteca do Selenium ao classpath do projeto;
- Crie uma classe de teste, ou seja, Junit Class. No meu caso criei com o nome de HelloSeleniumTest.java
Vamos criar o nosso primeiro teste que vai acessar a página do Google e pesquisar por “Camilo Lopes”. Veja o código a seguir.
public class HelloSeleniumTest {
@Before
public void setUp() throws Exception {
}
@Test
public void testSearchInGooglePage() {
WebDriver driver = new FirefoxDriver();
// Digo qual url para acessar
driver.get(“http://www.google.com”);
// Agora vamos buscar o elemento na página
WebElement inputTextGoogle = driver.findElement(By.name(“q”));
inputTextGoogle.sendKeys(“Camilo Lopes”);
/* faz um submit na página
* poderia buscar o botão search e fazer o submit tb.
*/
inputTextGoogle.submit();
assertTrue(driver.getPageSource().contains(driver.findElement(By.id(“gbqfq”)).getText()));
}
}
Entendendo o código
Apesar de que em alguns trechos eu coloquei comentários somente para facilitar o entendimento, vou explicar alguns pontos que considero importantes.
WebDriver: é uma interface do Selenium que todo Web Browser Drivers implementa. O Firefox Browser tem sua implementação, assim como IE e Chrome, cada um com sua particularidade, e é preciso dar uma olhada na documentação sobre como implementar.
Depois que instanciamos o driver, dizemos a URL que queremos testar (nesse caso será do Google), mas em um projeto JEE, por exemplo, vamos colocar o caminho onde está nossa aplicação.
Em seguida pesquisamos pelos elementos na página, para isso no Chrome podemos usar o atalho F12, clica na lupa que fica no rodapé e clica sobre o input text e ver qual o nome daquele campo. Podemos usar o id, nome etc. Veja:
Depois que fizemos isso, criamos uma variável para representar esse campo :
WebElement inputTextGoogle = driver.findElement(By.name(“q”));
E em seguida invocamos o método sendKeys(…) e passamos o valor que queremos que seja digitado no input. Para descobrir e conhecer melhor os métodos disponíveis tem que passar por alguns minutos vendo o que temos na documentação do framework.
inputTextGoogle.sendKeys(“Camilo Lopes”);
Logo em seguida fizemos o submit página
inputTextGoogle.submit();
Criando o assert
Bem, para que seja testado precisamos usar algum assertXXX do framework Junit. Então vamos verificar se após ter feito o submit há um elemento com o id informado na página.
O teste passa. Na verdade esse teste não tem nada de inteligente. Se você reparar, ele verifica se o input que pesquisamos na primeira página do Google é o mesmo na página do resultado da busca.
Claro que em nossa aplicação íamos testar algo mais voltado para regras de negócio. E o método getPageSource() nos ajuda nisso, em busca de um elemento na página corrente.
Execute o teste
Vamos executar os testes e aguardar por alguns segundos e veremos que o Selenium vai abrir o browser que definimos (no caso do post foi o Firefox) e realizar a pesquisa.
Convertendo isso para uma aplicação
Em uma aplicação web, vamos ter que usar a url onde nossa aplicação está rodando. Claro que vamos evitar que o endereço seja informado dentro da classe Java, este pode ser informado de um arquivo .properties por exemplo, efaremos assert voltado para as regras de negócio.
Conclusão
O objetivo desse post não era explorar como escrever bons testes com o Selenium, a ideia era apresentar o framework e vê-lo em ação. Após isso podemos tirar nossas próprias conclusões sobre a eficiência e produtividade gerada quando usamos corretamente. Já passei por algumas empresas e projetos onde falaram que o Selenium foi o responsável pelo aumento do dos prazos nas entregas. Acredito que o problema certamente não foi com o Selenium, mas sim na forma de como este foi usado ou adotado dentro do projeto.
E você tem usado o Selenium em seus projetos? Compartilhe sua experiência…
Abraços, see ya!!!