Validando seu Teste.
E vamos para mais um post do eterno manual “selenium em português”. (google!
)
Brincadeiras a parte, vamos falar sobre algo serio – Consistência de dados. Um teste de verdade não pode faltar pelo menos uma consistência de campo, de mensagens apresentadas, de erro gerado na tela ou similar.
Basicamente existem 2 funções que fazem esse trabalho para você: assertTrue e verifyTrue. A diferença de uma para outra é que o verifyTrue é nada mais que um assertTrue disfarçado, rs. Um falha o teste logo após não conseguir achar o elemento que você quer verificar (assertTrue) e o outro falha somente no final do teste (verifyTrue)
Não sei quanto a vocês mas a experiência me ensinou que não devo confiar muito no verifyTrue por diversos motivos.
1º Ele é uma extensão do SeleneseTestCase e se você estiver usando TestNG, pode conflitar com as blibliotecas de Junit dentro dele.
2º Acredito que só se deva validar uma mensagem ou texto se for critico para o sistema ou para garantir que você esta na pagina certa. Se falhar isso, o teste DEVE falhar NA HORA.
3º Ele não permite você personalizar sua mensagem de erro (veremos porque).
4º Biblioteca Assert do TestNG é mais parruda
Vamos ver alguns exemplos de erro de verifyTrue / assertTrue (junit – SeleneseTestCase) / assertTrue (testng):
Código:
assertTrue(selenium.isTextPresent("um texto qualquer que não vai ser encontrado.")); //Biblioteca SeleneseTestCase
“selenium.isTextPresent” é uma função que retorna um valor Booleano, ou seja, ele verifica se o parâmetro do tipo string se encontra na tela e retorna True ou False.
O código acima esta usando o assertTrue do Junit dentro da biblioteca SeleneseTestCase, e eis aqui a mensagem de erro que aparece no report:
<span style="color: #ff0000;">junit.framework.AssertionFailedError at junit.framework.Assert.fail(Assert.java:47) at junit.framework.Assert.assertTrue(Assert.java:20) at junit.framework.Assert.assertTrue(Assert.java:27) at TestandoConsistencia.AssertTrue_Do_SeleneseTestCase(TestandoConsistencia.java:35) ... Removed 22 stack frames </span>
Agora imagina você com vários scripts de teste, um mais complexo que o outro, e você se depara com um erro desses.
Senta e comece a debugar chorando =)
Código:
verifyTrue(selenium.isTextPresent("um texto qualquer que nao vai ser encontrado."));
Deus deve saber para que serve o verifyTrue na verdade e como ele funciona, por que eu e algumas pessoas no grupo selenium não sabem para que ele serve. Eu acho que foi uma tentativa frustrada, um erro na evolução que foi deixado de lado(eu ia dar um exemplo de torcedores do “curintia” mas seria preconceituoso d+, rs) e que esta só esta fazendo volume na documentação.
De acordo com o javadocs do SeleneseTestCase :
verifyTrue
public void <strong>verifyTrue</strong>(boolean b)Like assertTrue, but fails at the end of the test (during tearDown)
OU seja, ele deveria falhar no final do teste, mas não falha, meu teste deu “certo” mesmo sem ele achar “um texto qualquer que não vai ser encontrado.”
Mais um falso positivo para colocar na “conta do papa”.
Código:
assertTrue(selenium.isTextPresent("um texto qualquer que não vai ser encontrado.")); //Biblioteca Assert do TestNG
O mesmo assertTrue, porém agora da biblioteca do TestNG. Não tem muito o que falar.
Report:
<span style="color: #ff0000;">java.lang.AssertionError: expected:<true> but was:<false> at TestandoConsistencia.AssertTrue_Do_SeleneseTestCase(TestandoConsistencia.java:35) ... Removed 26 stack frames</span>
Já é possível ver a diferença. O erro em si ainda não diz muita coisa, mas ele vai direto ao ponto e te mostra a linha que deu falha e esconde Strack Trace do erro que não “serve de nada”.
Código:
assertTrue(selenium.isTextPresent("um texto qualquer que não vai ser encontrado."), "Erro ao procurar o 'texto qualquer'");
A cereja do bolo! o assertTrue do TestNG permite que você adicione uma mensagem de erro customizada.
Eu coloquei uma String hardcode mas você pode definir uma classe com mensagens de erros que você entenda e quando seu projeto já estiver grande, você sabia o que esta falhando logo quando ver o report e não só depois de debugar.
Report:
<span style="color: #ff0000;">java.lang.AssertionError: Erro ao procurar o 'texto qualquer' expected:<true> but was:<false> at TestandoConsistencia.AssertTrue_Do_SeleneseTestCase(TestandoConsistencia.java:35) ... Removed 25 stack frames</span>
Espero que não tenho ficado cansativo esse post.
Nos próximos posts vou tentar falar mais sobre funções do próprio selenium.
[]s!
Angelo Dias
102 dias ago
Com certeza não ficou cansativo… Ficou muito bom!
Consegui configurar e usar…
Agora tenho que adequar ao meu projeto!
Cara, muito bom seu blog!
Obrigado!
Sim, sou o Angelo do e-mail!
PARABÉNS PELO BLOG!