Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
El botón de inicio de sesión redirige a dos páginas. Para los que inician sesión por primera vez, se redirige a la página del acuerdo y, para el resto, se redirige directamente a la página de inicio.

Mi prueba de funcionalidad de inicio de sesión hace esto:

  1. Escriba nombre de usuario
  2. Escriba contraseña
  3. haga clic en el botón de inicio de sesión
  4. verifique la página del acuerdo

Mi POM para la página de inicio de sesión:

 class loginPage { fillUsername(value) { cy.get('[id=username]').clear().invoke('val', value); return this; } fillPassword(value) { cy.get('[id=password]').clear().invoke('val', value); return this; } clickLogin() { //cy.intercept('/portal/api/login').as('login') cy.contains("Login / S'identifier").click(); } checkForAgreementPage(){ const path ='/license-agreement' cy.wait(500) // <- All the problem is here in this line // If I comment this line cy.url() yields current page's url cy.url().then(($url) => { cy.log($url) if ($url.includes(path)) { //cy.log('Clicked') cy.get('[type=button]').contains('Accept').click(); } }); } } export default loginPage;

Mi función personalizada command.js:

 Cypress.Commands.add('login', (username, password) => { lp.fillUsername(username); lp.fillPassword(password); lp.clickLogin(); lp.checkForAgreementPage(); });

Mi archivo de especificaciones:

 it('TC01 - Login with valid data as wholesaler', () => { cy.login(id.username, id.password); // for valid data cy.visit('/users'); cy.logout(); }); it('TC05 - Login with username but no password ', () => { cy.login(id.username, id.password); // For invalid data cy.expected('span', 'Invalid username or password'); });

¿Cómo puedo eliminar la función de espera de la página de inicio de sesión de POM? y esperar hasta que se cambie la URL?

Además, intenté interceptar 'api/login' y esperé a que se cargara, pero esto fallará en las otras pruebas en las que estoy probando escenarios de inicio de sesión fallidos.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Es posible que desee tener dos métodos separados para manejar usuarios nuevos y usuarios existentes para manejar su escenario.

Por lo que parece, parece que solo está validando el nombre de pathname de la URL en su función checkForAgreementPage() . Aunque lo siguiente no tiene en cuenta otros escenarios que pueda tener en su suite, ya que hay una declaración if que puede implicar diferentes escenarios, puede eliminar la parte cy.url() y hacer lo siguiente en su lugar:

 checkForAgreementPage(){ const path ='/license-agreement' // The should will trigger retrying the previous command so cypress will // continuously check for the pathname to include the path until the // command timeout, so you don't have to have an explicit wait cy.location('pathname') .should('include', path) .then(cy.log) // can comment out if you don't want to log the pathname // now you can click on the accept button cy.get('[type=button]').contains('Accept').click(); });
over 4 years ago · Santiago Trujillo Denunciar

0

Intenté interceptar 'api/login' y esperé a que se cargara, pero esto fallará en las otras pruebas en las que estoy probando escenarios de inicio de sesión fallidos.

Interceptar es la mejor opción en mi opinión, pero puedo ver que con su estructura POM a veces necesita esperar el alias y otras veces no.

La forma más fácil de avanzar es hacer que la espera en la intercepción sea opcional,

 Cypress.Commands.add('login', (username, password, waitForUrl = false) => { lp.fillUsername(username); lp.fillPassword(password); cy.intercept('/portal/api/login').as('login') // ignored if not waited on lp.clickLogin(); if (waitForUrl) { cy.wait('@login') } lp.checkForAgreementPage(); }); it('TC01 - Login with valid data as wholesaler', () => { cy.login(id.username, id.password, true); // for valid data cy.visit('/users'); cy.logout(); }); it('TC05 - Login with username but no password ', () => { cy.login(id.username, id.password); // For invalid data cy.expected('span', 'Invalid username or password'); });

Muestra uno de los problemas cuando intentas encapsular demasiado las cosas, la lógica se arregla un poco en el "camino feliz".

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda