Estes testes devem ser utilizados em todas as interfaces do sistema, porém muitas equipes os ignoram. Em interfaces com poucos campos a serem preenchidos tais testes passam a impressão de que são desnecessários, pois, pode-se testá-las mais rapidamente de forma manual do que escrevendo o teste automatizado.
Entretanto quando o sistema começa crescer e a complexidade das telas aumenta, os testes automatizados pagam seu custo inicial, além de garantir a qualidade do sistema.
O Selenium WebDriver é uma ótima ferramenta para execução de testes de aceitação e será abordado para o desenvolvimento destes testes, neste em outros posts.
Primeiro passo:
Adicione o Selenium em seu classpath. Com o maven basta adicioná-lo como dependência:
O próximo passo é instanciar um WebDriver:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId> <version>2.4.0</version> </dependency>
WebDriver driver = new FirefoxDriver();
WebDriver é uma interface que simula o browser em seu teste. Neste caso instanciamos o FirefoxDriver que permite que o teste seja visualizado.
Existem outras implementações da interface WebDriver, como o HtmlUnit Driver, que permite que o teste seja executado mais rapidamente, porém não é possível visualizar o teste em tela.
Aqui podem ser encontradas as vantagens e desvantagens entre as implementações.
Depois é necessário acessar a url:
driver.get("http://www.meudominio.com.br/aluno/cadastro");
O método get requisita a página e espera que seja totalmente carregada para o
início dos testes.
Com a interface WebElement é possível manipular os valores dos campos, para isso, é necessária uma referência do campo.
Supondo que os campos do cadastro sejam:
<input type="text" name="aluno.nome" />
<input type="text" name="aluno.email" />
A referência pode ser obtida através de uma pesquisa do nome do campo:
WebElement nome = driver.findElement(By.name("aluno.nome"));
WebElement email = driver.findElement(By.name("aluno.email"));
Agora com referências aos elementos, pode-se enviar algum valor para eles:
nome.sendKeys("Renan");
email.sendKeys("renan@renan.com");
Então submetemos o formulário:
email.submit();
Note que chamamos o método submit da instância email. Apesar de email não ser um formulário, o Selenium submete o formulário a que o elemento pertence.
Agora que submetemos o formulário podemos averiguar se o sistema se comportou da forma que esperávamos.
Supomos que o comportamento esperado é exibir a mensagem: "Aluno Renan Cadastrado com sucesso.", dentro de um elemento com o atributo id preenchido como "result".
<div id="result">Aluno Renan Cadastrado com sucesso.</div>
Podemos fazer as asserções para verificar o resultado. Segue um exemplo utilizando JUnit:
Assert.assertEquals("Aluno Renan Cadastrado com sucesso.", result.getText());
Grande abraço.