Saya seorang pemula di cypress, jadi harap bersabar dengan saya. ;-) Saya yakin ini pertanyaan sederhana dan saya sudah membaca dokumentasi cypress, tetapi sepertinya masih ada yang salah dalam pengujian cypress saya. Saya ingin menunggu permintaan xhr selesai, ketika saya mengklik bahasa lain dari halaman yang ingin saya uji. Ini berfungsi, ketika saya menggunakan wait(5000), tetapi saya pikir, ada cara yang lebih baik untuk menunggu permintaan xhr selesai daripada memperbaiki menunggu 5 detik. Ini adalah kode saya. Setiap bantuan atau petunjuk dihargai:

describe('test',() => {
    it('should open homepage, page "history", click on English language, click on German language',() => {
        cy.server();
        cy.route('POST','/ajax.php').as('request');
        cy.visit('http://localhost:1234/history');
        cy.wait('@request');
        cy.get('div[class="cursorPointer flagSelect flag-icon-gb"]').click({force:true});
        cy.route('POST','/ajax.php').as('request');
        cy.wait(['@request']);
        //cy.wait(5000); // <- this works, but seems to be not the best way
        cy.get('h2').should(($res) => {
            expect($res).to.contain('History');
        })
        cy.get('.dataContainer').find('.container').should('have.length', 8);
    });
});

Pemeriksaan terakhir

cy.get('.dataContainer').find('.container').should('have.length', 8);

Tidak berhasil, karena permintaan xhr belum selesai. Permintaan xhr diaktifkan, saat klik pada ikon selesai:

cy.get('div[class="cursorPointer flagSelect flag-icon-gb"]').click({force:true});

Berikut gambar permintaan xhr, jika itu membantu menemukan kesalahan:

enter image description here

Terima kasih atas bantuan apa pun.

7
dns_nx 23 Januari 2020, 09:23

2 jawaban

Jawaban Terbaik

Apakah Anda yakin bahwa baris ini benar? Jika tidak, cy.wait tidak akan berfungsi seperti yang Anda inginkan.

cy.route('POST','/ajax.php').as('request');

Saya mengharapkan sesuatu seperti

cy.route('GET','/endpoint').as('request');

Anda dapat mencari rute apa itu melalui alat pengembang (F12 di Chrome). Buka jaringan untuk memantau jenis XHR yang dimuat saat Anda membuka halaman.

Cari tahu URL permintaan dan Metode - contoh dengan bing.com

Juga: Saya lebih suka memasukkan perintah cy.server() dan cy.route() di beforeEach. Maka Anda hanya memerlukan cy.wait() dalam pengujian itu sendiri. Lihat https:// /docs.cypress.io/guides/references/best-practices.html#2-Run-shared-code-before-each-test untuk informasi lebih lanjut tentang itu.

1
Boyd K. 24 Januari 2020, 08:20

Anda harus melakukan seperti itu:

describe('test',() => { //no here async mode
    it('should open homepage, page "history", click on English language, click on German language', async () => { //but here
        cy.server();
        cy.route('POST','/ajax.php').as('request').as('requestToWait); // as-construction
        const requestToWait = await cy.wait('@requestToWait');//here we are waiting and getting response object
        // any other code
});
1
Dima 23 Januari 2020, 10:54