2
respostas

Não clica

Comando criado:

Cypress.Commands.add('registra', (email, fullName, userName, password) => {
    //cy.register();
    cy.contains('a', 'Register now').click();
    cy.contains('button', 'Register').click();
    cy.get('input[formcontrolname="email"]').type(email);
    cy.get('input[formcontrolname="fullName"]').type(fullName);
    cy.get('input[formcontrolname="userName"]').type(userName);
    cy.get('input[formcontrolname="password"]').type(password);
    cy.contains('button', 'Register').click();
})

A chamada:

it.only('Registra novo usuário válido', () => {
        cy.registra('jujuba@yahoo.com', 'Juju Balinha', 'juju21', '12345678');
        cy.contains('h4', 'Login').should('be.visible');
    })

No final ele não clica em Register, tem algo errado? Faz tudo só não clica no botão mesmo.

2 respostas

Acabei de fazer um teste rápido usando o Selenium e também não clica. Mais de uma hora tentando entender.

Oii Samir, como você está?

Peço desculpas pela demora em obter um retorno.

Isso pode estar acontecendo devido ao Cypress clicar no elemento do botão antes dele de fato ser clicável, uma vez que o site do Alurapic antes de cadastrar um novo usuário retornará algumas validações, como por exemplo: usuário existente, e-mail inválido, dentre outros. Sendo assim, tente adicionar um tempo de espera antes de realizar o clique, este tempo não precisa ser alto, apenas alguns segundos para o Cypress identificar com precisão o botão após as validações e efetuar o clique.

Para isso, podemos utilizar a função wait(), que recebe como parâmetro uma quantidade X de milisegundos. Neste caso, utilizaremos um segundo apenas, ou seja, o valor 1000. Em código, ficará do seguinte modo:

cy.contains('button', 'Register').wait(1000).click();

Código completo:

Cypress.Commands.add('registra', (email, fullName, userName, password) => {
    //cy.register();
    cy.contains('a', 'Register now').click();
    cy.contains('button', 'Register').click();
    cy.get('input[formcontrolname="email"]').type(email);
    cy.get('input[formcontrolname="fullName"]').type(fullName);
    cy.get('input[formcontrolname="userName"]').type(userName);
    cy.get('input[formcontrolname="password"]').type(password);
    cy.contains('button', 'Register').wait(1000).click();
})

Um ponto de atenção, é que a API retornará erro caso o usuário "juju21" já existir no banco de dados, por isso, caso seja visível a frase Username already taken, altere o nome do usuário, como por exemplo para "juju101".

Após essa modificação no comando registra, execute o comando npm run test e verifique se obterá êxito.

Espero ter ajudado. Fico à disposição.

Grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software