O Selenium WebDriver é
a união de duas ferramentas e visa facilitar a criação de testes automatizados
para interfaces de aplicações web. A intenção das novas versões do Selenium (a
partir da 2.0) é focar no desenvolvedor para que ele gere também os códigos dos
testes. Neste post vamos explicar em alguns passos como começar a fazer seus
próprios testes.
No nosso exemplo vamos utilizar como
linguagem de programação o Java e como ambiente de desenvolvimento o Eclipse. Para executar os testes utilizaremos o JUnit.
O primeiro passo é adicionar os JARs
para que consigamos utilizar o WebDriver. Para fazer o download da última
versão vá até http://code.google.com/p/selenium/downloads/list. Descompacte o arquivo e adicione os JARs ao seu
projeto no Eclipse clicando com o botão direito do mouse em cima da raiz do seu
projeto e depois em "Properties".
No menu esquerdo clique em "Java
Build Path", selecione a aba "Libraries" e clique em "Add
External JARs...". Navegue até a pasta onde estão os arquivos que você fez
download, selecione todos e clique em "Abrir". Depois clique em "OK".
Pronto, você já pode começar a gerar seus códigos de testes!
A partir de agora começaremos o nosso
teste. Neste exemplo vamos mostrar passo a passo como criamos um teste para
verificar a interface de autenticação do nosso sistema.
public class LoginTest {
@Test
public void loginTest() {
WebDriver driver = new FirefoxDriver();
driver.get("localhost:8080/elsa/login");
}
}
Inicialmente
nosso teste não verifica nada, apesar de ficar com a barra verde ele apenas
abre uma janela do Firefox com o endereço do nosso servidor de testes.
Roubamos... mas precisamos partir de algum lugar!
Após
verificar que a janela do navegador abriu corretamente a tela de autenticação do
sistema vamos tentar realizar a autenticação.
public class LoginTest {
@Test
public void loginTest() {
WebDriver driver = new FirefoxDriver();
driver.get("localhost:8080/elsa/login");
driver.findElement(By.id("username")).sendKeys("usuario");
driver.findElement(By.id("password")).sendKeys("senha");
driver.findElement(By.id("loginButton")).click();
}
}
Com
o WebDriver buscamos pelos elementos
exibidos na tela através dos seus identificadores e inserimos os valores
desejados para usuário e senha. Além de buscar pelos elementos da página por
seus id’s também é possível buscar
pelo nome da tag, do name, do link e até mesmo do estilo CSS aplicado ao elemento.
A
partir daqui nos damos conta que em qualquer teste do nosso sistema teremos que
passar pela tela de login, então podemos utilizar o padrão chamado de Page
Objects. Para tanto, criamos uma classe chamada LoginPage que inicialmente terá
um método que fará login no sistema.
public class LoginPage {
public void login(WebDriver driver){
driver.findElement(By.id("username")).sendKeys("usuario");
driver.findElement(By.id("password")).sendKeys("senha");
driver.findElement(By.id("loginButton")).click();
}
}
E
agora sim podemos realizar nosso teste, na classe LoginTest.
public class LoginTest {
public LoginPage loginPage;
public WebDriver driver;
@Before
public void setup() {
loginPage = new LoginPage();
driver = new FirefoxDriver();
driver.get("localhost:8080/elsa/login");
}
@Test
public void loginTest() {
loginPage.login(driver);
String welcomeMessage = driver.findElement(
By.xpath("/html/body/div/div[4]/div/ul/li/span")).getText();
assertEquals("Bem vindo ao Prontuário Eletrônico Online do ELSA.",
welcomeMessage);
}
}
Aqui já passamos a instanciar LoginPage e o WebDriver no método setup que está anotado com @Before e, desta forma, é executado sempre antes de cada método anotado com @Test. Além disso, buscamos o valor da mensagem de boas vindas através do método findElement e utilizamos como parâmetro a busca de um elemento presente na página pelo xpath correspondente. Finalmente, fizemos uma asserção para garantir que a mensagem que aparece é a esperada.
Agora que nosso teste está pronto executamos esperando a barra verde que instantaneamente fica vermelha, informando que o nosso teste falhou. Aqui vale uma breve explicação. Como estamos trabalhando com ambiente web, devemos saber que nem sempre a resposta é imediata para as requisições feitas para os servidores onde estão as aplicações. Então o melhor a ser feito para contornarmos o problema é implementarmos uma condição esperada de parada com um timeout, desta maneira o teste pode ser executado com mais confiabilidade.
Para tanto, será necessários
fazer algumas mudanças no método loginTest.
@Test
public void loginTest() {
loginPage.login(driver);
ExpectedCondition<Boolean> expectedCondition = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver webDriver) {
webDriver.findElement(By.xpath("/html/body/div/div[4]/div/ul/li/span"));
return true;
}
};
Wait<WebDriver> wait = new WebDriverWait(driver, 15);
wait.until(expectedCondition);
String welcomeMessage = driver.findElement(
By.xpath("/html/body/div/div[4]/div/ul/li/span")).getText();
assertEquals("Bem vindo ao Prontuário Eletrônico Online do ELSA.",
welcomeMessage);
}
Agora
sim, nosso teste é executado e temos a barra verde!
Basicamente
implementamos a condição de parada esperada que, neste caso, é o surgimento da
própria mensagem de boas vindas do sistema. Depois, instanciamos o wait com o nosso driver e um timeout de 15
segundos e esperamos que a condição seja satisfeita por no máximo 15 segundos,
caso contrário o teste falhará.
Claro
que o exemplo depende das credenciais utilizadas para realizar o login e apenas
ele não garante que a tela de login do nosso sistema está funcionando. Como
teste complementar podemos acessar o sistema com uma senha errada e fazer uma
asserção em cima da mensagem de falha de login.


4 comentários:
muito legal o post
Bom dia!
Não entendi essa parte :
" ExpectedCondition expectedCondition = new ExpectedCondition() {
public Boolean apply(WebDriver webDriver) {
webDriver.findElement(By.xpath("/html/body/div/div[4]/div/ul/li/span"));
return true;
}
}; "
no código aqui aparece a mesagem : Multiple markers at this line
- Syntax error on token "boolean", Dimensions expected after
this token
Nice Post
Postar um comentário