Тайм-ауты навигации Cypress.io - PullRequest
       11

Тайм-ауты навигации Cypress.io

0 голосов
/ 18 февраля 2019

Я недавно начал работать с 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()
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...