我需要为使用联合登录(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}');
})
})
谢谢!
答案 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 周的研究但没有成功,我得出了以下解决方案:
/**
* 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"
顺便说一句 :)