Cypress不支持外部登录 [英] Cypress doesn't work with an external login

查看:23
本文介绍了Cypress不支持外部登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Cypress在我的应用程序上进行e2e测试。 在我情况下,登录由外部服务管理。
当我想进入我的应用程序主页(https://myApplication/home),)时,系统会将我重定向到不同的超域中登录。
起初,CEPRESS似乎可以更改超级域,但一旦到达外部服务页面进行身份验证,系统就会进入登录错误(好像我们已经登录了,但不正确)。 此类型的行为不会发生在柏树之外。

是否有其他解决方案来管理Cypress测试中的外部访问,或者是否可以直接从Cypress进行管理?

我在我的cypress.json中添加了chromeWebSecurity:false,当我调用链接进行登录时,我添加了ailOnStatusCode:false, 但它仍然不起作用。

推荐答案

假设这是由SameSite cookie阻塞引起的,那么我就一直在解决同样的问题。我通过截取所有请求、检查它们是否有set-cookie头并重写SameSite属性来解决这个问题。可能还有一种更整洁的方法,因为这确实会把柏树仪表板弄得有点乱。

Sadly Zachary Costa的答案不再起作用,因为Chrome 94删除了SameSiteByDefaultCookies标志。

您可以将其作为命令添加以便于重复使用:

在您的命令文件中:

declare namespace Cypress {
  interface Chainable<Subject> {
    disableSameSiteCookieRestrictions(): void;
  }
}

Cypress.Commands.add('disableSameSiteCookieRestrictions', () => {
  cy.intercept('*', (req) => {
    req.on('response', (res) => {
      if (!res.headers['set-cookie']) {
        return;
      }

      const disableSameSite = (headerContent: string): string => {
        return headerContent.replace(/samesite=(lax|strict)/ig, 'samesite=none');
      }

      if (Array.isArray(res.headers['set-cookie'])) {
        res.headers['set-cookie'] = res.headers['set-cookie'].map(disableSameSite);
      } else {
        res.headers['set-cookie'] = disableSameSite(res.headers['set-cookie']);
      }
    })
  });
});

用法:

  it('should login using third party idp', () => {
    cy.disableSameSiteCookieRestrictions();
    //add test body here
  });

或者,也可以在每次测试之前运行它:

  beforeEach(() => cy.disableSameSiteCookieRestrictions());

这篇关于Cypress不支持外部登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆