quinta-feira, 7 de fevereiro de 2013

Continuação Dojo

Em continuação ao último post, hoje pretendo explicar o código de teste funcional que criei e se adequava ao desafio.
Em primeiro lugar se você pensa em escrever um código de teste legal aprenda o conceito de page objects. Isso ajudará você a economizar muitas linhas de código e facilitará a manutenção dos mesmos.

Iniciei a codificação mapeando os elementos da minha página em um objeto e criando métodos para que a minha classe de teste pudesse acessa-los. Os primeiros objetos mapeados, foram todos os campos do formulário como combos, inputs, buttons, etc. Feito isso já tinha o básico para iniciar a classe de testes.

public class PaginaFormularioCadastro {
    private WebDriver driver;

    public PaginaFormularioCadastro(WebDriver driver) {
        super();
        this.driver = driver;
    }
   
    public void selecionaPessoaFisica(){
        driver.findElement(By.id("legalEntity.F")).click();
       
    }
    public void selecionaPessoaJuridica(){
        driver.findElement(By.id("legalEntity.J")).click();
    }
    public void escreveNome(String nome){
        driver.findElement(By.id("firstName")).sendKeys(nome);
    }
    public void escreveUsuario(String usuario){
        driver.findElement(By.id("userName")).sendKeys(usuario);
    }
    public void escreveSenha(String senha){
        driver.findElement(By.id("password")).sendKeys(senha);
    }
    public void reEscreveSenha(String senha){
        driver.findElement(By.id("password2")).sendKeys(senha);
    }
    public void escreveEmail(String email){
        driver.findElement(By.id("email")).sendKeys(email);
    }
    public void queroInfoGrupo(){
        driver.findElement(By.id("complement.rbsEmail")).click();
    }
    public void queroInfoParceirosGrupo(){
        driver.findElement(By.id("complement.otherEmail")).click();
    }
    public void aceitaTermo(){
        driver.findElement(By.id("acceptTerms")).click();
    }
    public void cadastrar(){
        driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
    }
}

Antes disso preparei uma classe que conteria as assinaturas @before e @after, que poderão serem usadas por outras classes de teste. Iniciei a classe de teste estendendo a classe que cotei acima.

 public class Teste {
    protected WebDriver driver;
    protected String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://zerohora.clicrbs.com.br/wrs/action/update/newUser;jsessionid=ac19071f30d825732ff18c3a4149b3cfc47cf2a125ef.e34RbNaLchqQay0NbhmTc40.22?site=4446";
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        driver.get(baseUrl);
    }
    @After
    public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }
}
Comecei a chamar os métodos criados no objeto para fazer as simulações. Assim que essa etapa estava concluída e funcionando, precisava das assertivas para garantir que o teste passou, então implementei no objeto, métodos que faziam essas verificações.
Acabei os cenários de teste na minha classe e parti para verificar o funcionamentos. De cara eu sabia que teria problemas para atender aos critérios de aceite do teste devido a estar usando sempre o mesmo nome de usuário para cadastrar, mesmo assim executei o teste apenas modificando esse parâmetro e vi que o teste estava funcionando. Para resolver esse problema criei um objeto chamado usuário com o atributo username.

 public class Usuario {
    protected String username;
  
  
    public Usuario(String username) {
        super();
        this.username = username.replaceAll("[ :]", "");
    }
    protected String getUsername() {
        return username;
    }
    protected void setUsername(String username) {
        this.username = username.replaceAll("[ :]", "");
    }

}


 O construtor desse atributo pegava a hora e data do sistema, retirava espaços em branco e barras e convertia para string. Cada vez que eu executava o teste ele pegava um timestamp diferente. Resolvido isso meu teste ficou pronto para ser executado várias vezes sem precisar de ajuste a cada execução.
Done? Done!

Nenhum comentário:

Postar um comentário