gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:54:29 24 4
gpt4 key购买 nike

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

重点是我需要在Web应用程序中获取开放协议(protocol)的ID,然后转到另一个域中的后台来验证该协议(protocol)是否确实开放。这是放弃后的最后一个版本...

/// <reference types="cypress" />

describe("Testar abertura de protocolo no fale conosco", () => {
it("Deve acessar o FaleConosco, abrir um protocolo e depois validar no backoffice a abertura correta do mesmo", () => {
cy.visit(`${Cypress.env('FALE_CONOSCO_URL')}`)
cy.get("#BotaoCriarNovoChamado").click()

cy.get('#InputLabelCpfCnpj').type("99999999999")
cy.get('#InputLabelEmail').type("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="eb8e868a8287ab8e868a8287c5888486" rel="noreferrer noopener nofollow">[email protected]</a>")
cy.get('#InputLabelTelefone').type("99999999999")
cy.get('#InputLabelAssunto').type("Assunto de teste")
cy.get('#InputLabelDescricao').type("Essa aqui e uma descrição bem detalhada, confia")
cy.get('#BotaoEnviar').click()

cy.get('#spanNumeroDoChamado').should('contain', 'Número do chamado')
cy.get('#divNumeroDoChamado').then($div => {
const numero_do_chamado = $div.text().split(' ')[3].replace(/^#/, "");
// cy.wrap(numero_do_chamado).as("minhaVariavel");

// Enviar o valor do alias para o segundo domínio usando postMessage
cy.window().then((win) => {
win.postMessage({ type: "aliasValue", value: numero_do_chamado }, "*");
});
// Cypress.env('numero_do_chamado', numero_do_chamado);
// cy.log("numero_do_chamado - " + Cypress.env('numero_do_chamado'));
// cy.window().then(win => {
// win.localStorage.setItem('numero_do_chamado', numero_do_chamado);
// });
});


// cy.get('#divNumeroDoChamado').invoke("text").as("minhaVariavel")
// // ($div => {
// // const numero_do_chamado = $div.text().split(' ')[3].replace(/^#/, "");
// // cy.wrap(numero_do_chamado).as("minhaVariavel");

// // Enviar o valor do alias para o segundo domínio usando postMessage
// cy.window().then((win) => {
// win.postMessage({ type: "aliasValue", value: cy.get("@minhaVariavel") }, "*");
// });
// // // Cypress.env('numero_do_chamado', numero_do_chamado);
// // // cy.log("numero_do_chamado - " + Cypress.env('numero_do_chamado'));
// // // cy.window().then(win => {
// // // win.localStorage.setItem('numero_do_chamado', numero_do_chamado);
// // // });
// // });

});

it("Deve acessar o Conecta e validar a abertura correta protocolo", () => {
cy.visit(`${Cypress.env('URL')}`);

// Receber a mensagem contendo o valor do alias enviado pelo primeiro domínio
cy.window().then((win) => {
win.addEventListener("message", (event) => {
const message = event.data;

// Verificar se a mensagem contém o valor do alias
if (message.type === "aliasValue") {
const aliasValue = message.value;
cy.wrap(aliasValue).as("meuAliasCompartilhado");
}
});
});

// Fazer algo com o alias compartilhado no segundo domínio
cy.get("@meuAliasCompartilhado").then((valor) => {
// Faça algo com o valor do alias compartilhado
cy.log("Valor do alias compartilhado:", valor);
cy.login();
cy.visit(`${Cypress.env('URL')}/ticket-container/${Cypress.env('valor')}`)

});

});

})

最佳答案

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

  • 闭包变量
  • 别名
  • 环境变量 (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')
...
})

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

关于cypress - 当域不同时,如何将 Cypress 中的变量从一个测试(它)共享到另一个测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76381814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com