当域不同时,如何将 Cypress 中的变量从一个测试(它)共享到另一个测试?

Jor*_*uel 2 e2e-testing cypress

当域不同时,如何将变量从一个测试(它)共享到另一个测试?\n我尝试了无数种方法,使用别名、闭包、环境变量、本地存储,甚至使用事件侦听器,但是当下一个测试是执行后,这些变量将从内存中清除。

\n

重点是我需要在Web应用程序中获取开放协议的ID,然后去另一个域的后台验证该协议是否真的开放。\n这是放弃后的最后一个版本...

\n
/// <reference types="cypress" />\n\ndescribe("Testar abertura de protocolo no fale conosco", () => {\n    it("Deve acessar o FaleConosco, abrir um protocolo e depois validar no backoffice a abertura correta do mesmo", () => {\n        cy.visit(`${Cypress.env('FALE_CONOSCO_URL')}`)\n        cy.get("#BotaoCriarNovoChamado").click()\n        \n        cy.get('#InputLabelCpfCnpj').type("99999999999")\n        cy.get('#InputLabelEmail').type("email@email.com")\n        cy.get('#InputLabelTelefone').type("99999999999")\n        cy.get('#InputLabelAssunto').type("Assunto de teste")\n        cy.get('#InputLabelDescricao').type("Essa aqui e uma descri\xc3\xa7\xc3\xa3o bem detalhada, confia")\n        cy.get('#BotaoEnviar').click()\n\n        cy.get('#spanNumeroDoChamado').should('contain', 'N\xc3\xbamero do chamado')\n        cy.get('#divNumeroDoChamado').then($div => {\n            const numero_do_chamado = $div.text().split(' ')[3].replace(/^#/, "");\n            // cy.wrap(numero_do_chamado).as("minhaVariavel");\n\n            // Enviar o valor do alias para o segundo dom\xc3\xadnio usando postMessage\n            cy.window().then((win) => {\n                win.postMessage({ type: "aliasValue", value: numero_do_chamado }, "*");\n            });\n            // Cypress.env('numero_do_chamado', numero_do_chamado);\n            // cy.log("numero_do_chamado  -  " + Cypress.env('numero_do_chamado'));\n            // cy.window().then(win => {\n            // win.localStorage.setItem('numero_do_chamado', numero_do_chamado);\n            // });\n        });\n\n\n        // cy.get('#divNumeroDoChamado').invoke("text").as("minhaVariavel")\n        // // ($div => {\n        // //     const numero_do_chamado = $div.text().split(' ')[3].replace(/^#/, "");\n        // //     cy.wrap(numero_do_chamado).as("minhaVariavel");\n\n        // // Enviar o valor do alias para o segundo dom\xc3\xadnio usando postMessage\n        // cy.window().then((win) => {\n        //     win.postMessage({ type: "aliasValue", value: cy.get("@minhaVariavel") }, "*");\n        // });\n        // //     // Cypress.env('numero_do_chamado', numero_do_chamado);\n        // //     // cy.log("numero_do_chamado  -  " + Cypress.env('numero_do_chamado'));\n        // //     // cy.window().then(win => {\n        // //     // win.localStorage.setItem('numero_do_chamado', numero_do_chamado);\n        // //     // });\n        // // });\n\n    });\n\n    it("Deve acessar o Conecta e validar a abertura correta protocolo", () => {\n        cy.visit(`${Cypress.env('URL')}`);\n\n        // Receber a mensagem contendo o valor do alias enviado pelo primeiro dom\xc3\xadnio\n        cy.window().then((win) => {\n            win.addEventListener("message", (event) => {\n                const message = event.data;\n\n                // Verificar se a mensagem cont\xc3\xa9m o valor do alias\n                if (message.type === "aliasValue") {\n                const aliasValue = message.value;\n                cy.wrap(aliasValue).as("meuAliasCompartilhado");\n                }\n            });\n        });\n\n        // Fazer algo com o alias compartilhado no segundo dom\xc3\xadnio\n        cy.get("@meuAliasCompartilhado").then((valor) => {\n            // Fa\xc3\xa7a algo com o valor do alias compartilhado\n            cy.log("Valor do alias compartilhado:", valor);\n            cy.login();\n            cy.visit(`${Cypress.env('URL')}/ticket-container/${Cypress.env('valor')}`)\n\n        });\n\n    });\n\n})\n
Run Code Online (Sandbox Code Playgroud)\n

Suc*_*UKR 5

当测试运行程序更改域时,整个浏览器对象将被重置,因此写入浏览器内存的所有变量都会丢失

  • 闭包变量
  • 别名
  • 环境变量(Cypress.env)。

这样您就可以使用固定装置(磁盘存储)或与任务相关的伪数据存储(请参阅bahmutov/cypress-data-session)。

对于固定装置,代码是

it("Deve acessar o FaleConosco...", () => {
  cy.visit(`${Cypress.env('FALE_CONOSCO_URL')}`)
  ...
    const numero_do_chamado = $div.text().split(' ')[3].replace(/^#/, "")
    cy.writeFile('cypress/fixtures/numero_do_chamado.json', numero_do_chamado)
    ...
})

it("Deve acessar o Conecta...", () => {
  cy.visit(`${Cypress.env('URL')}`)
  ...
  const numero_do_chamado = cy.readFile('cypress/fixtures/numero_do_chamado.json')
  ...
})
Run Code Online (Sandbox Code Playgroud)

不要使用cy.fixture()命令,因为内部涉及缓存。对于您当前的情况来说不是问题,但当您的测试模式更改时可能会导致意外错误。