Cypress.io导航超时

时间:2019-02-18 19:23:03

标签: cypress

我最近开始使用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()
    })
});

0 个答案:

没有答案