Cypress 12 cy.origin多标签测试遇origin不匹配错误求助
问题原因
报错的核心是**cy.origin的第一个参数必须与实际访问页面的origin完全匹配**,且需要传入纯origin(不带路径的域名部分),而你直接传入了从页面提取的完整Instagram链接(包含路径,比如https://www.instagram.com/blender);同时Cypress将带www和不带www的域名视为两个完全不同的origin,这就导致了预期与实际origin不匹配的报错。
解决方案
- 从提取的href中解析出纯origin部分,而非直接传入完整URL
- 确保传入
cy.origin的origin与实际访问的域名完全一致(带www就用带www的版本)
修改后的代码:
When('I change the origin of my test configuration', () => { cy.window().then((win) => { cy.stub(win, 'open').as('Open'); }); const url = Cypress.config('baseUrl'); cy.visit(url); cy.window().scrollTo('bottom'); cy.get('.social-icons__instagram') .invoke('attr', 'href') .then((instaHref) => { // 从完整链接中解析出纯origin部分 const instaOrigin = new URL(instaHref).origin; cy.origin(instaOrigin, { args: instaHref }, (instaHref) => { cy.visit(instaHref); cy.contains('Allow essential and optional cookies').click(); }); }); cy.visit(url); });
关键修改点说明
- 使用
new URL(instaHref).origin解析正确origin:比如从https://www.instagram.com/blender中提取出https://www.instagram.com,这才是cy.origin要求的参数格式。 - 保持访问链接为完整的
instaHref,既符合cy.origin的参数规则,又能正确跳转目标页面。 - 去掉全局变量
instaUrlString,改用cy.origin的args参数传递值,更贴合Cypress异步执行逻辑。
内容的提问来源于stack exchange,提问作者Valeriia
相关产品推荐
相关产品推荐

