sexta-feira, 31 de outubro de 2014

Esperas inteligentes - Teste Automatizado iOS

Olá!
Esse é o segundo artigo sobre Teste Automatizado iOS.

Nesse artigo irei falar um pouco sobre um problema que esbarrei e como consegui resolver.

Algumas coisas realmente são diferentes do Selenium. 
O Instruments só aceita a linguagem JavaScript, limitando bastantes comandos que costumava a usar no Selenium.

Mas depois de algumas dificuldades, consegui resolver alguns.

Umas das dificuldades é esperar um elemento ser carregado na tela.
No Selenium, rapidamente usaria o Wait, esperando pelo elemento ser carregado ou sumir da tela, para depois interagir com um elemento.

Usando o Instruments não tem um Wait inteligente. O comando que existe é o Delay, onde você coloca um tempo determinado, e ele espera. É uma pausa na execução do teste.
É uma maneira de resolver o problema, mas não é a melhor.

Imagina o seguinte cenário: 

Ao clicar em um botão, dispara um elemento que fica carregando na tela, e que depois tenho que digitar algum dado em um campo de texto.
     
Poderia ver quanto tempo mais ou menos elemento fica carregando.
Depois poderia escrever o seguinte comando

          target.delay(3);

O comando acima dá uma pausa na execução do teste em 3 segundos.
O problema seria resolvido em parte, pois teríamos um outro problema:

     se demorar mais de 3 segundos, o teste irá falhar.
     se demorar 1 segundo, o teste só irá continuar depois de 2 segundos. Isso iria atrasar o teste.

Então como resolver o problema?
É muito simples e fácil.

Depois de clicar no botão usaria:

          target.delay(0.5);

O comando irá fazer uma pausa de apenas meio segundo.
E depois o seguinte código:

 do {
        var msgCarregando = window.staticTexts()["Carregando..."];
       
        if (!
msgCarregando.isValid()) {
            break;
        }
       
    } while (
msgCarregando.isValid());


O código acima funciona da seguinte maneira:
  •      crio a variável msgCarregando para guardar o nome do elemento carregando.
  •      depois verifico se o elemento é válido na tela usando a negação (!). Como o elemento está válido, sendo exibido, ele fica no loop até o elemento ficar inválido.
  •      depois do elemento ficar inválido (sem exibição), o IF é verdadeiro (elemento inválido) e executa o comando break, que logo interrompe o laço e vai para o próximo comando.

Essa é a maneira correta. Pois fica esperando até o elemento ficar inválido, não importando o tempo. Pode demorar 10 segundos ou 1 segundo.

Esse código deixa o teste mais dinâmico e inteligente.


Abraços e até a próxima! 
 ________________________________________

Gostou? Compartilhe

br.linkedin.com/pub/silas-fellipe/24/33a/950

Um comentário:

  1. Legal Silas!
    Curti a dica, eu atualmente automatizo testes usando JavaScript e achei uma solução bem parecida.

    ResponderExcluir