带有 Google 登录弹出窗口的 Angular Cypress.io 测试

bea*_*ode 5 angular angular-test cypress

是否可以使用 Google 身份验证弹出窗口通过 Cypress.io 登录 Google 帐户?

我可以打开窗口,但是赛普拉斯无法检测到电子邮件输入字段的 ID。

错误是:“CypressError:重试超时:预期找到元素:'#identifierId',但从未找到它。”

it('Login', function() {
    cy.visit('home')
    cy.get('#signin-button').click()
    cy.get('#google-login-button').click()
    // cy.wait(1500) // wait doesn't help
    cy.get('#identifierId')
    .type('user@gmail.com') // <<-- error here
  })
Run Code Online (Sandbox Code Playgroud)

Jen*_*ane 5

由于 Cypress 没有完全实现iframe 支持,因此这不起作用。

但是,赛普拉斯不建议在测试中访问第三方应用程序。造成这种情况的原因有很多,包括:

  • 这非常耗时并且会减慢你的测试速度。
  • 第 3 方网站可能已更改或更新其内容。
  • 第三方网站可能存在您无法控制的问题。
  • 第三方网站可能会检测到您正在通过脚本进行测试并阻止您。
  • 第 3 方网站可能正在运行 A/B 活动。

赛普拉斯在其文档中概述了访问您无法控制的第三方网站的缺点以及一些解决方法。我建议阅读此处的完整解释。

  • 好的,但恕我直言,我的项目是一个 SaaS 应用程序,它使用公共第 3 方 API 来实现其基本功能。我无法遵守“不使用任何第三方 API”或“不依赖互联网访问”的规则。如果没有互联网,我的应用程序实际上无法运行。 (4认同)
  • 是的,第三方是指您的身份验证服务依赖于另一方应用程序代码。如果在本地运行应用程序时 Google 宕机或您的互联网无法工作,您的应用程序将无法运行。这是识别您是否使用赛普拉斯所谓的“第 3 方站点”的好方法。 (2认同)
  • 抱歉,如果我说错了。我并不是说您不应该“使用”第 3 方 API,只是说端到端测试第 3 方应用程序功能有很多缺点,并且通常建议让大多数测试测试您的应用程序是否能够正常通信3rd 方 API。 (2认同)