Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

221
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda