我最近开始使用cypress,并构建了一个小示例,以了解它如何抵御我以前使用的Selenium Webdriver。但是,导航存在一个问题,在尝试加载页面时,导航会随机变慢或超时。
我环顾四周,发现其他人也有同样的问题,但这通常是代码问题,应用程序加载缓慢,由于长时间测试或类似问题而导致的内存问题。不过,这里不是所有情况,这是一个非常简单的测试,只是使用webdriver从正在运行的测试中复制而来。
到目前为止,我已经尝试插入等待(我根本不喜欢使用),增加defaultCommandTimeout,将numTestsKeptInMemory减小为1以及尝试以无头模式运行。不过,这些都没有任何区别,而且我有点困惑最初导致问题的原因。在装有Windows 8.1和10的多台计算机上也会发生相同的事情。
这是规格文件(cypress.json仅包含基本URL,增加的defaultCommandTimeout和降低的numTestsKeptInMemory):
const urls = {
signup:'/sign-up',
signin:'/sign-in',
documents:'/gh/documents',
post_login:'/gh/documents',
signup_success_url:'/registration-success',
signup_complete_url:'/gh/documents',
my_account: '/gh/profile/account-settings',
post_logout: '/'
};
const tmp = {
username:'',
password:''
};
afterEach(function() {
if(this.currentTest.state === 'failed') {
cy.log('test failed, aborting')
Cypress.runner.stop();
}
});
function get_signup_data(which) {
if(which === 'mail') {
return 'test' + Math.floor(Math.random() * 100000) + '@auto.test';
} else if(which === 'password') {
let pw = "";
let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 8; i++)
pw += possible.charAt(Math.floor(Math.random() * possible.length));
pw += '!';
return pw;
}
}
describe('account creation', function() {
it('can reach registration page', function() {
cy.visit(urls.signup);
cy.location().should((loc) => {
expect(loc.pathname).to.eq(urls.signup)
})
});
it('can fill form', function() {
cy.wait(2000);
let username = get_signup_data('mail');
let password = get_signup_data('password');
cy.log('creating user with values: '+username+':'+password);
cy.get('input[name=email]').type(username);
cy.get('input[name=password').type(password);
cy.get('input[name=confirmPassword').type(password);
cy.get('input[name=agreeOnTermsAndPrivacy').click();
cy.get('#createAccountsButton').click();
cy.location().should((loc) => {
expect(loc.pathname).to.eq(urls.signup_success_url);
});
tmp.username = username;
tmp.password = password;
});
it('can get certificate', function() {
cy.get('input').click();
cy.get('[data-test=loginSuccessBtn').click();
});
it('gets redirected to my documents page', function() {
cy.wait(2000);
cy.location().should((loc) => {
expect(loc.pathname).to.eq(urls.signup_complete_url);
})
});
it('can logout', function() {
cy.wait(2000);
cy.visit(urls.my_account);
cy.wait(4000);
cy.get('button.Link--logout').click();
cy.location().should((loc) => {
expect(loc.pathname).to.eq(urls.post_logout);
})
});
});
describe('account deletion', function() {
it('has credentials', function() {
expect(tmp.username).to.not.undefined;
expect(tmp.username).to.not.undefined;
});
it('can login', function() {
cy.wait(2000);
cy.visit(urls.signin);
cy.wait(4000);
cy.get('input[name=email]').type(tmp.username);
cy.get('input[name=password').type(tmp.password);
cy.get('[data-test=loginButton]').click();
cy.location().should((loc) => {
expect(loc.pathname).to.eq(urls.post_login);
})
});
it('can delete account', function() {
cy.wait(2000);
cy.visit(urls.my_account);
cy.wait(10000);
cy.get('button').contains('Delete').click();
cy.wait(2000);
cy.get('.Modal button').contains('Delete account').click()
})
});