Menggunakan Chrome untuk Memperbaiki Kesalahan File DevToolsActivePort di Selenium pada Tindakan GitHub

ChromeDriver

Mengatasi Kegagalan Pengujian Chrome di Pipeline CI/CD

Menjalankan tes Selenium pada harus mulus. Namun, banyak pengembang menghadapi kesalahan "file DevToolsActivePort tidak ada" yang membuat frustrasi. Hal ini terjadi ketika Chrome, karena satu dan lain hal, gagal memulai dengan benar di lingkungan CI.

Pesan kesalahan biasanya menandakan bahwa Chrome tiba-tiba mogok, yang sering kali disebabkan oleh ketidakcocokan Dan versi atau opsi yang salah dikonfigurasi dalam pengaturan pengujian. Seperti banyak pengembang lainnya, saya menghadapi tantangan ini, terutama saat menerapkan pengujian otomatis di a lingkungan.

Dalam penyiapan ini, ketidakselarasan terkecil, seperti ketidakcocokan versi ChromeDriver, dapat menghentikan pelaksanaan pengujian, sehingga menghabiskan waktu dan sumber daya yang berharga. Untungnya, memahami masalah mendasar membuat penyelesaiannya menjadi lebih mudah 🛠️.

Dalam panduan ini, kami akan mendalami langkah-langkah praktis untuk mencegah dan memecahkan masalah kesalahan umum ini. Dari detail pemasangan Chrome hingga inisialisasi driver yang tepat, Anda akan menemukan proses langkah demi langkah untuk memastikan pengujian berjalan lancar setiap saat. Mari atasi masalah ini dan kembalikan pengujian Anda ke jalur yang benar!

Memerintah Contoh Penggunaan
CHROME_VERSION="117.0.5938.62" Menetapkan versi Chrome tertentu, penting untuk memastikan kompatibilitas ChromeDriver selama pengujian CI guna mencegah ketidakcocokan antara Chrome dan ChromeDriver.
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) Mengekstrak nomor versi utama dari versi Chrome lengkap. Ini digunakan untuk mengunduh versi ChromeDriver yang cocok, untuk memastikan kompatibilitas.
LATEST_DRIVER=$(wget -qO- ...) Mengambil versi ChromeDriver terbaru yang kompatibel untuk versi Chrome yang ditentukan, penting untuk menghindari kesalahan “DevToolsActivePort” dalam skrip otomatisasi.
if [ -z "$LATEST_DRIVER" ] Memeriksa apakah variabel versi ChromeDriver kosong, yang menunjukkan kesalahan dalam mengambil versi yang kompatibel. Kondisi ini membantu dalam menerapkan fallback untuk mencegah kegagalan pengujian.
sudo dpkg -i $CHROME_DEB Menginstal paket Chrome yang diunduh menggunakan dpkg, yang secara khusus berguna di lingkungan Linux seperti GitHub Actions.
sudo rm -f /usr/local/bin/chromedriver Menghapus ChromeDriver yang dipasang sebelumnya. Hal ini memastikan tidak ada konflik versi selama instalasi baru.
options.addArguments("--no-sandbox") Menonaktifkan fitur kotak pasir Chrome. Hal ini sangat penting terutama di lingkungan CI, karena sandbox dapat mencegah Chrome memulai dalam mode tanpa kepala.
options.addArguments("--disable-dev-shm-usage") Meningkatkan ketersediaan memori bersama dengan menonaktifkan penggunaan /dev/shm, yang dapat mencegah error Chrome di lingkungan dengan memori terbatas, seperti container.
options.addArguments("--remote-debugging-port=9222") Mengaktifkan debugging jarak jauh pada port tertentu. Ini merupakan persyaratan agar Chrome tanpa kepala dapat berfungsi dengan benar di beberapa lingkungan, mencegah kesalahan "DevToolsActivePort".
driver.quit() Menutup semua jendela Chrome dan mengakhiri sesi WebDriver, sehingga mengosongkan sumber daya. Hal ini penting dalam pipeline CI/CD untuk mencegah kebocoran sumber daya dan menghindari kehabisan memori yang tersedia.

Solusi Terperinci untuk Chrome dan Penyiapan ChromeDriver di CI

Skrip di atas dirancang untuk memasang dan mengonfigurasi Chrome dan ChromeDriver lingkungan, khususnya mengatasi kesalahan "file DevToolsActivePort tidak ada". Masalah ini biasanya terjadi ketika Chrome, yang berjalan dalam mode tanpa kepala, tidak dapat memulai dengan benar karena ketidakcocokan atau keterbatasan memori. Skrip pertama mengatasi hal ini dengan menentukan versi Chrome dan memastikan kompatibilitasnya dengan ChromeDriver, yang sangat penting untuk menjalankannya tes. Perintah awal melakukan pembaruan paket apt dan menggunakan wget untuk mengambil versi Google Chrome tertentu dari mirror. Menggunakan mirror memastikan bahwa versi yang tepat telah diinstal, terutama jika repositori default tidak memiliki versi ini. Pendekatan ini menjamin bahwa versi Chrome yang konsisten digunakan di berbagai pengujian yang dijalankan.

Selanjutnya, skrip melanjutkan untuk memasang ChromeDriver yang kompatibel dengan versi dengan mengisolasi versi utama dari Chrome (misalnya, "117" dari "117.0.5938.62") menggunakan perintah untuk menguraikannya. Hal ini memungkinkan skrip mengambil ChromeDriver persis yang diperlukan untuk versi utama tertentu menggunakan pola URL yang dirancang untuk rilis ChromeDriver. Dengan memastikan versi ini selaras, penyiapan mencegah versi yang tidak cocok menyebabkan kegagalan inisialisasi ChromeDriver, yang sering kali memicu kesalahan DevTools. Jika ChromeDriver gagal mengunduh versi tertentu, skrip menyertakan opsi cadangan untuk mengunduh rilis terbaru, sehingga menjaga fleksibilitas. Langkah-langkah ini sangat berguna dalam pipeline CI/CD otomatis yang mengutamakan solusi cepat dan andal 🔧.

Setelah diunduh, skrip akan menghapus ChromeDriver yang dipasang sebelumnya dari sistem menggunakan “sudo rm -f” untuk menghindari konflik dengan driver lama. Hal ini memastikan bahwa hanya versi yang benar yang ada, meminimalkan risiko konflik versi yang dapat mengganggu stabilitas pengujian. Izin untuk ChromeDriver juga disetel agar dapat dieksekusi, yang merupakan langkah penting untuk meluncurkan driver di lingkungan CI/CD. Menggunakan Chrome dalam mode “tanpa kepala” dengan opsi seperti “--no-sandbox” dan “--disable-dev-shm-usage” juga mengurangi jejak sumber daya Chrome. Opsi ini memungkinkan pengujian dijalankan di lingkungan dengan sumber daya terbatas (misalnya, server cloud atau pipeline CI) tanpa menyebabkan Chrome mogok, yang merupakan salah satu penyebab umum di balik kesalahan DevToolsActivePort.

Terakhir, dalam pengaturan WebDriver, opsi seperti “--disable-gpu” dan “--remote-debugging-port=9222” memastikan Chrome berjalan lebih stabil dalam mode headless. Tanda “--disable-gpu” menonaktifkan rendering GPU, yang tidak diperlukan dan terkadang bermasalah dalam mode headless. Sementara itu, opsi “--remote-debugging-port” memungkinkan Chrome membuka port debugging yang penting bagi Selenium untuk menyambungkannya di CI. Singkatnya, pengaturan ini mencegah kemacetan otomatisasi yang umum, sehingga memungkinkan lingkungan pengujian yang lebih andal dan tangguh. Hasilnya, skrip ini membuat pengalaman menjalankan Chrome tanpa kepala di sistem CI/CD menjadi lebih lancar, memastikan pengujian otomatis berjalan secara konsisten tanpa gangguan 🚀.

Menyelesaikan kesalahan "file DevToolsActivePort tidak ada" dalam pengujian Selenium di GitHub Actions

Solusi 1: Skrip instalasi dan konfigurasi untuk Chrome dan ChromeDriver

sudo apt-get update
sudo apt-get install -y wget apt-transport-https curl
CHROME_VERSION="117.0.5938.62"
CHROME_DEB="google-chrome-stable_${CHROME_VERSION}-1_amd64.deb"
wget https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/$CHROME_DEB
sudo dpkg -i $CHROME_DEB || sudo apt-get install -f -y
# Install ChromeDriver matching Chrome
sudo apt-get install -y wget unzip
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1)
LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$MAJOR_VERSION)
if [ -z "$LATEST_DRIVER" ]; then
  echo "Falling back to latest ChromeDriver version."
  LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
fi
sudo rm -f /usr/local/bin/chromedriver
wget https://chromedriver.storage.googleapis.com/$LATEST_DRIVER/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver

Menyiapkan WebDriver dengan Java untuk GitHub Actions dalam mode tanpa kepala

Solusi 2: Mengonfigurasi opsi Chrome dan menginisialisasi WebDriver di Java

// Import necessary libraries
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
// Set up ChromeDriver
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--remote-debugging-port=9222");
ChromeDriver driver = new ChromeDriver(options);
// Start Selenium test logic here
driver.quit();

Menambahkan pengujian unit untuk memverifikasi kompatibilitas Chrome dan WebDriver

Solusi 3: Pengujian unit untuk memastikan kompatibilitas dan mencegah kesalahan selama eksekusi CI

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
class WebDriverTests {
  private WebDriver driver;
  @BeforeEach
  void setUp() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless");
    options.addArguments("--no-sandbox");
    driver = new ChromeDriver(options);
  }
  @Test
  void testDriverInitialization() {
    driver.get("https://www.google.com");
    assertEquals("Google", driver.getTitle());
  }
  @AfterEach
  void tearDown() {
    driver.quit();
  }
}

Mengoptimalkan Pengujian Selenium dengan GitHub Actions dan Headless Chrome

Salah satu aspek penting dalam berlari dengan Selenium di saluran CI/CD seperti GitHub Actions memahami kendala lingkungan. Menjalankan Chrome dalam mode tanpa kepala berarti Chrome beroperasi tanpa antarmuka grafis, sehingga sempurna untuk lingkungan CI. Namun, Chrome tanpa kepala mungkin lebih sensitif terhadap konfigurasi sistem dan memerlukan penyiapan tambahan dibandingkan dengan lingkungan lokal. Kesalahan, "File DevToolsActivePort tidak ada," biasanya dikaitkan dengan kegagalan inisialisasi Chrome, sering kali karena keterbatasan memori atau ketidakcocokan konfigurasi. Menerapkan konfigurasi hemat memori seperti Dan membantu mengatasi masalah ini dan secara signifikan dapat menstabilkan pengujian di lingkungan CI/CD dengan memori terbatas.

Untuk memastikan kompatibilitas, penting untuk menjaga versi Chrome dan ChromeDriver tetap selaras. Versi yang tidak konsisten sering menjadi sumber kesalahan di GitHub Actions, karena runner mungkin menggunakan versi terbaru secara default, yang mungkin tidak sesuai dengan persyaratan ChromeDriver. Untuk mengatasi hal ini, solusi kami mencakup penguraian versi Chrome utama untuk mengambil versi ChromeDriver yang sesuai, sehingga meningkatkan stabilitas. Selain itu, pengaturan memungkinkan ChromeDriver berinteraksi dengan browser secara lebih andal dengan mengaktifkan port komunikasi. Penyiapan ini penting saat menggunakan GitHub Actions atau alat serupa untuk menjalankan otomatis pada mesin virtual.

Konfigurasi ini memberikan perbedaan besar dalam efisiensi, mengurangi kesalahan, dan meningkatkan keandalan uji coba. Dengan memastikan opsi yang hemat sumber daya dan menggunakan versi yang benar, pengoperasian Chrome tanpa kepala kemungkinan besar akan berhasil dijalankan, sehingga pengembang terhindar dari kesalahan yang membuat frustrasi saat pengujian. Pada akhirnya, konfigurasi yang kuat dan dependensi yang kompatibel membuat pengalaman pengujian CI/CD lebih lancar, memungkinkan pengembang untuk fokus dalam membuat dan meningkatkan aplikasi mereka tanpa gangguan masalah penyiapan yang terus-menerus 🚀.

  1. Apa yang dimaksud dengan kesalahan "File DevToolsActivePort tidak ada"?
  2. Kesalahan ini terjadi ketika Chrome gagal memulai dengan benar dalam mode tanpa kepala, biasanya karena ketidakcocokan penyiapan atau kurangnya sumber daya sistem. Menyesuaikan opsi memori seperti sering menyelesaikannya.
  3. Mengapa mencocokkan versi Chrome dan ChromeDriver itu penting?
  4. Versi yang cocok menghindari kesalahan kompatibilitas. Menggunakan dan mengambil ChromeDriver tertentu memastikan keduanya bekerja sama dengan lancar.
  5. Bagaimana caranya membantu dalam pengujian tanpa kepala?
  6. Hal ini memungkinkan port untuk Chrome dikontrol oleh ChromeDriver, memungkinkan pengujian terhubung dengan instance browser secara lebih efektif dan mencegah kesalahan DevTools.
  7. Apa artinya? Mengerjakan?
  8. Tindakan ini akan menonaktifkan sandboxing Chrome, yang membantu Chrome memulai di lingkungan CI, karena sandboxing terkadang dapat menyebabkan Chrome tanpa kepala mogok di lingkungan terbatas.
  9. Apakah ada cadangan jika versi ChromeDriver gagal diunduh?
  10. Ya, skrip kami menyertakan fallback yang menggunakan jika versi pencocokan gagal, pastikan ChromeDriver tersedia terlepas dari versi Chrome yang dipasang.
  11. Bagaimana cara menghindari masalah terkait memori Chrome di saluran CI/CD?
  12. Menggunakan mengalihkan memori bersama, mencegah Chrome mogok karena terbatasnya ruang /dev/shm di lingkungan CI.
  13. Bisakah saya men-debug Chrome dalam mode tanpa kepala?
  14. Ya, menggunakan dan menjalankan pengujian secara lokal memungkinkan Anda membuka Chrome DevTools untuk melakukan debug dalam mode tanpa kepala.
  15. Apakah WebDriverManager menangani pembaruan ChromeDriver secara otomatis?
  16. WebDriverManager menyederhanakan pembaruan driver secara lokal, namun dalam pipeline CI/CD, menyiapkan versi tertentu, seperti yang ditunjukkan, lebih dapat diandalkan untuk build yang dapat diulang.
  17. Apa tujuannya dalam naskah?
  18. Perintah ini melepaskan sumber daya dengan menutup Chrome dan mengakhiri sesi WebDriver, mencegah kebocoran memori di lingkungan CI/CD.
  19. Bagaimana cara menguji pengaturan Selenium saya di GitHub Actions sebelum melakukan?
  20. Menjalankan tes secara lokal dengan opsi dan konfigurasi CI dapat mengatasi masalah sebelum dikirim ke GitHub, sehingga memudahkan proses debug.
  21. Izin apa yang saya perlukan untuk ChromeDriver di CI?
  22. ChromeDriver memerlukan izin eksekusi, yang ditetapkan oleh , agar berhasil menjalankan pengujian di GitHub Actions.

Memastikan penyiapan yang benar untuk pengujian Selenium dengan Chrome tanpa kepala di GitHub Actions menghemat waktu dan meningkatkan keandalan. Mengatasi kesalahan seperti “file DevToolsActivePort tidak ada” dapat membuat pengujian CI/CD lebih lancar dan tidak membuat frustrasi pengembang.

Dengan menyelaraskan dan versi Chrome serta mengonfigurasi opsi hemat memori, pendekatan ini membantu menjalankan pengujian secara efisien di lingkungan terbatas. Ini adalah solusi praktis yang memungkinkan pengembang fokus pada tugas inti mereka tanpa khawatir akan gangguan pengujian 🚀.

  1. Panduan pemecahan masalah mendetail tentang penanganan masalah DevToolsActivePort di lingkungan Chrome untuk CI/CD tanpa kepala. Dokumentasi Selenium WebDriver
  2. Petunjuk pemasangan dan konfigurasi komprehensif untuk versi Chrome dan ChromeDriver dalam penyiapan integrasi berkelanjutan, disediakan oleh Dokumentasi Tindakan GitHub
  3. Solusi langkah demi langkah untuk penyiapan ChromeDriver, kompatibilitas, dan opsi konfigurasi tersedia di Dokumentasi WebDriverManager
  4. Referensi tentang praktik terbaik untuk mengonfigurasi Chrome tanpa kepala untuk efisiensi memori di CI/CD, terutama di lingkungan terbatas. Baca selengkapnya di Panduan Pengembang Google Chrome