Prompt dan cakupan
Sebuah tim ingin memigrasikan intersepsi jaringan browser dari protokol debugging privat ke WebDriver BiDi. Jelaskan bagaimana Anda mendesain penyiapan sesi, langganan event, siklus hidup intersepsi, isolasi konkurensi, dan pemulihan kegagalan.
Hal yang dievaluasi oleh pewawancara
- Pemahaman bahwa BiDi adalah protokol WebDriver dua arah yang digerakkan oleh event (event-driven) dan masih berstatus W3C Working Draft.
- Membedakan tanggung jawab sesi, konteks, id intersepsi, id permintaan (request id), dan langganan event.
- Membatasi cakupan intersepsi berdasarkan pola URL, fase, dan konteks untuk mencegah kontaminasi silang antar-pengujian.
- Merancang batas waktu (timeout), pembatalan, penanganan pemutusan koneksi, dan penyuntingan data sensitif (redaction) daripada hanya menyajikan skrip.
Pertanyaan klarifikasi
- Apakah pengujian hanya mengamati lalu lintas, atau memodifikasi/memblokirnya pada fase permintaan atau respons?
- Apakah browser, driver, dan runtime mendukung modul BiDi yang diperlukan?
- Apakah setiap pengujian memiliki konteks browser sendiri, dan berapa lama aturan serta log event disimpan?
- Saat terjadi kegagalan, apakah jaringan nyata harus dipulihkan atau pengujian harus langsung gagal disertai diagnostik?
Kerangka jawaban 30 detik
Untuk setiap pengujian, saya akan membuat sesi BiDi dan konteks penjelajahan yang terisolasi, menegosiasikan kapabilitas, dan hanya berlangganan event yang diperlukan. Aturan akan membatasi URL, fase, dan konteks; event seperti beforeRequestSent akan mengarah pada satu keputusan per id permintaan: lanjutkan, blokir, atau berikan respons tiruan (mocked response). Setiap aturan memiliki timeout dan hook pembersihan. Pemutusan koneksi akan menghentikan mutasi dan menggagalkan pengujian sebagai kegagalan infrastruktur, sementara log hanya menyimpan metadata yang telah disunting. Lalu lintas produksi tidak pernah menggunakan pencegat ini.
Pembahasan mendalam langkah demi langkah
1. Konfirmasikan batasan protokol dan implementasi
WebDriver BiDi menggunakan WebSocket untuk komunikasi dua arah yang digerakkan oleh event; versi W3C 1 Juni 2026 masih merupakan Working Draft. Klien harus membaca kapabilitas driver dan browser daripada berasumsi bahwa bidang draf stabil di semua platform. Perintah HTTP WebDriver klasik dapat berdampingan dengan event BiDi, tetapi satu saluran harus menjadi otoritas untuk setiap bagian status (state).
2. Buat sesi dan konteks yang terisolasi
Pada awal pengujian, buat sesi dan konteks penjelajahan yang terisolasi, lalu catat pemetaan sesi, konteks, dan id eksekusi pengujian. Berikan setiap aturan intersepsi id intersepsi yang unik dan ikat hanya ke pola URL, fase, dan konteks yang diperlukan. Pada saat teardown, berhenti berlangganan, hapus intersepsi, dan tutup konteks dalam urutan terbalik agar aturan tidak bocor ke pengujian berikutnya.
3. Rancang keputusan event dan intersepsi
Berlangganan event jaringan dengan session.subscribe, lalu gunakan id permintaan di setiap event untuk menemukan status pengujian. Permintaan yang cocok mendapatkan tepat satu tindakan eksplisit: lanjutkan, blokir, atau berikan respons pada fase yang didukung. Lapisan keputusan memerlukan kunci idempoten dan batas waktu. Id permintaan yang tidak dikenal, event duplikat, atau fase yang tidak didukung akan diarahkan ke error yang dapat diamati alih-alih dilanjutkan secara diam-diam.
4. Tangani konkurensi, pemutusan koneksi, dan keamanan
Pengujian konkuren tidak boleh berbagi tabel intersepsi yang dapat berubah (mutable); setiap konteks memiliki aturan dan buffer event-nya sendiri. Pada saat WebSocket terputus, hentikan modifikasi lalu lintas, tandai pengujian sebagai kegagalan infrastruktur, sunting dan simpan URL, status, serta linimasa, lalu lakukan pembersihan. Sunting header, cookie, body, dan token secara default. Jalankan hanya di browser pengujian dengan kredensial pengujian berumur pendek, jangan pernah dijalankan terhadap domain produksi.
Contoh jawaban berkualitas tinggi
Saya akan memperlakukan BiDi sebagai batasan protokol, bukan menyalin route API dari salah satu pustaka otomatisasi. Setiap pengujian mendapatkan sesi dan konteks penjelajahan yang terisolasi, membaca kapabilitas, dan berlangganan event jaringan yang diperlukan. Intersepsi memiliki id unik dan dibatasi oleh pola URL, fase, dan konteks; event menggunakan id permintaan untuk membuat satu keputusan: lanjutkan, blokir, atau mock. Teardown membatalkan langganan, menghapus aturan, dan menutup konteks dalam urutan terbalik. Setiap tindakan memiliki batas waktu, idempotensi, dan rekaman diagnostik. Pemutusan koneksi WebSocket menggagalkan pengujian sebagai infrastruktur dan melakukan pembersihan alih-alih memutasi lalu lintas dalam status yang tidak diketahui. Log disunting, browser pengujian diisolasi dari produksi, dan perbedaan kompatibilitas dinyatakan secara eksplisit dalam matriks kapabilitas.
Kesalahan umum
- Memperlakukan bidang Working Draft sebagai API yang stabil di setiap browser dan driver.
- Melakukan intersepsi secara global berdasarkan URL tanpa pembatasan konteks, fase, atau cakupan pengujian.
- Gagal berlangganan terlebih dahulu, atau mencampuradukkan id event, intersepsi, dan konteks.
- Terus mengirimkan mutasi setelah koneksi terputus, membuat hasil tidak dapat diinterpretasikan.
- Membiarkan aturan intersepsi aktif setelah teardown dan mengontaminasi pengujian berikutnya.
- Menulis cookie, Authorization, atau body respons ke log tanpa disunting.
- Mengaktifkan pencegat pengujian di browser produksi atau lalu lintas pengguna nyata.
Pertanyaan lanjutan dan jawaban
Bagaimana BiDi dapat berdampingan dengan WebDriver klasik?
WebDriver klasik cocok untuk kontrol imperatif, sedangkan BiDi cocok untuk event berkelanjutan dan observasi jaringan. Keduanya dapat berbagi sesi browser, tetapi kepemilikan status dan urutan penonaktifan harus eksplisit agar kedua saluran tidak memutasi satu konteks secara bersamaan.
Mengapa aturan intersepsi membutuhkan fase?
Data yang tersedia berbeda sebelum permintaan dikirim, saat respons dimulai, dan saat respons selesai. Sebuah fase memilih apa yang dapat diubah dan memungkinkan fase yang tidak didukung gagal lebih awal daripada ditebak saat runtime.
Bagaimana Anda membuktikan tidak ada kontaminasi silang antar-pengujian?
Berikan setiap pengujian konteks dan id intersepsinya sendiri, kueri dan bersihkan aturan konteks tersebut saat teardown, serta jalankan pemeriksaan isolasi. Catat event langganan, pembatalan, dan penutupan sehingga kegagalan tetap mempertahankan linimasa yang lengkap.