Dúvida - Preenchendo formulário com protractor

Pessoal,

Estou automatizando uma tela de formulário usando protractor com mocha, e estou com um problema. O teste faz login, clica no link da página para abrir o formulário, porém somente preenche 2 campos do formulário e fecha o browser.
Já revisei os localizadores e estão corretos. Alguém já passou por isso?
Achei que pudesse ser algo relacionado a promisses, mas li na documentação do protractor que ele mesmo se vira com isso, ou seja, ao preencher um campo do formulário, ele aguarda o preenchimento para iniciar o próximo.

O erro que dá é: “Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure “done()” is called; if returning a Promise, ensure it resolves.”

Isso ocorre porque ele tenta, não preenche e dá mais que 2 segundos.

Alguma luz? Alguém já teve algum problema assim?

Bernadete, terias como colar o gist (http://gist.github.com) do código, por favor?

@bernadete Pelo que eu pude perceber, na sua função criarUsuario você não está passando todos os parametros.

Atualmente você está passando apenas dois paraemtros: nome e email. Cadê o resto? empresa, cpf, telefone, etc…?

Outra coisa que eu gosto de usar bastante é o beforeAll ao invés de beforeEach, isso te economiza tempo e o browser não fica abrindo e fechando em cada it

Aqui eu tenho um repositório usando protractor com page objects https://github.com/rafaelcs/angular-task-manager-tests espero que tu possa te guiar nele e te ajudar.

O @Rafa matou a charada, a questão é que preenche apenas os 2 primeiros campos devido a que eles possuem valores (nome e email), e no terceiro fica aguardando o valor de empresa até ocorrer timeout.

Na função criarUsuario passe o parâmetro para as variáveis restantes:

  • empresa
  • cpf
  • telefone
  • login
  • senha
  • confirmacaoSenha

Corrigindo:
Você está passando todos os valores no spec, porém a função recebe apenas 2 valores no page object, que são nome e email:
Spec:
usuario.criarUsuario("maria", "maria@hotmail.com", "Company", "53342049626", "1123654789", "mariapia", "mariapia123", "mariapia123");

Page Object:
criarUsuario(nome, email) {

Altere a função no page object para receber mais que apenas esses 2 valores.

Você também poderia passar um objecto para a função criarUsuário, para não ter tantos parâmetros.

Algo como o seguinte:

const user = {
    name: "maria",
    email: "maria@email.com"
    ...
}

createUser(user);

Daí createUser faria algo como:

createUser(userData) {
  
    this.name().sendKeys(userData.name);
    this.email().sendKeys(userData.email);
    ...
}

@walmyr @paulo-gonçalves @Rafa Obrigada pelo retorno.
Sim a minha função eu estava passando incompleta. Mas mesmo ajustando não estava funcionando. Aí reparei que após 2 segundos fechava o browser (que era os 2000 milisegundos da mensagem de erro). Aí acrescentei “this.timeout(15000)” no início de cada it. Aí sim ele completou todos os campos. Um detalhe que descobri com um desenvolvedor, que pode ajudar muita gente é que como eu estava usando função lambda () = >, o this do this.timeout não funciona. Então alterei meus testes para function() e aí sim, funcionou. ;)

@walmyr Acho que vou seguir sua sugestão. Assim deixo a massa concentrada num único local. Mais fácil para manter.

Valeu galera, vocês sempre me ajudam muito.

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.