Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!