6 poin oleh xguru 2024-08-08 | 1 komentar | Bagikan ke WhatsApp
  • Mulai Puppeteer versi 23, Firefox kini didukung secara resmi, sehingga otomatisasi dan pengujian end-to-end kini dapat dilakukan dengan mudah di Chrome dan Firefox
    • const browser = await puppeteer.launch({browser: "firefox"});
  • Seperti halnya Chrome, Puppeteer dapat mengunduh dan menjalankan Firefox versi stabil terbaru
  • Dukungan Firefox didasarkan pada WebDriver BiDi, protokol lintas-browser yang saat ini diimplementasikan di Gecko dan Chromium, bukan pada protokol otomatisasi khusus Firefox
    • Dengan menggunakan protokol lintas-browser, akan lebih mudah mendukung lebih banyak browser di masa depan

Latar belakang teknis

  • Hingga belakangan ini, ada dua pilihan utama bagi mereka yang menginginkan otomatisasi browser
    • Menggunakan API WebDriver W3C
    • Menggunakan API khusus per browser (Chrome DevTools Protocol, Firefox Remote Debugging Protocol, dan sebagainya)
  • Kedua pilihan tersebut sama-sama memiliki trade-off yang cukup besar
    • API WebDriver klasik berbasis HTTP dan menggunakan model mengirim perintah ke browser lalu menunggu respons
    • Ini bekerja dengan baik untuk skenario otomatisasi seperti memuat halaman dan memeriksa apakah elemen ditampilkan, tetapi tidak cocok untuk use case tingkat lanjut seperti menerima event dari browser atau menjalankan beberapa perintah secara bersamaan
    • API khusus browser umumnya dirancang untuk mendukung use case kompleks pada developer tools di dalam browser, sehingga menyediakan set fitur yang jauh lebih maju dibandingkan WebDriver
  • Karena itu, klien otomatisasi browser harus memilih antara mendukung beberapa browser dengan satu protokol tetapi dengan set fitur terbatas, atau menyediakan set fitur yang lebih kaya namun harus mengimplementasikan fitur secara terpisah untuk setiap browser yang didukung
  • Hal ini meningkatkan biaya dan kompleksitas untuk membuat otomatisasi lintas-browser yang unggul
  • Situasinya mirip seperti sebelum LSP(Language Server Protocol) dikembangkan
  • WebDriver BiDi membawa set fitur otomatisasi yang sebelumnya terbatas pada protokol khusus browser ke protokol yang terstandarisasi, sehingga dapat digunakan di semua browser dan tool otomatisasi

Penghapusan dukungan CDP(Chrome DevTools Protocol) eksperimental di Firefox

  • Sebagai bagian dari upaya awal untuk meningkatkan pengujian lintas-browser, disediakan implementasi parsial CDP yang dibatasi pada beberapa perintah dan event yang diperlukan untuk mendukung use case pengujian
  • Namun, setelah menjadi jelas bahwa ini bukan arah perkembangan otomatisasi lintas-browser, upaya tersebut dihentikan
  • Akibatnya, fitur ini tidak lagi dipelihara dan tidak kompatibel dengan fitur Firefox modern seperti site isolation
  • Karena itu, dukungan tersebut dijadwalkan dihapus pada akhir 2024

Rencana ke depan

  • Masih ada beberapa API yang belum didukung
    • API khusus CDP
    • API yang memerlukan pekerjaan standardisasi tambahan
    • API yang sudah memiliki standar tetapi belum diimplementasikan
  • Prioritas akan ditentukan melalui masukan pengguna

1 komentar

 
xguru 2024-08-09

Pendapat Hacker News

  • Fakta bahwa tim Puppeteer meninggalkan Google ke Microsoft lalu terus mengembangkan Playwright merupakan pukulan besar bagi Google

    • Google tidak menyadari betapa pentingnya alat otomasi browser bagi strategi agen AI
    • Google harus meninggalkan Puppeteer dan bergantung pada MS/Playwright, atau mencari arah baru untuk Puppeteer
    • WebDriver BiDi mengembangkan keunggulan Chrome DevTools Protocol (CDP) menjadi pendekatan standar
  • Protokol WebDriver BiDi memang bukan protokol untuk membuat browser, tetapi tampaknya hampir 90% bisa berperan seperti itu

    • Gecko telah banyak berkembang sejak Servo, dan belakangan performanya cukup bagus
    • Jauh lebih mudah membuat browser berbasis Chromium daripada membuat browser berbasis Gecko
    • Dengan API, kita bisa melakukan navigasi, intersepsi request, membaca console, menjalankan JS, dan sebagainya
    • Akan bagus jika browser chrome bisa dihilangkan untuk membuat browser kustom
  • Playwright mendukung semua rendering engine modern (Chromium, WebKit, Firefox)

  • Penasaran soal accessibility tree

    • Alasan accessibility tree dihapus dari Playwright adalah karena itu hanyalah dump dari struktur data internal yang berbeda untuk tiap engine
    • Accessibility tree merangkum semua elemen semantik pada halaman, sehingga sangat bagus untuk snapshot testing atau pengujian BDD
    • Semoga accessibility tree bisa distandardisasi di browser engine utama
    • Dari sudut pandang pengembangan web, akan bagus jika ini juga bisa diakses di layer lain seperti CSS dan DOM