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

224
Vistas
Cypress: visitar dos sitios web diferentes y almacenar valor en variable

Soy nuevo en Cypress, necesito en la misma prueba, visitar dos URL diferentes y almacenar un valor de la primera, para usar en la segunda.

Necesito visitar este sitio web: https://consulta.guru/gerador-cnpj-gratis haga clic en "Gerar" y copie el valor generado para usarlo en el segundo sitio web.

No pude guardar este valor generado en una variable, y cuando intenté usar la función cy.origin para acceder a otra URL, recibí este error: "El uso de cy.intercept() no es compatible con la devolución de llamada de cy.origin() Considere usarlo fuera de la devolución de llamada en su lugar".

Pero el uso de cy.intercept es esencial dentro de esta devolución de llamada. Pondré el código que hice hasta ahora (oculta información confidencial).

 describe('test', () => {
 
 beforeEach(() => {

 cy.visit('https://consulta.guru/gerador-cnpj-gratis');
 cy.contains('button', 'Gerar').click({force: true});
 cy.intercept('1').as('cnpj');
 cy.wait('@cnpj')
 .its('response.body')
 .should('have.property', 'taxNumbers')
 .then(cnpj => {
 })
 })

 it('login', () => {
 cy.origin('secondurl', () => {
 cy.visit('/admin');
 cy.get('input[name="email"]').type('email');
 cy.intercept('login').as('login');
 cy.contains('button', 'Avançar').click();
 cy.wait('@login')
 .its('response.body')
 .should('have.property', 'generatedCode')
 .then(sixDigitCode => {
 cy.get('.css-k008qs > :nth-child(1)').type(sixDigitCode);
 })
 cy.contains('button', 'Avançar').click();
 
 //teste
 cy.contains('p', 'Grupos').click();
 cy.get('input[name="search"]').type(cnpj);
 })
 })
})
almost 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Simplemente puede declarar una variable antes de que se ejecuten las pruebas, dentro de la descripción, luego almacenarla en la variable y usarla en la segunda prueba.

 describe('test', () => {
 
let myvar = "";

beforeEach(() => {

 cy.visit('https://consulta.guru/gerador-cnpj-gratis');
 cy.contains('button', 'Gerar').click({force: true});
 cy.intercept('1').as('cnpj');
 cy.wait('@cnpj')
 .its('response.body')
 .should('have.property', 'taxNumbers')
 .then(cnpj => {
 myvar = cnpj;
 })
})

it('login', () => {
 cy.origin('secondurl', () => {
 cy.visit('/admin');
 cy.get('input[name="email"]').type('email');
 cy.intercept('login').as('login');
 cy.contains('button', 'Avançar').click();
 cy.wait('@login')
 .its('response.body')
 .should('have.property', 'generatedCode')
 .then(sixDigitCode => {
 cy.get('.css-k008qs > :nth-child(1)').type(sixDigitCode);
 })
 cy.contains('button', 'Avançar').click();

 //teste
 cy.contains('p', 'Grupos').click();
 cy.get('input[name="search"]').type(cnpj);
})
})
})
almost 4 years ago · Santiago Trujillo Denunciar

0

El cy.origin() tiene algunas limitaciones.

Tienes dos opciones que puedo ver

Use dos pruebas en lugar de beforeEach()

Cypress se complace en visitar dos dominios en pruebas separadas, por lo que puede cambiar beforeEach() a it() .

Sin embargo, el navegador/ejecutor se reinicia por completo entre dominios , por lo que no puede usar un alias, una variable o una propiedad en el objeto Cypress para pasar el valor de taxNumbers a la siguiente prueba.

Tendría que guardar los números de impuestos en un accesorio (o puede guardarlos en una tarea)

 it('gets taxNumber', () => {
 cy.visit("https://consulta.guru/gerador-cnpj-gratis");
 cy.contains("button", "Gerar").click({ force: true });

 cy.intercept("1").as("cnpj");
 cy.wait("@cnpj")
 .its("response.body")
 .should("have.property", "taxNumbers")
 .then((cnpj) => { 

 // save to fixture
 cy.writeFile('./cypress/fixtures/tax-numbers.json', cnpj) 

 });
});

it("login", () => {

 cy.visit('http://example.com') // 2nd domain (for example)

 cy.fixture('tax-numbers.json').then(taxNumbers => {
 expect(taxNumbers).to.not.eq(undefined) // ✅ passes
 })
});

Use cy.request() para obtener los números de impuestos

Esto es mucho más eficiente: no implica cargar la página.

Eche un vuezo a la pestaña de red de devtools, tome la URL completa del archivo con valores y consúltelo usando cy.request() .

 let taxNumbers;

beforeEach(() => {
 cy.request('https://api.nfse.io/Generate/LegalEntities/taxNumber/1')
 .then(response => {
 taxNumbers = response.body.taxNumbers
 })
})

it("login", () => {

 cy.visit('http://example.com') // 2nd domain (for example)

 expect(taxNumbers).to.not.eq(undefined) // ✅ passes
});
almost 4 years ago · Santiago Trujillo Denunciar

0

Probé con la segunda opción, pero no sé dónde poner esta parte: "expect (taxnumbers) .to.not.eq (undefined)"

Intentar usar los "números de impuestos" para llenar un campo tampoco funcionó de esta manera: cy.get('input[name="searchGroup"]').type(taxNumbers);

El error fue: "cy.type() solo puede aceptar una cadena o un número. Pasaste: [objeto Objeto]Más información "

 let taxNumbers;

 beforeEach(() => {
 cy.request('https://api.nfse.io/Generate/LegalEntities/taxNumber/1')
 .then(response => {
 taxNumbers = response.body.taxNumbers
 })
 })
 
 it('login', () => {
 cy.visit('second domain');
 cy.get('input[name="email"]').type('myemail');
 cy.intercept('login').as('login');
 cy.contains('button', 'Avançar').click();
 cy.wait('@login')
 .its('response.body')
 .should('have.property', 'generatedCode')
 .then(sixDigitCode => {
 cy.get('.css-k008qs > :nth-child(1)').type(sixDigitCode);
 })
 cy.contains('button', 'Avançar').click();
 
 //teste
 cy.contains('p', 'Grupos').click();
 cy.get('input[name="searchGroup"]').type(taxNumbers);
 })
almost 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