CI/CD Ardışık Düzenlerinde Chrome Test Başarısızlıklarının Üstesinden Gelmek
Selenyum testlerini çalıştırma Açık kesintisiz olmalıdır. Ancak birçok geliştirici sinir bozucu "DevToolsActivePort dosyası mevcut değil" hatasıyla karşı karşıya kalıyor. Bu, Chrome'un bir nedenden dolayı CI ortamında düzgün şekilde başlatılamaması durumunda meydana gelir.
Hata mesajı genellikle Chrome'un beklenmedik bir şekilde kilitlendiğinin sinyalini verir ve bu genellikle uyumsuzluğun bir sonucudur. Ve Test kurulumundaki sürümler veya yanlış yapılandırılmış seçenekler. Pek çok geliştirici gibi ben de bu zorlukla özellikle otomatik testleri dağıtırken karşılaştım. çevre.
Bu kurulumda, ChromeDriver sürüm uyuşmazlığı gibi en ufak bir yanlış hizalama, test yürütmenin durmasına neden olarak değerli zamana ve kaynaklara mal olabilir. Neyse ki, altta yatan sorunları anlamak, çözmeyi çok daha kolay hale getiriyor 🛠️.
Bu kılavuzda, bu yaygın hatayı önlemek ve gidermek için pratik adımlara değineceğiz. Chrome yükleme ayrıntılarından sürücünün doğru şekilde başlatılmasına kadar, testlerin her zaman sorunsuz çalışmasını sağlayacak adım adım bir süreç bulacaksınız. Bu sorunu çözelim ve testlerinizi tekrar yoluna koyalım!
Emretmek | Kullanım Örneği |
---|---|
CHROME_VERSION="117.0.5938.62" | Chrome ve ChromeDriver arasındaki uyuşmazlıkları önlemek amacıyla CI testleri sırasında ChromeDriver uyumluluğunu sağlamak için gerekli olan belirli bir Chrome sürümünü ayarlar. |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | Ana sürüm numarasını tam Chrome sürümünden çıkarır. Bu, uyumluluk sağlamak üzere ChromeDriver'ın eşleşen bir sürümünü indirmek için kullanılır. |
LATEST_DRIVER=$(wget -qO- ...) | Otomasyon komut dosyalarında "DevToolsActivePort" hatalarını önlemek için gerekli olan, belirtilen Chrome sürümü için en son uyumlu ChromeDriver sürümünü getirir. |
if [ -z "$LATEST_DRIVER" ] | ChromeDriver sürüm değişkeninin boş olup olmadığını kontrol eder; bu, uyumlu bir sürümün getirilmesinde bir hata olduğunu gösterir. Bu durum, test başarısızlıklarını önlemek için bir geri dönüş uygulanmasına yardımcı olur. |
sudo dpkg -i $CHROME_DEB | İndirilen Chrome paketini, GitHub Eylemleri gibi Linux ortamlarında özellikle yararlı olan dpkg kullanarak yükler. |
sudo rm -f /usr/local/bin/chromedriver | Önceden yüklenmiş ChromeDriver'ları siler. Bu, yeni kurulum sırasında sürüm çakışması olmamasını sağlar. |
options.addArguments("--no-sandbox") | Chrome korumalı alana alma özelliğini devre dışı bırakır. Korumalı alan oluşturma, Chrome'un başsız modda başlatılmasını engelleyebileceğinden, bu özellikle CI ortamlarında önemlidir. |
options.addArguments("--disable-dev-shm-usage") | /dev/shm kullanımını devre dışı bırakarak kullanılabilir paylaşılan belleği artırır; bu, kapsayıcılar gibi sınırlı belleğe sahip ortamlarda Chrome'un çökmesini önleyebilir. |
options.addArguments("--remote-debugging-port=9222") | Belirtilen bağlantı noktasında uzaktan hata ayıklamayı etkinleştirir. Bu, başsız Chrome'un bazı ortamlarda düzgün çalışması ve "DevToolsActivePort" hatalarının önlenmesi için bir gerekliliktir. |
driver.quit() | Tüm Chrome pencerelerini kapatır ve WebDriver oturumunu sonlandırarak kaynakları serbest bırakır. Bu, kaynak sızıntılarını önlemek ve kullanılabilir belleğin tükenmesini önlemek için CI/CD işlem hatlarında çok önemlidir. |
CI'da Chrome ve ChromeDriver Kurulumu İçin Ayrıntılı Çözüm
Yukarıdaki komut dosyaları hem Chrome'u hem de ChromeDriver'ı yüklemek ve yapılandırmak için tasarlanmıştır. ortamları, özellikle "DevToolsActivePort dosyası mevcut değil" hatasını ele alıyor. Bu sorun genellikle, gözetimsiz modda çalışan Chrome'un uyumsuzluklar veya bellek kısıtlamaları nedeniyle düzgün şekilde başlatılamaması durumunda ortaya çıkar. İlk komut dosyası, bir Chrome sürümü belirterek ve çalıştırma için çok önemli olan ChromeDriver ile uyumluluğunu sağlayarak bu sorunu çözer. testler. İlk komutlar apt paketlerinin güncellenmesini gerçekleştirir ve bir aynadan Google Chrome'un belirli bir sürümünü getirmek için wget'i kullanır. Ayna kullanmak, özellikle varsayılan depoda bu sürüm yoksa, doğru sürümün yüklenmesini sağlar. Bu yaklaşım, farklı test çalıştırmalarında tutarlı bir Chrome sürümünün kullanılmasını garanti eder.
Daha sonra komut dosyası, ayrıştırma komutunu kullanarak ana sürümü Chrome'dan (örneğin "117", "117.0.5938.62"den) ayırarak sürüm uyumlu bir ChromeDriver yüklemeye devam eder. Bu, komut dosyasının, ChromeDriver sürümleri için tasarlanmış bir URL modelini kullanarak söz konusu ana sürüm için gereken ChromeDriver'ı tam olarak getirmesine olanak tanır. Kurulum, bu sürümlerin hizalandığından emin olarak, uyumsuz sürümlerin genellikle DevTools hatasını tetikleyen ChromeDriver başlatma hatasına neden olmasını önler. ChromeDriver belirli bir sürümü indiremezse komut dosyası, en son sürümü indirmek için bir geri dönüş seçeneği içerir ve böylece esneklik korunur. Bu adımlar, hızlı ve güvenilir çözümlerin öncelikli olduğu otomatik CI/CD işlem hatlarında özellikle faydalıdır 🔧.
İndirdikten sonra komut dosyası, eski sürücülerle çakışmaları önlemek için önceden yüklenmiş ChromeDriver'ı "sudo rm -f" kullanarak sistemden siler. Bu, yalnızca doğru sürümün mevcut olmasını sağlayarak test kararlılığını bozabilecek sürüm çakışması risklerini en aza indirir. ChromeDriver izinleri de yürütülebilir olacak şekilde ayarlanmıştır; bu, sürücüyü CI/CD ortamlarında başlatmak için gerekli bir adımdır. Chrome'u "--no-sandbox" ve "--disable-dev-shm-usage" gibi seçeneklerle "başsız" modda kullanmak da Chrome'un kaynak ayak izini azaltır. Bu seçenekler, testlerin, DevToolsActivePort hatasının arkasındaki yaygın nedenlerden biri olan Chrome'un çökmesine neden olmadan sınırlı kaynaklara sahip ortamlarda (ör. bulut sunucuları veya CI ardışık düzenleri) çalıştırılmasına olanak tanır.
Son olarak, WebDriver kurulumunda "--disable-gpu" ve "--remote-debugging-port=9222" gibi seçenekler, Chrome'un başsız modda daha kararlı çalışmasını sağlar. “--disable-gpu” bayrağı, gereksiz ve bazen başsız modda sorunlu olan GPU oluşturmayı devre dışı bırakır. Bu arada, "--remote-debugging-port" seçeneği, Chrome'un Selenium'un CI'da kendisine bağlanması için gerekli olan bir hata ayıklama bağlantı noktası açmasına olanak tanır. Özetle bu kurulum, yaygın otomasyon darboğazlarını önleyerek daha güvenilir ve sağlam bir test ortamı sağlar. Sonuç olarak, bu komut dosyaları Chrome'un CI/CD sistemlerinde başsız çalıştırılmasını çok daha sorunsuz bir deneyim haline getirerek otomatik testlerin kesintisiz ve tutarlı bir şekilde çalışmasını sağlar 🚀.
GitHub Eylemlerindeki Selenyum testlerinde "DevToolsActivePort dosyası yok" hatasının çözülmesi
1. Çözüm: Chrome ve ChromeDriver için kurulum ve yapılandırma komut dosyası
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
Başsız modda GitHub Eylemleri için WebDriver'ı Java ile ayarlama
2. Çözüm: Chrome seçeneklerini yapılandırma ve WebDriver'ı Java'da başlatma
// 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();
Chrome ve WebDriver uyumluluğunu doğrulamak için birim testleri ekleme
3. Çözüm: Uyumluluğu sağlamak ve CI yürütme sırasında hataları önlemek için birim testleri
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();
}
}
Selenyum Testlerini GitHub Eylemleri ve Başsız Chrome ile Optimize Etme
Koşmanın önemli bir yönü GitHub Actions gibi CI/CD işlem hatlarında Selenyum'un kullanılması, çevresel kısıtlamaların anlaşılmasını sağlar. Chrome'un başsız modda çalıştırılması, grafiksel bir arayüz olmadan çalışması anlamına gelir ve bu da onu CI ortamları için mükemmel kılar. Ancak başsız Chrome, sistem yapılandırmalarına karşı daha duyarlı olabilir ve yerel ortama kıyasla ek kurulum gerektirir. "DevToolsActivePort dosyası mevcut değil" hatası genellikle Chrome'un başlatılmasındaki bir hatayla bağlantılıdır ve genellikle bellek kısıtlamaları veya yapılandırma uyumsuzluklarından kaynaklanır. Bellek açısından verimli yapılandırmaların uygulanması Ve bu sorunların üstesinden gelmeye yardımcı olur ve belleğin sınırlı olduğu CI/CD ortamlarında testleri önemli ölçüde kararlı hale getirebilir.
Uyumluluğu sağlamak için hem Chrome hem de ChromeDriver sürümlerini uyumlu tutmak önemlidir. Tutarsız sürümler GitHub Actions'da sık karşılaşılan hata kaynaklarından biridir; çünkü koşucu varsayılan olarak en son sürümü kullanabilir ve bu sürüm ChromeDriver gereksinimleriyle eşleşmeyebilir. Bu sorunu çözmek için çözümümüz, tam olarak karşılık gelen ChromeDriver sürümünü getirmek için ana Chrome sürümünü ayrıştırmayı ve kararlılığı artırmayı içerir. Ek olarak ayar bir iletişim bağlantı noktasını etkinleştirerek ChromeDriver'ın tarayıcıyla daha güvenilir bir şekilde etkileşime girmesine olanak tanır. Bu kurulum, GitHub Eylemleri veya benzer araçları otomatik olarak çalıştırmak için kullanırken gereklidir. sanal bir makinede.
Bu konfigürasyonlar verimlilikte büyük bir fark yaratır, hataları azaltır ve test çalıştırmalarının güvenilirliğini artırır. Kaynak açısından verimli seçeneklerin sağlanması ve doğru sürümlerin kullanılmasıyla, denetimsiz Chrome çalıştırmalarının başarılı bir şekilde yürütülme olasılığı çok daha yüksek olur ve geliştiriciler, testin ortasında sinir bozucu hatalarla uğraşmaktan kurtarılır. Sonuç olarak, sağlam yapılandırmalar ve uyumlu bağımlılıklar CI/CD test deneyimini daha sorunsuz hale getirerek geliştiricilerin kalıcı kurulum sorunlarıyla karşılaşmadan uygulamalarını oluşturmaya ve geliştirmeye odaklanmasına olanak tanır 🚀.
- "DevToolsActivePort dosyası mevcut değil" hatası ne anlama geliyor?
- Bu hata, genellikle kurulum uyumsuzluğu veya sistem kaynaklarının eksikliği nedeniyle Chrome'un başsız modda düzgün şekilde başlatılamaması durumunda ortaya çıkar. Gibi bellek seçeneklerini ayarlama çoğu zaman çözer.
- Chrome ve ChromeDriver sürümlerini eşleştirmek neden önemlidir?
- Sürümlerin eşleştirilmesi uyumluluk hatalarını önler. Kullanma ve belirli ChromeDriver'ın getirilmesi, bunların birlikte sorunsuz çalışmasını sağlar.
- Nasıl başsız test konusunda yardım?
- Chrome için bir bağlantı noktasının ChromeDriver tarafından kontrol edilmesini sağlayarak testlerin tarayıcı örneğine daha etkili bir şekilde bağlanmasını sağlar ve DevTools hatalarını önler.
- ne işe yarar Yapmak?
- Bu, Chrome'un korumalı alan oluşturma özelliğini devre dışı bırakır; bu, Chrome'un CI ortamlarında başlatılmasına yardımcı olur; çünkü korumalı alan oluşturma bazen başsız Chrome'un kısıtlı ortamlarda kilitlenmesine neden olabilir.
- ChromeDriver sürümünün indirilmesi başarısız olursa geri dönüş var mı?
- Evet, betiğimizde şunu kullanan bir geri dönüş var: eşleşen sürüm başarısız olursa yüklü Chrome sürümünden bağımsız olarak ChromeDriver'ın kullanılabilir olmasını sağlayın.
- CI/CD ardışık düzenlerinde Chrome belleğiyle ilgili sorunları nasıl önleyebilirim?
- Kullanma paylaşılan belleği yeniden yönlendirerek CI ortamlarındaki sınırlı /dev/shm alanı nedeniyle Chrome'un çökmesini önler.
- Başsız modda Chrome'da hata ayıklayabilir miyim?
- Evet kullanıyorum ve yerel olarak bir test çalıştırmak, başsız modda hata ayıklama için Chrome DevTools'u açmanıza olanak tanır.
- WebDriverManager, ChromeDriver güncellemelerini otomatik olarak yönetiyor mu?
- WebDriverManager, sürücü güncellemelerini yerel olarak basitleştirir, ancak CI/CD işlem hatlarında, gösterildiği gibi belirli sürümlerin ayarlanması, tekrarlanabilir derlemeler için daha güvenilirdir.
- Amacı nedir? senaryoda mı?
- Bu komut, Chrome'u kapatıp WebDriver oturumunu sonlandırarak kaynakları serbest bırakır ve CI/CD ortamlarındaki bellek sızıntılarını önler.
- Taahhüt etmeden önce Selenium kurulumumu GitHub Eylemlerinde nasıl test edebilirim?
- Testleri yerel olarak çalıştırma seçenekler ve CI yapılandırmaları sorunları GitHub'a göndermeden önce yakalayabilir ve hata ayıklamayı kolaylaştırır.
- CI'da ChromeDriver için hangi izinlere ihtiyacım var?
- ChromeDriver, tarafından belirlenen yürütme izinlerini gerektirir GitHub Eylemlerinde testleri başarıyla çalıştırmak için.
GitHub Eylemlerinde başsız Chrome ile Selenyum testleri için doğru kurulumun sağlanması, zamandan tasarruf sağlar ve güvenilirliği artırır. "DevToolsActivePort dosyası mevcut değil" gibi hataların ele alınması, CI/CD testini geliştiriciler için daha sorunsuz ve daha az sinir bozucu hale getirebilir.
Hizalayarak ve Chrome sürümlerini kullanarak ve belleği verimli kullanan seçenekleri yapılandırarak bu yaklaşım, testlerin kısıtlı ortamlarda verimli bir şekilde çalıştırılmasına yardımcı olur. Geliştiricilerin test kesintileri konusunda endişelenmeden temel görevlerine odaklanmasını sağlayan pratik bir çözümdür 🚀.
- CI/CD ortamları için başsız Chrome'da DevToolsActivePort sorunlarının çözümüne ilişkin ayrıntılı sorun giderme kılavuzu. Selenyum Web Sürücüsü Belgeleri
- Sürekli entegrasyon kurulumlarında Chrome ve ChromeDriver sürümleri için kapsamlı kurulum ve yapılandırma talimatları, tarafından sağlanmaktadır. GitHub Eylem Belgeleri
- ChromeDriver kurulumu, uyumluluğu ve yapılandırma seçenekleri için adım adım çözüm şu adreste mevcuttur: WebDriverManager Belgeleri
- Özellikle kısıtlı ortamlarda CI/CD'de bellek verimliliği için gözetimsiz Chrome'u yapılandırmaya yönelik en iyi uygulamalara ilişkin referans. Daha fazlasını şurada okuyun: Google Chrome Geliştirici Kılavuzu