13
respostas

Testar se Campo Foi Preenchido

Galera, boa tarde, estou com a seguinte dificuldade que foge até um pouco do curso, seguinte, tenho um sistema que tem uns problemas de JavaScript loucos depois que voce preenche um campo, ele some do nada.

Então estava tentando fazer um metodo que preenchia o campo quantas vezes fosse necessário se ele estivesse em Branco, só que não funcionou muito bem.

Segue o código ->

public void preenche_campo_data_nascimento(String data_nascimento){
    preencherInput(By.id("formEfetivacaoFianca:telefone"), data_nascimento);
    timeout(1);
    driver.findElement(By.id("formEfetivacaoFianca:telefone")).sendKeys(Keys.TAB);
    timeout(2);

for(int vezes=0; vezes==1;){    
    String campo_preenchido = driver.findElement(By.id("formEfetivacaoFianca:telefone")).getText();
    if(campo_preenchido.isEmpty()){
        preencherInput(By.id("formEfetivacaoFianca:telefone"), data_nascimento);
        driver.findElement(By.id("formEfetivacaoFianca:telefone")).sendKeys(Keys.TAB);
        timeout(2);
    }
    else{
        timeout(1);    
        vezes = 1;
    }
}
}

O que acontece é que acho que não foi a melhor forma de implementar.

Pois as vezes ele preenche, e as vezes ele da erro , tentei com o While mas sem sucesso, o Campo é um campo Data de Nascimento com Mascara em JavaScript/Jquery.

Obrigado a todos.

13 respostas

Oi Patrick, eu geralmente tento ficar próximo da pergunta da pessoa... Mas nesse seu caso, acho que o melhor é a gente tentar descobrir o problema do seu javascript... esse código que vc escreveu parece realmente ser mais um tapa buraco :).

Alberto, a questão é que não temos como corrigir isso agora, é um Sistema que já existe na empresa, então temos que nos adaptar com as dificuldades e fazer funcionar, poderia me ajudar a melhorar esse código?

Olá Patrick,

você pode mandar a parte do js que está interferindo no campo texto que o selenium está tentando preencher? Além disso, poderia mandar também o teste que está chamando o método preenche_campo_data_nascimento para eu ver como a data está sendo passada? E por que você fazem o sendKeys(Keys.TAB)?

Lucas, não tenho acesso ao Metodo JS do Sistema, o mesmo não é liberado pra gente "EQUIPE DE TESTES".

o Metodo Preenche_campo_data_nascimento está postado já ai o Código, e dou um TAB, para ver se o JS não reseta o Campo, e na hora de validar ele vai está vazio ou ter alguma coisa.

Bom, já que não tem acesso, vamos ver. Uma coisa bizarra que eu encontrei nesse código aí é que aquele loop debaixo NUNCA é executado. Olha só:

for (int vezes = 0; vezes == 1;) {
    //...
}

Repare que o for inicializa vezes com 0 e já confere a condição. Como 0 != 1, imediatamente ela retorna negativo, e o programa sai do loop sem executar uma única vez. Altere a condição para vezes == 0. É o modo mais seguro usando int. Eu alteraria para usar uma boolean.

Marcos, então como ficaria?

for (int vezes == 0; vezes == 1;) {
    //...
}

Isso quer dizer que só vai sair quando o valor for ==1? Pois pensava que o Int = 0, atribuia o valor inicial da variavel.

Com um boleeano eu tentei, porém não entendi muito bem, perdão, sou iniciante rs

boolean campoPreenchido = false;
while (campoPreenchido) {
  if(...) {
    //seu código
  } else {
    timeout(1);
    campoPreenchido = true;
  }
}

mas isso ainda pode dar um loop infinito e travar seu programa

Marcos, vocÊ fala do Loop Infinito, na questão do código que você colocou?

Pois eu pensei em fazer assim ->

boolean campoPreenchido = false;
while (campoPreenchido) {
String valida_campo_preenchido = driver.findElement(by.id('ID').getText();
  if(valida_campo_preenchido.IsEmpty()) {
    //CAI AQUI
  } else {
    timeout(1);
    campoPreenchido = true;
  }
}

Será que assim funcionaria?

Testei algo do tipo, mas caiu em loop infinito, pois a minha condição no IF é um boolean que retorna...

O problema é que esse código Java não vai esperar por alteração do campo. Ele vai ficar travado nesse loop pra sempre e bloquear a interação do driver.

Agora, essa não é uma boa solução para o problema. Você tem que fazer um teste que prove se uma função está bem feita ou mal feita. Uma equipe de testes que não tem acesso ao código fonte não deveria ser responsável por solucionar o problema e sim por identificá-los e reportá-los.

Marcos, eu entendo, porém como só estamos começando a area de testes, e nossas regras de Negocio hoje são mais importantes a ser testadas, então deveriamos mesmo com gambiarra, fazer o teste passar nessa fase, pois não é um problema "GRAVE" que se diga...

Olá Patrick,

um coisa que pode estar causando o problema é justamente a string data_nascimento, porque dependendo do valor que você recebe ele não consegue colocar no campo com a máscara. Você pode me mandar o teste que está chamando o método preenche_campo_data_nascimento para eu ver qual o valor que o parâmetro data_nascimento está recebendo?

Olá lucas.takeshi , então, a String é passada através do Cumcumber que é nosso orquestrador dos testes, é passado(creio eu) normalmente como uma String

O valor que ele está recebendo é 22051977

Está sem mascara mesmo.