You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress跨站测试问题:值传递及cy.intercept在cy.origin内报错

解决两个核心问题:跨域名传递CNPJ值 + 正确使用cy.intercept

1. 保存并跨域名传递生成的CNPJ值

你当前代码获取到CNPJ后未做存储,且cy.origin的回调是隔离上下文的,直接访问外部变量会失效。需要通过cy.origin的参数传递机制来传递CNPJ:

  • 在beforeEach中将获取到的CNPJ存入外部变量,再在it中通过cy.origin的args选项传入回调。

2. 解决cy.intercept()在cy.origin内的报错

Cypress不允许在cy.origin回调内定义cy.intercept,必须在回调外部提前定义,同时指定拦截请求的目标域名,确保拦截的是第二个网站的请求。

修改后的完整代码

describe('test', () => {
  let generatedCNPJ; // 存储生成的CNPJ

  beforeEach(() => {
    cy.visit('https://consulta.guru/gerador-cnpj-gratis');
    cy.contains('button', 'Gerar').click({ force: true });
    
    // 替换为实际生成CNPJ的API路径(需抓包确认)
    cy.intercept('GET', '**/gerar-cnpj').as('cnpjRequest'); 
    
    cy.wait('@cnpjRequest')
      .its('response.body.taxNumbers')
      .should('exist')
      .then(cnpj => {
        generatedCNPJ = cnpj; // 保存CNPJ到外部变量
      });
  });

  it('login and use CNPJ', () => {
    // 提前定义第二个网站的登录请求拦截,指定完整域名
    cy.intercept('POST', 'https://secondurl/api/login').as('loginRequest');

    cy.origin('secondurl', { args: { cnpj: generatedCNPJ } }, ({ cnpj }) => {
      cy.visit('/admin');
      
      cy.get('input[name="email"]').type('email');
      cy.contains('button', 'Avançar').click();
      
      // 使用外部定义的拦截别名
      cy.wait('@loginRequest')
        .its('response.body.generatedCode')
        .should('exist')
        .then(sixDigitCode => {
          cy.get('.css-k008qs > :nth-child(1)').type(sixDigitCode);
        });
      
      cy.contains('button', 'Avançar').click();
      
      // 使用传递过来的CNPJ
      cy.contains('p', 'Grupos').click();
      cy.get('input[name="search"]').type(cnpj);
    });
  });
});

关键说明

  • CNPJ传递:通过cy.origin的args选项将外部变量传入隔离的回调上下文,回调内通过解构({ cnpj })获取值。
  • intercept修正:在cy.origin外部定义拦截规则,明确指定第二个网站的请求URL,确保拦截目标正确,回调内可正常使用cy.wait('@loginRequest')。
  • API路径确认:需抓包验证第一个网站生成CNPJ的实际API路径,替换代码中的**/gerar-cnpj,保证能正确拦截请求。

内容的提问来源于stack exchange,提问作者Vinícius de Lima Cainé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:45:38