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
Legal Silas!
ResponderExcluirCurti a dica, eu atualmente automatizo testes usando JavaScript e achei uma solução bem parecida.