सीआई/सीडी पाइपलाइनों में क्रोम परीक्षण विफलताओं पर काबू पाना
में सेलेनियम परीक्षण चल रहा है बिना सिर वाला क्रोम पर गिटहब क्रियाएँ निर्बाध होना चाहिए. फिर भी, कई डेवलपर्स को निराशाजनक "DevToolsActivePort फ़ाइल मौजूद नहीं है" त्रुटि का सामना करना पड़ता है। ऐसा तब होता है जब Chrome, किसी न किसी कारण से, CI परिवेश में ठीक से प्रारंभ होने में विफल हो जाता है।
त्रुटि संदेश आमतौर पर संकेत देता है कि क्रोम अप्रत्याशित रूप से क्रैश हो रहा है, जो अक्सर बेमेल का परिणाम होता है क्रोम और क्रोमड्राइवर परीक्षण सेटअप में संस्करण या गलत कॉन्फ़िगर किए गए विकल्प। कई डेवलपर्स की तरह, मुझे भी इस चुनौती का सामना करना पड़ा है, खासकर स्वचालित परीक्षणों को तैनात करते समय लगातार एकीकरण पर्यावरण।
इस सेटअप में, ChromeDriver संस्करण बेमेल की तरह सबसे छोटा गलत संरेखण, परीक्षण निष्पादन को रोक सकता है, जिससे मूल्यवान समय और संसाधन खर्च हो सकते हैं। सौभाग्य से, अंतर्निहित मुद्दों को समझने से इसे हल करना बहुत आसान हो जाता है 🛠️।
इस गाइड में, हम इस सामान्य त्रुटि को रोकने और समस्या निवारण के लिए व्यावहारिक कदमों पर गौर करेंगे। क्रोम इंस्टॉलेशन विशिष्टताओं से लेकर उचित ड्राइवर आरंभीकरण तक, आपको हर बार सुचारू परीक्षण सुनिश्चित करने के लिए चरण-दर-चरण प्रक्रिया मिलेगी। आइए इस समस्या से निपटें और अपने परीक्षणों को वापस पटरी पर लाएँ!
आज्ञा | उपयोग का उदाहरण |
---|---|
CHROME_VERSION="117.0.5938.62" | एक विशिष्ट क्रोम संस्करण सेट करता है, जो क्रोम और क्रोमड्राइवर के बीच बेमेल को रोकने के लिए सीआई परीक्षणों के दौरान क्रोमड्राइवर संगतता सुनिश्चित करने के लिए आवश्यक है। |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | पूर्ण Chrome संस्करण से प्रमुख संस्करण संख्या निकालता है। इसका उपयोग संगतता सुनिश्चित करने के लिए ChromeDriver का मिलान संस्करण डाउनलोड करने के लिए किया जाता है। |
LATEST_DRIVER=$(wget -qO- ...) | निर्दिष्ट क्रोम संस्करण के लिए नवीनतम संगत क्रोमड्राइवर संस्करण लाता है, जो स्वचालन स्क्रिप्ट में "DevToolsActivePort" त्रुटियों से बचने के लिए आवश्यक है। |
if [ -z "$LATEST_DRIVER" ] | जाँचता है कि क्या ChromeDriver संस्करण वैरिएबल खाली है, जो संगत संस्करण लाने में त्रुटि का संकेत देगा। यह स्थिति परीक्षण विफलताओं को रोकने के लिए फ़ॉलबैक लागू करने में मदद करती है। |
sudo dpkg -i $CHROME_DEB | डाउनलोड किए गए Chrome पैकेज को dpkg का उपयोग करके इंस्टॉल करता है, जो GitHub Actions जैसे Linux वातावरण में विशेष रूप से उपयोगी है। |
sudo rm -f /usr/local/bin/chromedriver | पहले से स्थापित किसी भी ChromeDriver को हटा देता है। यह सुनिश्चित करता है कि नई स्थापना के दौरान कोई संस्करण विरोध न हो। |
options.addArguments("--no-sandbox") | Chrome सैंडबॉक्सिंग सुविधा अक्षम करता है. यह सीआई परिवेशों में विशेष रूप से महत्वपूर्ण है, क्योंकि सैंडबॉक्सिंग क्रोम को हेडलेस मोड में प्रारंभ होने से रोक सकती है। |
options.addArguments("--disable-dev-shm-usage") | /dev/shm उपयोग को अक्षम करके उपलब्ध साझा मेमोरी को बढ़ाता है, जिससे कंटेनर जैसे सीमित मेमोरी वाले वातावरण में Chrome क्रैश को रोका जा सकता है। |
options.addArguments("--remote-debugging-port=9222") | किसी निर्दिष्ट पोर्ट पर दूरस्थ डिबगिंग सक्षम करता है। हेडलेस क्रोम के लिए कुछ परिवेशों में सही ढंग से काम करने के लिए यह एक आवश्यकता है, जिससे "DevToolsActivePort" त्रुटियों को रोका जा सके। |
driver.quit() | सभी Chrome विंडो बंद कर देता है और वेबड्राइवर सत्र समाप्त कर देता है, जिससे संसाधन खाली हो जाते हैं। संसाधन रिसाव को रोकने और उपलब्ध मेमोरी को ख़त्म होने से बचाने के लिए सीआई/सीडी पाइपलाइनों में यह आवश्यक है। |
सीआई में क्रोम और क्रोमड्राइवर सेटअप के लिए विस्तृत समाधान
उपरोक्त स्क्रिप्ट क्रोम और क्रोमड्राइवर दोनों को स्थापित और कॉन्फ़िगर करने के लिए डिज़ाइन की गई हैं गिटहब क्रियाएँ वातावरण, विशेष रूप से "DevToolsActivePort फ़ाइल मौजूद नहीं है" त्रुटि को संबोधित करता है। यह समस्या आम तौर पर तब होती है जब क्रोम, हेडलेस मोड में चल रहा है, बेमेल या मेमोरी बाधाओं के कारण ठीक से शुरू नहीं हो पाता है। पहली स्क्रिप्ट क्रोम संस्करण निर्दिष्ट करके और क्रोमड्राइवर के साथ इसकी संगतता सुनिश्चित करके इससे निपटती है, जो चलाने के लिए महत्वपूर्ण है सेलेनियम परीक्षण. प्रारंभिक आदेश उपयुक्त पैकेजों का अद्यतन करते हैं और दर्पण से Google Chrome का एक विशिष्ट संस्करण लाने के लिए wget का उपयोग करते हैं। दर्पण का उपयोग यह सुनिश्चित करता है कि सही संस्करण स्थापित है, खासकर यदि डिफ़ॉल्ट रिपॉजिटरी में इस संस्करण का अभाव है। यह दृष्टिकोण गारंटी देता है कि विभिन्न परीक्षण रन में क्रोम का एक सुसंगत संस्करण उपयोग किया जाता है।
इसके बाद, स्क्रिप्ट इसे पार्स करने के लिए एक कमांड का उपयोग करके क्रोम से प्रमुख संस्करण को अलग करके एक संस्करण-संगत क्रोमड्राइवर स्थापित करने के लिए आगे बढ़ती है (उदाहरण के लिए, "117" को "117.0.5938.62")। यह स्क्रिप्ट को ChromeDriver रिलीज़ के लिए डिज़ाइन किए गए URL पैटर्न का उपयोग करके उस विशिष्ट प्रमुख संस्करण के लिए आवश्यक सटीक ChromeDriver लाने की अनुमति देता है। यह सुनिश्चित करके कि ये संस्करण संरेखित हैं, सेटअप बेमेल संस्करणों को ChromeDriver आरंभीकरण विफलता का कारण बनने से रोकता है, जो अक्सर DevTools त्रुटि को ट्रिगर करता है। यदि ChromeDriver विशिष्ट संस्करण को डाउनलोड करने में विफल रहता है, तो स्क्रिप्ट में लचीलापन बनाए रखते हुए नवीनतम रिलीज़ को डाउनलोड करने के लिए फ़ॉलबैक विकल्प शामिल होता है। ये चरण स्वचालित सीआई/सीडी पाइपलाइनों में विशेष रूप से उपयोगी हैं जहां त्वरित और विश्वसनीय समाधान प्राथमिकता हैं 🔧।
डाउनलोड करने के बाद, स्क्रिप्ट पुराने ड्राइवरों के साथ टकराव से बचने के लिए "sudo rm -f" का उपयोग करके सिस्टम से पहले से स्थापित किसी भी ChromeDriver को हटा देती है। यह सुनिश्चित करता है कि केवल सही संस्करण ही मौजूद है, जिससे संस्करण टकराव के जोखिम कम हो जाते हैं जो परीक्षण स्थिरता को बाधित कर सकते हैं। ChromeDriver के लिए अनुमतियाँ भी निष्पादन योग्य होने के लिए निर्धारित हैं, जो CI/CD वातावरण में ड्राइवर को लॉन्च करने के लिए एक आवश्यक कदम है। क्रोम को "हेडलेस" मोड में "--नो-सैंडबॉक्स" और "--डिसेबल-डेव-शम-यूजेज" जैसे विकल्पों के साथ उपयोग करने से क्रोम के संसाधन पदचिह्न भी कम हो जाते हैं। ये विकल्प क्रोम को क्रैश किए बिना सीमित संसाधनों (जैसे, क्लाउड सर्वर या सीआई पाइपलाइन) वाले वातावरण में परीक्षण चलाने में सक्षम बनाते हैं, जो DevToolsActivePort त्रुटि के पीछे सामान्य कारणों में से एक है।
अंत में, वेबड्राइवर सेटअप में, "--disable-gpu" और "--remote-debugging-port=9222" जैसे विकल्प हेडलेस मोड में अधिक स्थिर Chrome रन सुनिश्चित करते हैं। "--डिसेबल-जीपीयू" ध्वज जीपीयू रेंडरिंग को अक्षम कर देता है, जो अनावश्यक है और कभी-कभी हेडलेस मोड में समस्याग्रस्त होता है। इस बीच, "--रिमोट-डीबगिंग-पोर्ट" विकल्प क्रोम को सेलेनियम को सीआई में कनेक्ट करने के लिए आवश्यक डिबगिंग पोर्ट खोलने की अनुमति देता है। संक्षेप में, यह सेटअप सामान्य स्वचालन बाधाओं को रोकता है, और अधिक विश्वसनीय और मजबूत परीक्षण वातावरण को सक्षम बनाता है। परिणामस्वरूप, ये स्क्रिप्ट सीआई/सीडी सिस्टम पर हेडलेस क्रोम चलाने को बहुत आसान अनुभव बनाती हैं, जिससे यह सुनिश्चित होता है कि स्वचालित परीक्षण बिना किसी रुकावट के लगातार चलते रहें।
GitHub क्रियाओं पर सेलेनियम परीक्षणों में "DevToolsActivePort फ़ाइल मौजूद नहीं है" त्रुटि का समाधान करना
समाधान 1: क्रोम और क्रोमड्राइवर के लिए इंस्टॉलेशन और कॉन्फ़िगरेशन स्क्रिप्ट
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
हेडलेस मोड में GitHub क्रियाओं के लिए जावा के साथ वेबड्राइवर सेट करना
समाधान 2: क्रोम विकल्पों को कॉन्फ़िगर करना और जावा में वेबड्राइवर को प्रारंभ करना
// 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();
क्रोम और वेबड्राइवर संगतता को सत्यापित करने के लिए यूनिट परीक्षण जोड़ना
समाधान 3: सीआई निष्पादन के दौरान अनुकूलता सुनिश्चित करने और त्रुटियों को रोकने के लिए यूनिट परीक्षण
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();
}
}
GitHub क्रियाओं और हेडलेस क्रोम के साथ सेलेनियम परीक्षणों का अनुकूलन
दौड़ने का एक महत्वपूर्ण पहलू बिना सिर वाला क्रोम GitHub Actions जैसी CI/CD पाइपलाइनों में सेलेनियम के साथ पर्यावरणीय बाधाओं को समझ रहा है। Chrome को हेडलेस मोड में चलाने का मतलब है कि यह ग्राफ़िकल इंटरफ़ेस के बिना संचालित होता है, जो इसे CI वातावरण के लिए एकदम सही बनाता है। हालाँकि, हेडलेस क्रोम सिस्टम कॉन्फ़िगरेशन के प्रति अधिक संवेदनशील हो सकता है और स्थानीय वातावरण की तुलना में अतिरिक्त सेटअप की आवश्यकता होती है। त्रुटि, "DevToolsActivePort फ़ाइल मौजूद नहीं है," आमतौर पर क्रोम के आरंभीकरण में विफलता से जुड़ी होती है, जो अक्सर मेमोरी बाधाओं या कॉन्फ़िगरेशन बेमेल के कारण होती है। स्मृति-कुशल कॉन्फ़िगरेशन को कार्यान्वित करना जैसे --अक्षम-देव-शम-उपयोग और --नो-सैंडबॉक्स इन मुद्दों को दूर करने में मदद करता है और मेमोरी-सीमित सीआई/सीडी वातावरण में परीक्षणों को महत्वपूर्ण रूप से स्थिर कर सकता है।
अनुकूलता सुनिश्चित करने के लिए, Chrome और ChromeDriver दोनों संस्करणों को संरेखित रखना आवश्यक है। असंगत संस्करण GitHub क्रियाओं में त्रुटियों का एक लगातार स्रोत हैं, क्योंकि रनर नवीनतम संस्करण के लिए डिफ़ॉल्ट हो सकता है, जो ChromeDriver आवश्यकताओं से मेल नहीं खा सकता है। इसे संबोधित करने के लिए, हमारे समाधान में प्रमुख क्रोम संस्करण को पार्स करना शामिल है ताकि सटीक क्रोमड्राइवर संस्करण प्राप्त किया जा सके जो स्थिरता में सुधार करता है। इसके अतिरिक्त, सेटिंग रिमोट-डिबगिंग-पोर्ट संचार पोर्ट को सक्षम करके ChromeDriver को ब्राउज़र के साथ अधिक विश्वसनीय रूप से इंटरैक्ट करने की अनुमति देता है। स्वचालित चलाने के लिए GitHub Actions या समान टूल का उपयोग करते समय यह सेटअप आवश्यक है ब्राउज़र परीक्षण एक वर्चुअल मशीन पर.
ये कॉन्फ़िगरेशन दक्षता में बड़ा अंतर लाते हैं, त्रुटियों को कम करते हैं और परीक्षण चलाने की विश्वसनीयता में सुधार करते हैं। संसाधन-कुशल विकल्पों को सुनिश्चित करने और सही संस्करणों का उपयोग करने से, हेडलेस क्रोम रन के सफलतापूर्वक निष्पादित होने की अधिक संभावना होती है, जिससे डेवलपर्स को परीक्षण के बीच में निराशाजनक त्रुटियों से निपटने से बचाया जा सकता है। अंततः, मजबूत कॉन्फ़िगरेशन और संगत निर्भरताएं सीआई/सीडी परीक्षण अनुभव को आसान बनाती हैं, जिससे डेवलपर्स लगातार सेटअप समस्याओं के व्यवधान के बिना अपने एप्लिकेशन बनाने और सुधारने पर ध्यान केंद्रित करने में सक्षम होते हैं।
GitHub क्रियाओं में क्रोम के साथ सेलेनियम चलाने के लिए सामान्य प्रश्न और समाधान
- त्रुटि "DevToolsActivePort फ़ाइल मौजूद नहीं है" का क्या अर्थ है?
- यह त्रुटि तब होती है जब क्रोम हेडलेस मोड में ठीक से प्रारंभ करने में विफल रहता है, आमतौर पर सेटअप बेमेल या सिस्टम संसाधनों की कमी के कारण। स्मृति विकल्पों को समायोजित करना जैसे --disable-dev-shm-usage अक्सर इसका समाधान करता है.
- Chrome और ChromeDriver संस्करणों का मिलान क्यों महत्वपूर्ण है?
- मिलान करने वाले संस्करण संगतता त्रुटियों से बचते हैं। का उपयोग करते हुए MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) और विशिष्ट ChromeDriver लाने से यह सुनिश्चित होता है कि वे एक साथ आसानी से काम करते हैं।
- कैसे हुआ --remote-debugging-port=9222 नेतृत्वहीन परीक्षण में मदद?
- यह Chrome के लिए एक पोर्ट को ChromeDriver द्वारा नियंत्रित करने में सक्षम बनाता है, जिससे परीक्षणों को ब्राउज़र इंस्टेंस के साथ अधिक प्रभावी ढंग से जुड़ने और DevTools त्रुटियों को रोकने की अनुमति मिलती है।
- क्या करता है --no-sandbox करना?
- यह क्रोम की सैंडबॉक्सिंग को अक्षम कर देता है, जो क्रोम को सीआई वातावरण में शुरू करने में मदद करता है, क्योंकि सैंडबॉक्सिंग के कारण कभी-कभी प्रतिबंधित वातावरण में हेडलेस क्रोम क्रैश हो सकता है।
- यदि ChromeDriver संस्करण डाउनलोड होने में विफल रहता है तो क्या कोई फ़ॉलबैक है?
- हाँ, हमारी स्क्रिप्ट में एक फ़ॉलबैक शामिल है जो उपयोग करता है --latest_release यदि मिलान संस्करण विफल हो जाता है, तो सुनिश्चित करें कि Chrome संस्करण स्थापित होने के बावजूद ChromeDriver उपलब्ध है।
- मैं सीआई/सीडी पाइपलाइनों में क्रोम मेमोरी से संबंधित समस्याओं से कैसे बचूं?
- का उपयोग करते हुए --disable-dev-shm-usage साझा मेमोरी को पुनर्निर्देशित करता है, सीआई वातावरण में सीमित /dev/shm स्थान के कारण क्रोम क्रैश को रोकता है।
- क्या मैं क्रोम को हेडलेस मोड में डीबग कर सकता हूं?
- हाँ, उपयोग कर रहा हूँ --remote-debugging-port और स्थानीय स्तर पर परीक्षण चलाने से आप हेडलेस मोड में डिबगिंग के लिए Chrome DevTools खोल सकते हैं।
- क्या WebDriverManager ChromeDriver अपडेट को स्वचालित रूप से प्रबंधित करता है?
- WebDriverManager स्थानीय रूप से ड्राइवर अपडेट को सरल बनाता है, लेकिन CI/CD पाइपलाइनों में, विशिष्ट संस्करण सेट करना, जैसा कि दिखाया गया है, दोहराए जाने योग्य बिल्ड के लिए अधिक विश्वसनीय है।
- का उद्देश्य क्या है driver.quit() स्क्रिप्ट में?
- यह कमांड क्रोम को बंद करके और वेबड्राइवर सत्र को समाप्त करके, सीआई/सीडी वातावरण में मेमोरी लीक को रोककर संसाधन जारी करता है।
- प्रतिबद्ध होने से पहले मैं GitHub Actions पर अपने सेलेनियम सेटअप का परीक्षण कैसे करूँ?
- के साथ स्थानीय स्तर पर परीक्षण चला रहे हैं headless विकल्प और CI कॉन्फ़िगरेशन GitHub पर जाने से पहले समस्याओं को पकड़ सकते हैं, जिससे डिबगिंग आसान हो जाती है।
- CI में ChromeDriver के लिए मुझे किन अनुमतियों की आवश्यकता होगी?
- ChromeDriver को इसके द्वारा निर्धारित निष्पादन अनुमतियों की आवश्यकता होती है sudo chmod +x /usr/local/bin/chromedriver, GitHub Actions में परीक्षण सफलतापूर्वक चलाने के लिए।
सीआई/सीडी परीक्षणों के लिए हेडलेस क्रोम को कॉन्फ़िगर करने पर अंतिम विचार
GitHub Actions पर हेडलेस क्रोम के साथ सेलेनियम परीक्षणों के लिए सही सेटअप सुनिश्चित करने से समय की बचत होती है और विश्वसनीयता बढ़ती है। "DevToolsActivePort फ़ाइल मौजूद नहीं है" जैसी त्रुटियों को संबोधित करने से डेवलपर्स के लिए CI/CD परीक्षण अधिक सहज और कम निराशाजनक हो सकता है।
संरेखित करके क्रोमड्राइवर और क्रोम संस्करण और मेमोरी-कुशल विकल्पों को कॉन्फ़िगर करना, यह दृष्टिकोण प्रतिबंधित वातावरण में कुशलतापूर्वक परीक्षण चलाने में मदद करता है। यह एक व्यावहारिक समाधान है जो डेवलपर्स को परीक्षण व्यवधानों के बारे में चिंता किए बिना अपने मुख्य कार्यों पर ध्यान केंद्रित करने देता है।
सेलेनियम और क्रोमड्राइवर समस्याओं के निवारण के लिए संदर्भ और स्रोत सामग्री
- सीआई/सीडी वातावरण के लिए हेडलेस क्रोम में DevToolsActivePort समस्याओं से निपटने के लिए विस्तृत समस्या निवारण मार्गदर्शिका। सेलेनियम वेबड्राइवर दस्तावेज़ीकरण
- सतत एकीकरण सेटअप में क्रोम और क्रोमड्राइवर संस्करणों के लिए व्यापक इंस्टॉलेशन और कॉन्फ़िगरेशन निर्देश, द्वारा प्रदान किए गए GitHub क्रियाएँ दस्तावेज़ीकरण
- ChromeDriver सेटअप, अनुकूलता और कॉन्फ़िगरेशन विकल्पों के लिए चरण-दर-चरण समाधान उपलब्ध है वेबड्राइवरमैनेजर दस्तावेज़ीकरण
- सीआई/सीडी में मेमोरी दक्षता के लिए हेडलेस क्रोम को कॉन्फ़िगर करने के लिए सर्वोत्तम प्रथाओं पर संदर्भ, विशेष रूप से प्रतिबंधित वातावरण में। पर और अधिक पढ़ें गूगल क्रोम डेवलपर गाइड