- Pengaturan PC Ghost Driver: Konfigurasikan binding PhantomJS untuk otomatisasi Selenium WebDriver
- Arsitektur inti: Ghost Driver berjalan sebagai implementasi JavaScript di dalam PhantomJS
- Kapabilitas penting: Setel
phantomjs.binary.pathuntuk menunjuk ke executable lokal Anda - Keunggulan headless: Tidak memerlukan server tampilan, ideal untuk pipeline CI/CD
- Sakelar kustom: Teruskan argumen CLI melalui
phantomjs.cli.argsuntuk kontrol SSL dan rendering
Memahami Ghost Driver dan Pengaturan PC
Ghost Driver berfungsi sebagai implementasi WebDriver yang dibangun ke dalam PhantomJS, memungkinkan otomatisasi browser headless melalui protokol W3C WebDriver. Saat mengonfigurasi pengaturan PC Ghost Driver, pada dasarnya Anda menjembatani tes klien Selenium Anda dengan mesin browser headless PhantomJS.
Sorotan Video:
- Menjelaskan sifat ganda Ghost Driver sebagai skrip dan modul yang tertanam
- Mencakup diagram urutan apa yang terjadi selama inisialisasi driver
- Menunjukkan cara meneruskan kapabilitas kustom dan argumen CLI
- Merinci perbedaan antara PhantomJS dan HTMLUnit untuk pengujian
Saat Anda menginisialisasi instance PhantomJSDriver baru di rangkaian pengujian Anda, sistem membuat layanan driver yang memunculkan proses PhantomJS terpisah. Proses ini menjalankan skrip Ghost Driver, yang kemudian mendengarkan endpoint lokal untuk perintah WebDriver. Memahami alur ini sangat penting untuk mengoptimalkan pengaturan PC lokal Anda.
Jangan rancukan Ghost Driver dengan binding PhantomJSDriver. Ghost Driver adalah implementasi JavaScript yang berjalan di dalam PhantomJS. PhantomJSDriver merujuk pada binding klien Selenium (kelas yang Anda impor di skrip pengujian Anda) yang berkomunikasi dengan Ghost Driver melalui HTTP.
| Komponen | Tipe | Bahasa | Peran |
|---|---|---|---|
| Ghost Driver | Implementasi WebDriver | JavaScript | Berjalan di dalam PhantomJS, menangani protokol W3C |
| PhantomJSDriver | Binding Klien | Java/Python/Ruby/.NET | Kelas yang digunakan dalam skrip pengujian untuk meluncurkan browser |
| PhantomJS | Browser Headless | C++ | Mesin berbasis WebKit yang mengeksekusi rendering halaman |
| Selenium Grid | Arsitektur Hub/Node | Berbagai | Mendistribusikan instance pengujian ke berbagai mesin |
Parameter Konfigurasi PC Penting
Mengonfigurasi pengaturan PC Ghost Driver memerlukan pendefinisian Desired Capabilities (Kapabilitas yang Diinginkan) tertentu dalam pengujian Selenium Anda. Kapabilitas ini memberi tahu binding di mana letak executable PhantomJS dan cara meluncurkannya.
Pengaturan paling kritis adalah phantomjs.binary.path. Tanpa parameter ini, skrip pengujian Anda tidak akan tahu di mana menemukan executable PhantomJS di mesin Anda. Selain itu, Anda dapat meneruskan argumen baris perintah langsung ke proses PhantomJS menggunakan phantomjs.cli.args.
Selalu verifikasi bahwa jalur yang diberikan di phantomjs.binary.path menunjuk ke file executable yang sebenarnya, bukan hanya direktorinya. Jalur yang salah adalah penyebab paling umum dari kegagalan inisialisasi.
| Kunci Kapabilitas | Tujuan | Contoh Nilai |
|---|---|---|
phantomjs.binary.path | Menunjuk ke executable PhantomJS | /usr/local/bin/phantomjs |
phantomjs.ghostdriver.path | Menunjuk ke skrip Ghost Driver kustom (untuk kontributor) | /path/to/ghostdriver/main.js |
phantomjs.cli.args | Array argumen CLI yang diteruskan ke proses | ["--ignore-ssl-errors=true"] |
phantomjs.page.settings.X | Mengesampingkan properti objek halaman (misalnya, userAgent) | Mozilla/5.0 (iPhone...) |
Lokasi Binary
- Diperlukan untuk eksekusi lokal
- Harus menunjuk langsung ke file executable
- Gunakan jalur absolut untuk menghindari kesalahan resolusi
Argumen CLI
- Diteruskan sebagai array string
- Mendukung pengabaian kesalahan SSL
- Mengaktifkan konfigurasi debugger jarak jauh
Pengaturan Halaman
- Mengesampingkan properti browser default
- String User-Agent kustom
- Diterapkan ke setiap sesi baru
Panduan Setup Langkah demi Langkah
Ikuti langkah-langkah berikut untuk mengonfigurasi pengaturan PC Ghost Driver di mesin lokal Anda. Panduan ini mengasumsikan Anda sudah memiliki proyek Selenium dasar yang disiapkan dalam bahasa pemrograman pilihan Anda.
Unduh PhantomJS
Unduh build PhantomJS yang sesuai untuk sistem operasi Anda dari situs web resmi. Unzip paketnya dan catat lokasi file executable. Atau, Anda dapat membangun PhantomJS dari sumber, meskipun proses ini bisa memakan waktu lebih dari satu jam di mesin cepat karena mengompilasi seluruh mesin WebKit.
Tambahkan Binding Selenium
Tambahkan binding Selenium WebDriver ke proyek Anda. Di Java, sertakan dependensi selenium-java dan selenium-server melalui Maven atau Gradle. Untuk Python, cukup instal paket selenium. Kelas PhantomJSDriver sudah dibundel di dalam pustaka Selenium standar.
Konfigurasikan Desired Capabilities
Buat objek DesiredCapabilities dan setel kapabilitas phantomjs.binary.path ke jalur absolut dari executable PhantomJS Anda. Tambahkan argumen CLI yang diperlukan ke array kapabilitas phantomjs.cli.args.
Inisialisasi Driver
Teruskan objek kapabilitas yang dikonfigurasi ke instance PhantomJSDriver baru. Layanan driver akan secara otomatis memunculkan proses PhantomJS, menjalankan Ghost Driver, dan membuat sesi WebDriver.
Jalankan Pengujian Secara Headless
Jalankan rangkaian pengujian Anda. PhantomJS akan berjalan sepenuhnya secara headless tanpa membuka jendela browser, membuatnya ideal untuk lingkungan continuous integration dan eksekusi baris perintah.
Setelah inisialisasi, skrip pengujian Anda akan melakukan polling ke endpoint /status di port lokal. Setelah menerima respons HTTP 200 OK, sesi baru akan dibuat secara otomatis. Anda kemudian dapat menggunakan perintah WebDriver standar seperti driver.get(url) untuk menavigasi.
Pengaturan SSL, Keamanan, dan Grid
Saat menjalankan pengujian otomatis terhadap lingkungan internal atau staging, Anda sering menemukan sertifikat SSL yang ditandatangani sendiri (self-signed). Pengaturan PC Ghost Driver menyediakan kapabilitas spesifik untuk menangani skenario ini dengan baik.
Untuk mengabaikan kesalahan sertifikat SSL, teruskan argumen --ignore-ssl-errors=true melalui kapabilitas phantomjs.cli.args. Anda juga dapat meneruskan --web-security=false untuk menonaktifkan pemeriksaan kebijakan same-origin selama pengujian.
Hanya nonaktifkan verifikasi SSL dan keamanan web di lingkungan pengujian. Jangan pernah menggunakan pengaturan ini di produksi atau saat menangani data pengguna yang sensitif.
| Argumen CLI | Efek | Kasus Penggunaan |
|---|---|---|
--ignore-ssl-errors=true | Mengabaikan semua kesalahan validasi sertifikat | Server staging internal dengan sertifikat self-signed |
--web-security=false | Menonaktifkan kebijakan keamanan cross-origin | Menguji interaksi iframe dan perilaku CORS |
--remote-debugger-port=9000 | Mengaktifkan debugging jarak jauh melalui Web Inspector | Men-debug kode JavaScript Ghost Driver |
--webdriver=8080 | Menetapkan port kustom untuk pendengar WebDriver | Menjalankan beberapa instance secara bersamaan |
Untuk integrasi Selenium Grid, Anda dapat mendaftarkan instance PhantomJS Anda ke hub dengan meneruskan parameter --webdriver-selenium-grid-hub bersama URL hub. Ini memungkinkan grid untuk mendistribusikan instance PhantomJS ke beberapa mesin pengujian.
Untuk men-debug internal Ghost Driver, mulai PhantomJS dengan --remote-debugger-port=9000 dan --remote-debugger-autorun=yes. Buka Web Inspector di Chrome atau Safari dan sambungkan ke instance PhantomJS untuk menelusuri kode JavaScript langkah demi langkah.
Kustomisasi Lanjutan dan Batasan
Pengaturan PC Ghost Driver mendukung kustomisasi tingkat halaman lanjutan melalui awalan kapabilitas phantomjs.page.settings. Ini memungkinkan Anda untuk mengesampingkan properti pada setiap objek halaman yang dibuat selama sesi.
Kasus penggunaan umum adalah mengesampingkan string User-Agent. Beberapa situs web memfilter lalu lintas berdasarkan User-Agent untuk memblokir screen scraping. Dengan menetapkan User-Agent kustom, Anda dapat mensimulasikan perangkat yang berbeda seperti browser iOS atau Android.
| Pengaturan Halaman | Deskripsi | Nilai Umum |
|---|---|---|
userAgent | Mengesampingkan string User-Agent browser | Mozilla/5.0 (iPhone; CPU iPhone OS 10_0...) |
javascriptEnabled | Mengaktifkan atau menonaktifkan eksekusi JavaScript | true |
loadImages | Mengontrol apakah gambar dimuat | false (untuk scraping yang lebih cepat) |
resourceTimeout | Menetapkan waktu muat sumber daya maksimum dalam ms | 10000 |
Pada versi 1.0.2, beberapa perintah WebDriver belum diimplementasikan di Ghost Driver. Fitur yang hilang termasuk Touch API, geolocation API, emulasi seluler, manipulasi penyimpanan lokal, dan penanganan alert/confirm/prompt. Periksa spreadsheet implementasi resmi untuk status saat ini.
Daftar Periksa Optimasi:
- Setel phantomjs.binary.path ke lokasi executable absolut
- Nonaktifkan pemuatan gambar untuk performa scraping yang lebih cepat
- Teruskan --ignore-ssl-errors=true untuk pengujian internal
- Ganti User-Agent saat menguji tata letak responsif
- Daftar dengan Selenium Grid untuk pengujian terdistribusi
Pertanyaan yang Sering Diajukan
Q: Apa perbedaan antara Ghost Driver dan PhantomJS?
PhantomJS adalah browser WebKit headless yang ditulis dalam C++. Ghost Driver adalah implementasi JavaScript dari protokol WebDriver yang berjalan di dalam PhantomJS. Saat Anda mengonfigurasi pengaturan PC Ghost Driver, Anda memberi tahu Selenium cara berkomunikasi dengan PhantomJS melalui antarmuka Ghost Driver.
Q: Bagaimana cara meneruskan argumen baris perintah kustom ke PhantomJS?
Gunakan kapabilitas yang diinginkan `phantomjs.cli.args`. Teruskan array string di mana setiap string mewakili argumen CLI. Misalnya, untuk mengabaikan kesalahan SSL, setel kapabilitas ke array yang berisi `--ignore-ssl-errors=true`.
Q: Bisakah saya menggunakan Ghost Driver dengan Selenium Grid?
Ya. Mulai PhantomJS dengan parameter `--webdriver-selenium-grid-hub` diikuti dengan URL hub Anda. Instance PhantomJS akan secara otomatis mendaftarkan dirinya ke grid dan tersedia untuk eksekusi pengujian terdistribusi.
Q: Mengapa pengujian saya gagal dengan kesalahan 'not implemented'?
Ghost Driver belum mengimplementasikan setiap perintah WebDriver. Touch API, geolokasi, penyimpanan lokal, dan penanganan alert adalah beberapa di antaranya fitur yang belum didukung saat ini. Periksa spreadsheet status implementasi resmi untuk memverifikasi apakah perintah spesifik Anda tersedia.