Я недавно начал работать с Cypress и создал небольшую демоверсию, чтобы увидеть, как она работает с селеновым веб-драйвером, который я использовал ранее.Однако есть проблема с навигацией, когда она случайно замедляется или просто приостанавливается при попытке загрузить страницу.
Я осмотрелся и обнаружил, что у других людей была такая же проблема, но часто это была проблема скод, медленная загрузка приложения, проблемы с памятью из-за длительных тестов или чего-то в этом роде.Но здесь все не так, это очень простой тест, и он просто скопирован из рабочего теста с помощью веб-драйвера.
Пока я пробовал вставлять ожидания (которые я совсем не люблю использовать), увеличивая defaultCommandTimeout, уменьшая numTestsKeptInMemory до 1, а также пытаясь работать в режиме без головы.Ничто из этого не имело никакого значения, и я немного запутался, что вызвало проблему в первую очередь.То же самое происходит на нескольких машинах с Windows 8.1 и 10.
Это файл спецификации (cypress.json содержит только baseurl, увеличенный 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()
})
});