Uso cy.intercept() y cy.wait() para escuchar la solicitud y obtener contenido de ella.
let number; describe("some test", () => { before(() => { cy.clearCookies(); }); it("some test", () => { cy.someCommand(); clientPage.someMethod(); cy.intercept("**/request").as("idNumber"); clientPage.someMethod1(); cy.wait("@idNumber").then((res) => { number = res.response.body.numbers.id }); cy.get(#someELement).type(number) }); });Me da "cy.type () solo puede aceptar una cadena o un número. Pasaste: indefinido" Cuando intento registrar cy.log (número) en "número = res.response.body.numbers.id" funciona . Cuando trato de pasar la variable fuera de este bloque de código, no está definida. ¿Cómo puedo pasarlo a los pasos posteriores?
Para asegurarse de que el valor de número se transmita al type , debe agregar un then , algo como:
let number describe('some test', () => { before(() => { cy.clearCookies() }) it('some test', () => { cy.someCommand() clientPage.someMethod() cy.intercept('**/request').as('idNumber') clientPage.someMethod1() cy.wait('@idNumber') .then((res) => { number = res.response.body.numbers.id }) .then(() => { cy.get('#someELement').type(number) }) }) }) Si desea usar la variable globalmente en todo el proyecto, puede usar el método Cypress.env() . Documentos de Cypress .
describe('some test', () => { before(() => { cy.clearCookies() }) it('some test', () => { cy.someCommand() clientPage.someMethod() cy.intercept('**/request').as('idNumber') clientPage.someMethod1() cy.wait('@idNumber').then((res) => { cypress.env('number', res.response.body.numbers.id) //Sets Number }) cy.get('#someELement').type(Cypress.env('number')) //Gets Number and types it }) it('some different test', () => { cy.get('#someELement').type(Cypress.env('number')) //types the number }) })Ocurre debido a la naturaleza asincrónica de cypress, y en el momento en que se llama number , su valor aún no estaba asignado. Cualquier otra acción se puede encadenar mediante el comando de wait sin contaminar su alcance con variables de contexto:
cy.wait("@idNumber").then((res) => { cy.get(#someELement).type(res.response.body.numbers.id) });La respuesta de @ alex-izbas es buena si necesita un uso inmediato.
En la opción de que necesite usarlo más adelante en su prueba, deberá configurarlo como .alias() y usarlo junto con function(){} y this palabra clave.
describe("some test", () => { before(() => { cy.clearCookies(); }); // use function() {} to be able to use this keyword it("some test", function() { cy.someCommand(); clientPage.someMethod(); cy.intercept("**/request").as("idNumber"); clientPage.someMethod1(); // use .its() to get the id and store in alias cy.wait("@idNumber") .its('response.body.numbers.id') .as('number') // some more actions // get alias using this keyword cy.get(#someELement).type(this.number) }); });