Playwright adalah kerangka kerja otomatisasi yang kuat untuk peramban web yang memungkinkan pengembang untuk menulis pengujian yang kuat dan efisien untuk aplikasi web. Salah satu fitur utama dari Playwright adalah sifat asinkronnya, yang memungkinkannya untuk menangani banyak operasi secara bersamaan. Inti dari perilaku asinkron ini adalah kata kunci await
, yang memainkan peran penting dalam mengelola alur operasi asinkron dalam skrip Playwright.
Dasar-Dasar Pemrograman Asinkron
Sebelum menyelami spesifikasi await
di Playwright, penting untuk memahami dasar-dasar pemrograman asinkron di JavaScript.
Dalam pemrograman sinkron tradisional, operasi dieksekusi satu demi satu, dengan setiap operasi memblokir eksekusi berikutnya sampai selesai. Ini dapat menyebabkan masalah kinerja, terutama ketika berhadapan dengan tugas-tugas yang memakan waktu seperti permintaan jaringan atau operasi file.
Pemrograman asinkron memungkinkan banyak operasi untuk dimulai tanpa menunggu operasi sebelumnya selesai. Pendekatan non-pemblokiran ini meningkatkan kinerja dan responsivitas, terutama dalam skenario yang melibatkan operasi I/O atau sumber daya eksternal.
Apa itu Playwright?
Sebelum menyelami await
dan perannya, mari kita bahas secara singkat apa itu Playwright. Playwright adalah pustaka Node.js sumber terbuka yang dikembangkan oleh Microsoft untuk mengotomatiskan peramban web. Ia mendukung Chromium, Firefox, dan WebKit, menjadikannya alat serbaguna untuk menguji aplikasi web di berbagai peramban.
Playwright memungkinkan pengembang dan penguji untuk menulis pengujian dengan fidelitas tinggi dan andal. Ia sangat dikenal karena kemampuannya untuk menangani banyak tab, iframe, dan bahkan mencegat permintaan jaringan. Tetapi untuk memanfaatkan potensi penuhnya, memahami pemrograman asinkron dan kata kunci await
sangat penting.
Promises dan Async/Await
JavaScript menggunakan Promises untuk menangani operasi asinkron. Sebuah Promise mewakili nilai yang mungkin tidak tersedia segera tetapi akan diselesaikan di masa mendatang. Sintaks async/await
, yang diperkenalkan di ECMAScript 2017, menyediakan cara yang lebih mudah dibaca dan dikelola untuk bekerja dengan Promises.
- Fungsi
async
selalu mengembalikan Promise. - Kata kunci
await
hanya dapat digunakan di dalam fungsiasync
. await
menjeda eksekusi fungsiasync
sampai Promise diselesaikan.
Peran await
di Playwright
Di Playwright, banyak operasi bersifat asinkron secara alami. Ini termasuk menavigasi ke halaman, berinteraksi dengan elemen, dan menunggu kondisi tertentu terpenuhi. Kata kunci await
digunakan secara ekstensif dalam skrip Playwright untuk menangani operasi asinkron ini secara efektif.
Inilah yang dilakukan await
di Playwright:
Menjeda Eksekusi: Ketika await
digunakan sebelum tindakan atau pernyataan Playwright, ia menjeda eksekusi skrip sampai tindakan atau pernyataan tersebut selesai.
Menyelesaikan Promises: Ia menunggu Promise yang dikembalikan oleh metode Playwright untuk diselesaikan, memungkinkan Anda untuk bekerja dengan nilai yang diselesaikan secara langsung.
Memastikan Pengurutan yang Tepat: Ia membantu menjaga urutan operasi yang benar, memastikan bahwa satu tindakan diselesaikan sebelum beralih ke tindakan berikutnya.
Menangani Kesalahan: Jika Promise yang ditunggu ditolak, await
melemparkan pengecualian, memungkinkan Anda untuk menangkap dan menangani kesalahan secara efektif.
Contoh Praktis await
di Playwright
Mari kita jelajahi beberapa skenario umum di mana await
digunakan dalam skrip Playwright:
1. Navigasi
test('Navigate to a page', async ({ page }) => {
await page.goto('https://example.com');
// The script waits until the page is loaded before proceeding
});
Dalam contoh ini, await
memastikan bahwa navigasi selesai sebelum pengujian dilanjutkan.
2. Berinteraksi dengan Elemen
test('Click a button', async ({ page }) => {
await page.click('#submit-button');
// The script waits for the click action to complete
});
Di sini, await
memastikan bahwa tindakan klik dieksekusi sepenuhnya sebelum melanjutkan.
3. Menunggu Elemen
test('Wait for element to be visible', async ({ page }) => {
await page.waitForSelector('#dynamic-content');
// The script pauses until the element is visible
});
Dalam kasus ini, await
menjeda skrip sampai elemen yang ditentukan menjadi terlihat di halaman.
4. Pernyataan
test('Check page title', async ({ page }) => {
await expect(page).toHaveTitle('Expected Title');
// The assertion is evaluated asynchronously
});
await
digunakan dengan pernyataan untuk memastikan mereka dievaluasi dengan benar, menunggu kondisi terpenuhi atau waktu habis jika tidak.
Pentingnya await
di Playwright
Menggunakan await
dengan benar di Playwright sangat penting karena beberapa alasan:
Sinkronisasi: Ia membantu menyinkronkan operasi asinkron, mencegah kondisi balapan dan memastikan bahwa tindakan dilakukan dalam urutan yang dimaksudkan.
Keandalan: Dengan menunggu operasi selesai, await
membuat pengujian lebih andal dan tidak rentan terhadap ketidakstabilan.
Penanganan Kesalahan: Ia memungkinkan propagasi kesalahan yang tepat, membuatnya lebih mudah untuk mengidentifikasi dan men-debug masalah dalam pengujian Anda.
Keterbacaan: await
membuat kode asinkron lebih mudah dibaca dan dipahami, karena memungkinkan Anda untuk menulis kode asinkron dengan cara yang lebih linier dan tampak sinkron.
Kesalahan Umum dan Praktik Terbaik
Meskipun await
sangat kuat, ada beberapa kesalahan umum yang harus dihindari dan praktik terbaik yang harus diikuti:
1. Lupa Menggunakan await
Salah satu kesalahan paling umum adalah lupa menggunakan await
sebelum operasi asinkron. Ini dapat menyebabkan perilaku yang tidak terduga dan kondisi balapan.
Salah:
test('Incorrect usage', async ({ page }) => {
page.click('#button'); // This is incorrect
expect(page.locator('#result')).toBeVisible();
});
Benar:
test('Correct usage', async ({ page }) => {
await page.click('#button');
await expect(page.locator('#result')).toBeVisible();
});
2. Menggunakan await
Secara Berlebihan
Meskipun penting untuk menggunakan await
untuk operasi asinkron, menggunakannya secara berlebihan dapat menyebabkan eksekusi berurutan yang tidak perlu, mengurangi manfaat pemrograman asinkron.
Kurang Efisien:
test('Sequential execution', async ({ page }) => {
await page.fill('#field1', 'value1');
await page.fill('#field2', 'value2');
await page.fill('#field3', 'value3');
});
Lebih Efisien:
test('Parallel execution', async ({ page }) => {
const [field1, field2, field3] = await Promise.all([
page.fill('#field1', 'value1'),
page.fill('#field2', 'value2'),
page.fill('#field3', 'value3')
]);
});
3. Menggunakan await
di Luar Fungsi Async
Ingatlah bahwa await
hanya dapat digunakan di dalam fungsi async
. Menggunakannya di luar akan menghasilkan kesalahan sintaks.
Salah:
test('Incorrect usage', ({ page }) => {
await page.goto('https://example.com'); // This will cause an error
});
Benar:
test('Correct usage', async ({ page }) => {
await page.goto('https://example.com');
});
4. Menangani Kesalahan
Selalu gunakan blok try-catch atau metode .catch()
untuk menangani potensi kesalahan saat menggunakan await
.
test('Error handling', async ({ page }) => {
try {
await page.click('#non-existent-button');
} catch (error) {
console.error('An error occurred:', error);
}
});
Penggunaan Lanjutan await
di Playwright
Saat Anda menjadi lebih mahir dengan Playwright, Anda akan menemukan skenario yang lebih canggih di mana await
memainkan peran penting:
1. Pernyataan Kustom
Saat membuat pernyataan kustom, Anda mungkin perlu menggunakan await
untuk menangani operasi asinkron dalam logika pernyataan.
expect.extend({
async toHaveCorrectApiResponse(page, expectedResponse) {
const response = await page.evaluate(() => fetchApiData());
return {
pass: JSON.stringify(response) === JSON.stringify(expectedResponse),
message: () => `Expected API response to match ${expectedResponse}`
};
}
});
test('Custom assertion', async ({ page }) => {
await expect(page).toHaveCorrectApiResponse({ status: 'success' });
});
2. Menangani Banyak Promises
Dalam skenario yang kompleks, Anda mungkin perlu menangani banyak promises secara bersamaan. Metode Promise.all()
, dikombinasikan dengan await
, berguna dalam kasus seperti itu.
test('Handle multiple promises', async ({ page }) => {
const [navigationPromise, dialogPromise] = await Promise.all([
page.waitForNavigation(),
page.waitForEvent('dialog'),
page.click('#submit-button')
]);
await dialogPromise.accept();
await navigationPromise;
});
3. Menunggu Bersyarat
Terkadang, Anda mungkin perlu menunggu kondisi yang mungkin atau mungkin tidak terjadi. Anda dapat menggunakan try-catch
dengan batas waktu untuk menangani skenario seperti itu.
test('Conditional waiting', async ({ page }) => {
try {
await page.waitForSelector('#popup', { timeout: 5000 });
await page.click('#close-popup');
} catch (error) {
// Popup didn't appear, continue with the test
}
});
Mengintegrasikan Playwright dengan Apidog
Mengintegrasikan Playwright dengan Apidog dapat membawa pengujian Anda ke tingkat berikutnya. Apidog menyediakan desain API, dokumentasi, dan alat pengujian yang kuat yang dapat melengkapi pengujian Playwright Anda, memastikan aplikasi web Anda berfungsi dengan benar baik di frontend maupun backend.
Mengirim API Anda dengan Apidog
Sekarang Anda memiliki API yang berfungsi dan frontend React, saatnya untuk menguji API Anda. Apidog adalah alat yang fantastis untuk ini.
Langkah 1: Buka Apidog dan buat permintaan baru.

Langkah 2: Di editor pengujian, masukkan URL endpoint API Anda, pilih metode HTTP, dan tambahkan header, parameter, atau data body yang Anda butuhkan. Misalnya, Anda dapat menguji rute yang mengembalikan pesan sederhana yang kita buat sebelumnya:

Langkah 3: Klik tombol Kirim dan lihat hasil pengujian Anda. Anda akan melihat kode status, waktu respons, dan body respons API Anda. Misalnya, Anda akan melihat sesuatu seperti ini:

Apidog adalah alat yang hebat untuk menguji API Anda, karena membantu Anda memastikan kualitas, keandalan, dan kinerja layanan web Anda. Ini juga menghemat waktu dan tenaga Anda, karena Anda tidak perlu menulis kode apa pun atau menginstal perangkat lunak apa pun untuk menguji API Anda. Anda cukup menggunakan browser Anda dan menikmati antarmuka dan fitur Apidog yang ramah pengguna.
Kesimpulan
Memahami apa yang dilakukan await
di Playwright sangat penting untuk menulis pengujian yang efektif dan andal. Dengan memanfaatkan async/await, Anda dapat memastikan bahwa setiap langkah skrip pengujian Anda dieksekusi dalam urutan yang benar, mencegah potensi masalah dan meningkatkan kemampuan pemeliharaan pengujian Anda.
Ingatlah untuk mengunduh Apidog secara gratis untuk lebih meningkatkan toolkit pengujian Anda. Dengan Playwright dan Apidog digabungkan, Anda akan memiliki solusi komprehensif untuk pengujian frontend dan backend.