Cypress 为 Google Authenticator 生成过时的代码
Cypress generates outdated code for Google Authenticator
在 (20..30) 或 (50..60) 秒之间启动赛普拉斯 ui 测试会导致错误的 Google 2 因素令牌生成。它生成先前的令牌。
这是我的令牌生成函数:
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
以下是我在使用令牌之前获取令牌的方式:
let token = getToken()
看起来令牌是在测试开始时生成的(即使调用是在测试中间),并且令牌在使用时已经过时,因为新的周期已经开始。
这对你有用吗?
使用承诺功能。
describe('check the tokens', function()
{
// on 25 seconds
it('Test first token ',()=> {
cy.wait(25000).then(()=>{
let token = getToken();
console.log('first token: ' + token);
})
})
// on 55 seconds
it('Test second token', ()=>{
cy.wait(30000).then(()=>{
let token = getToken();
console.log('second token: '+ token);
});
})
})
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
避免等待
我会在页面上使用一个元素,而不是等待毫秒。
describe('check the tokens', function()
{
// First test
it('cy.window() - get the global window object', () => { cy.viewport(500, 780)
cy.visit('https://site.domain',)
cy.get('input[name=email]').type('email@server.io')
cy.get('input[name=password]').focus().type('qwerty123')
cy.get('.Button').click()
// Now lets wait on an object that appears on the page
// when ready to input the token
cy.get(<someElement>).then(()=>{
let token = getToken();
console.log('first token: ' + token);
})
})
//Second test
it('cy.window() - get the global window object', () => { cy.viewport(500, 780)
cy.visit('https://site.domain',)
cy.get('input[name=email]').type('email@server.io')
cy.get('input[name=password]').focus().type('qwerty123')
cy.get('.Button').click()
// Now lets wait on an object that appears on the page
// when ready to input the token
cy.get(<someOtherElement>).then(()=>{
let token = getToken();
console.log('second token: '+ token);
});
})
})
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
更高级
比等待元素更好的是等待网络事件或方法被调用... https://docs.cypress.io/api/commands/wait.html#Alias
在 (20..30) 或 (50..60) 秒之间启动赛普拉斯 ui 测试会导致错误的 Google 2 因素令牌生成。它生成先前的令牌。
这是我的令牌生成函数:
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
以下是我在使用令牌之前获取令牌的方式:
let token = getToken()
看起来令牌是在测试开始时生成的(即使调用是在测试中间),并且令牌在使用时已经过时,因为新的周期已经开始。
这对你有用吗?
使用承诺功能。
describe('check the tokens', function()
{
// on 25 seconds
it('Test first token ',()=> {
cy.wait(25000).then(()=>{
let token = getToken();
console.log('first token: ' + token);
})
})
// on 55 seconds
it('Test second token', ()=>{
cy.wait(30000).then(()=>{
let token = getToken();
console.log('second token: '+ token);
});
})
})
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
避免等待
我会在页面上使用一个元素,而不是等待毫秒。
describe('check the tokens', function()
{
// First test
it('cy.window() - get the global window object', () => { cy.viewport(500, 780)
cy.visit('https://site.domain',)
cy.get('input[name=email]').type('email@server.io')
cy.get('input[name=password]').focus().type('qwerty123')
cy.get('.Button').click()
// Now lets wait on an object that appears on the page
// when ready to input the token
cy.get(<someElement>).then(()=>{
let token = getToken();
console.log('first token: ' + token);
})
})
//Second test
it('cy.window() - get the global window object', () => { cy.viewport(500, 780)
cy.visit('https://site.domain',)
cy.get('input[name=email]').type('email@server.io')
cy.get('input[name=password]').focus().type('qwerty123')
cy.get('.Button').click()
// Now lets wait on an object that appears on the page
// when ready to input the token
cy.get(<someOtherElement>).then(()=>{
let token = getToken();
console.log('second token: '+ token);
});
})
})
function getToken () {
const totp = require('totp-generator');
const token = totp('2CQQGPPYFE7JPJAX');
return token;
}
更高级
比等待元素更好的是等待网络事件或方法被调用... https://docs.cypress.io/api/commands/wait.html#Alias