有人在cypress中使用Google登录名的示例

时间:2018-11-26 18:44:35

标签: google-login cypress

我需要为使用联合登录(Google)的应用编写赛普拉斯测试。即使禁用了chromeWebSecurity,我也收到CORS错误。有人有任何示例代码吗?

describe('log in with google', ()=>{
  it('should work', ()=>{
    cy.visit('http://localhost:3000/')
    cy.contains('Log in with Google').click()
    cy.get("input#identifierId").type('gohawks12x3@gmail.com{enter}');
    cy.wait(5000);
    cy.get("input[@type=password]").type('<Pwd>{enter}');
  })
})

谢谢!

2 个答案:

答案 0 :(得分:3)

有一个名为cypress-social-login的库就可以做到这一点。
这是赛普拉斯团队的推荐,可以在cypress plugin page上找到。

https://github.com/lirantal/cypress-social-logins

此赛普拉斯库使执行第三方登录成为可能 (请考虑使用oauth),例如GitHub,Google或Facebook。

通过将登录过程委托给伪造者流程来完成, 执行登录并返回该应用程序的cookie 测试,以便可以在持续时间内通过调用赛普拉斯流对其进行设置 测试。

答案 1 :(得分:0)

我确实有一个可能对您有所帮助的解决方法。

长话短说,我正在测试一个 Angular 10+ 应用程序,该应用程序要求用户在访问任何内容之前先登录。同样,在运行我的任何测试之前,我必须确保有一个有效的用户登录。

  1. 因此,我解决这个问题的方法是创建一个具有有效电子邮件/密码的测试用户,该用户可以访问我的应用程序。

  2. 经过大约 1 周的研究但没有成功,我得出了以下解决方案:

/**
 * This spec needs to run first to make sure the user is logged in before accessing
 * the normal flow of the application. Renaming the file to '01_[filename]' does the trick :).
 */
describe("Google Login", () => {
  /**
   * 2nd param replaces the global config (cypress.json) only in the scope of the current .spec.
   * Similar to: Cypress.config('baseUrl', 'https://accounts.google.com');
   */
  it('should input email and password', { baseUrl:  'https://accounts.google.com', chromeWebSecurity: false }, function() {
    // Handling all errors and 'skipping' test to avoid global failure.
    cy.on('uncaught:exception', (err, runnable) => {
      console.error('Google Login -> uncaught:exception', err);
      this.skip();
    });

    cy.visit("/servicelogin");

    // Google Login Redirection: Email Input
    cy.url().should('contain', 'accounts.google.com')
      .get('input[type="email"]').type(Cypress.env('user'))
      .get('#identifierNext button').click().wait(3000);

    // Google Login Redirection: Password Input
    cy.url().should('contain', 'accounts.google.com')
      .get('input[type="password"]').type(Cypress.env('pass'))
      .get('#passwordNext button').click().wait(1500);
  });
});

在您的情况下,您可能希望将 Cypress.env('user')Cypress.env('pass') 替换为您正在使用的任何硬编码凭据。

请看看 cy.on('uncaught:exception', (err, runnable) => { 这就是诀窍。我并不真正关心测试 Google 登录或此测试的结果,这完全无关紧要,我只需要确保用户已登录,仅此而已。所以,如果这个测试失败(而且会失败),我就跳过它。

我正在使用 "cypress": "^6.8.0" 顺便说一句 :)