Chrome testa kļūmju pārvarēšana CI/CD cauruļvados
Selēna testu veikšana ieslēgts jābūt nevainojamam. Tomēr daudzi izstrādātāji saskaras ar kaitinošu kļūdu “DevToolsActivePort fails neeksistē”. Tas notiek, ja pārlūkam Chrome viena vai otra iemesla dēļ neizdodas pareizi startēt CI vidē.
Kļūdas ziņojums parasti norāda, ka Chrome negaidīti avarē, kas bieži vien ir neatbilstības rezultāts un versijas vai nepareizi konfigurētas opcijas testa iestatījumos. Tāpat kā daudzi izstrādātāji, es esmu saskāries ar šo izaicinājumu, jo īpaši, izvietojot automatizētus testus a vidi.
Šajā iestatījumā vismazākā novirze, piemēram, ChromeDriver versijas neatbilstība, var apturēt testa izpildi, izmaksājot vērtīgu laiku un resursus. Par laimi, izprotot pamatproblēmas, to atrisināšana ir daudz vienkāršāka 🛠️.
Šajā rokasgrāmatā mēs apskatīsim praktiskas darbības, lai novērstu un novērstu šo izplatīto kļūdu. Sākot ar Chrome instalēšanas specifiku un beidzot ar pareizu draivera inicializāciju, jūs atradīsiet detalizētu procesu, lai nodrošinātu vienmērīgu testa darbību. Risināsim šo problēmu un atgriezīsimies jūsu pārbaudēs!
Pavēli | Lietošanas piemērs |
---|---|
CHROME_VERSION="117.0.5938.62" | Iestata noteiktu Chrome versiju, kas ir būtiska ChromeDriver saderības nodrošināšanai CI testu laikā, lai novērstu neatbilstības starp Chrome un ChromeDriver. |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | Izvelk galvenās versijas numuru no pilnās Chrome versijas. To izmanto, lai lejupielādētu atbilstošu ChromeDriver versiju, nodrošinot saderību. |
LATEST_DRIVER=$(wget -qO- ...) | Ienes norādītajai Chrome versijai jaunāko saderīgo ChromeDriver versiju, kas ir būtiska, lai izvairītos no “DevToolsActivePort” kļūdām automatizācijas skriptos. |
if [ -z "$LATEST_DRIVER" ] | Pārbauda, vai ChromeDriver versijas mainīgais ir tukšs, kas norāda uz kļūdu, ienesot saderīgu versiju. Šis nosacījums palīdz piemērot atkāpšanos, lai novērstu testa kļūmes. |
sudo dpkg -i $CHROME_DEB | Instalē lejupielādēto Chrome pakotni, izmantojot dpkg, kas ir īpaši noderīga Linux vidēs, piemēram, GitHub Actions. |
sudo rm -f /usr/local/bin/chromedriver | Dzēš visus iepriekš instalētos ChromeDriver. Tas nodrošina, ka jaunās instalēšanas laikā nav versiju konflikta. |
options.addArguments("--no-sandbox") | Atspējo Chrome smilškastes funkciju. Tas ir īpaši svarīgi CI vidēs, jo smilškaste var neļaut pārlūkam Chrome startēt bezgalvu režīmā. |
options.addArguments("--disable-dev-shm-usage") | Palielina pieejamo koplietojamo atmiņu, atspējojot /dev/shm lietojumu, kas var novērst Chrome avārijas vidēs ar ierobežotu atmiņu, piemēram, konteineros. |
options.addArguments("--remote-debugging-port=9222") | Iespējo attālo atkļūdošanu noteiktā portā. Šī ir prasība, lai pārlūks Chrome bez galvas darbotos pareizi dažās vidēs, novēršot DevToolsActivePort kļūdas. |
driver.quit() | Aizver visus Chrome logus un pabeidz WebDriver sesiju, tādējādi atbrīvojot resursus. Tas ir būtiski CI/CD konveijeros, lai novērstu resursu noplūdi un nepieļautu pieejamās atmiņas izbeigšanos. |
Detalizēts risinājums Chrome un ChromeDriver iestatīšanai CI
Iepriekš minētie skripti ir paredzēti gan Chrome, gan ChromeDriver instalēšanai un konfigurēšanai vidēs, īpaši risinot kļūdu “DevToolsActivePort fails neeksistē”. Šī problēma parasti rodas, ja pārlūks Chrome, kas darbojas bezgalvu režīmā, nevar pareizi startēt neatbilstības vai atmiņas ierobežojumu dēļ. Pirmais skripts to risina, norādot Chrome versiju un nodrošinot tās saderību ar ChromeDriver, kas ir ļoti svarīga darbībai. testiem. Sākotnējās komandas veic apt pakotņu atjaunināšanu un izmanto wget, lai no spoguļa iegūtu noteiktu Google Chrome versiju. Spoguļa izmantošana nodrošina, ka ir instalēta pareizā versija, it īpaši, ja noklusējuma repozitorijā šīs versijas nav. Šī pieeja garantē konsekventas Chrome versijas izmantošanu dažādās testa darbībās.
Pēc tam skripts turpina ar versiju saderīga ChromeDriver instalēšanu, izolējot galveno versiju no Chrome (piemēram, "117" no "117.0.5938.62"), izmantojot komandu tā parsēšanai. Tas ļauj skriptam iegūt precīzu ChromeDriver, kas nepieciešams konkrētajai galvenajai versijai, izmantojot URL modeli, kas paredzēts ChromeDriver laidieniem. Pārliecinoties, ka šīs versijas ir saskaņotas, iestatīšana novērš to, ka neatbilstošas versijas izraisa ChromeDriver inicializācijas kļūmi, kas bieži vien izraisa DevTools kļūdu. Ja ChromeDriver neizdodas lejupielādēt konkrēto versiju, skriptā ir iekļauta rezerves opcija, lai lejupielādētu jaunāko versiju, saglabājot elastību. Šīs darbības ir īpaši noderīgas automatizētos CI/CD cauruļvados, kur ātri un uzticami risinājumi ir prioritāte 🔧.
Pēc lejupielādes skripts no sistēmas izdzēš visus iepriekš instalētos ChromeDriver, izmantojot “sudo rm -f”, lai izvairītos no konfliktiem ar vecākiem draiveriem. Tas nodrošina, ka ir pieejama tikai pareizā versija, samazinot versiju konfliktu risku, kas var traucēt testa stabilitāti. ChromeDriver atļaujas ir arī iestatītas kā izpildāmas, kas ir nepieciešama darbība, lai palaistu draiveri CI/CD vidēs. Izmantojot pārlūku Chrome “bez galvas” režīmā ar tādām opcijām kā “--no-sandbox” un “--disable-dev-shm-usage”, tiek samazināts arī Chrome resursu nospiedums. Šīs opcijas ļauj veikt testus vidēs ar ierobežotiem resursiem (piemēram, mākoņserveros vai CI konveijeros), neizraisot Chrome avāriju, kas ir viens no izplatītākajiem DevToolsActivePort kļūdas iemesliem.
Visbeidzot, WebDriver iestatījumos tādas opcijas kā “--disable-gpu” un “--remote-debugging-port=9222” nodrošina stabilāku Chrome darbību bezgalvu režīmā. Karogs “--disable-gpu” atspējo GPU renderēšanu, kas ir nevajadzīga un dažkārt problemātiska režīmā bez galvas. Tikmēr opcija “--remote-debugging-port” ļauj pārlūkam Chrome atvērt atkļūdošanas portu, kas ir nepieciešams Selenium, lai izveidotu savienojumu ar to CI. Kopumā šī iestatīšana novērš bieži sastopamas automatizācijas vājās vietas, nodrošinot uzticamāku un stabilāku testēšanas vidi. Rezultātā šie skripti padara pārlūka Chrome palaišanu bez galvām CI/CD sistēmās daudz vienmērīgāku, nodrošinot automātisko testu nepārtrauktu darbību bez žagas 🚀.
Kļūdas “DevToolsActivePort fails neeksistē” atrisināšana Selēna pārbaudēs pakalpojumā GitHub Actions
1. risinājums: instalēšanas un konfigurācijas skripts pārlūkam Chrome un 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
WebDriver iestatīšana ar Java GitHub darbībām bez galvas režīmā
2. risinājums: Chrome opciju konfigurēšana un WebDriver inicializēšana 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();
Vienību testu pievienošana, lai pārbaudītu Chrome un WebDriver saderību
3. risinājums: vienību testi, lai nodrošinātu saderību un novērstu kļūdas CI izpildes laikā
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();
}
}
Selēna testu optimizēšana, izmantojot GitHub darbības un pārlūku Chrome bez galvas
Viens svarīgs skriešanas aspekts ar selēnu CI/CD cauruļvados, piemēram, GitHub Actions, izprot vides ierobežojumus. Chrome palaišana bezgalvu režīmā nozīmē, ka tā darbojas bez grafiskā interfeisa, padarot to lieliski piemērotu CI vidēm. Tomēr pārlūks Chrome bez galvas var būt jutīgāks pret sistēmas konfigurācijām, un salīdzinājumā ar vietējo vidi ir nepieciešama papildu iestatīšana. Kļūda “DevToolsActivePort fails neeksistē” parasti ir saistīta ar Chrome inicializēšanas kļūmi, ko bieži izraisa atmiņas ierobežojumi vai konfigurācijas neatbilstības. Atmiņu taupošu konfigurāciju ieviešana, piemēram un palīdz pārvarēt šīs problēmas un var ievērojami stabilizēt testus CI/CD vidēs ar ierobežotu atmiņu.
Lai nodrošinātu saderību, ir svarīgi saskaņot gan Chrome, gan ChromeDriver versijas. Nekonsekventas versijas ir bieži sastopams kļūdu avots programmā GitHub Actions, jo palaidējs pēc noklusējuma var izmantot jaunāko versiju, kas var neatbilst ChromeDriver prasībām. Lai to novērstu, mūsu risinājums ietver galvenās Chrome versijas parsēšanu, lai iegūtu precīzu atbilstošo ChromeDriver versiju, tādējādi uzlabojot stabilitāti. Turklāt iestatīšana ļauj ChromeDriver uzticamāk mijiedarboties ar pārlūkprogrammu, iespējojot sakaru portu. Šī iestatīšana ir būtiska, ja izmantojat GitHub Actions vai līdzīgus rīkus automatizētai darbībai virtuālajā mašīnā.
Šīs konfigurācijas ievērojami uzlabo efektivitāti, samazinot kļūdas un uzlabojot testa braucienu uzticamību. Nodrošinot resursefektīvas iespējas un izmantojot pareizās versijas, ir daudz lielāka iespēja, ka Chrome palaišana bez galvas tiks veiksmīgi izpildīta, tādējādi pasargājot izstrādātājus no kaitinošām kļūdām pārbaudes laikā. Galu galā spēcīgas konfigurācijas un saderīgas atkarības padara CI/CD testēšanas pieredzi vienmērīgāku, ļaujot izstrādātājiem koncentrēties uz savu lietojumprogrammu izveidi un uzlabošanu, neizjaucot pastāvīgās iestatīšanas problēmas 🚀.
- Ko nozīmē kļūda "DevToolsActivePort fails neeksistē"?
- Šī kļūda rodas, ja Chrome neizdodas pareizi startēt bezgalvas režīmā, parasti iestatīšanas neatbilstības vai sistēmas resursu trūkuma dēļ. Atmiņas iespēju pielāgošana, piemēram bieži to atrisina.
- Kāpēc ir svarīgi saskaņot Chrome un ChromeDriver versijas?
- Versiju saskaņošana ļauj izvairīties no saderības kļūdām. Izmantojot un konkrētā ChromeDriver iegūšana nodrošina to nevainojamu sadarbību.
- Kā dara palīdzēt testēšanā bez galvas?
- Tas ļauj pārlūkam Chrome portu kontrolēt ChromeDriver, ļaujot testiem efektīvāk izveidot savienojumu ar pārlūkprogrammas instanci un novērst DevTools kļūdas.
- Ko dara darīt?
- Tādējādi tiek atspējota Chrome smilškaste, kas palīdz pārlūkam Chrome startēt CI vidēs, jo smilškastes izmantošana dažkārt var izraisīt Chrome bezgalvas avāriju ierobežotās vidēs.
- Vai pastāv atkāpšanās iespēja, ja neizdodas lejupielādēt ChromeDriver versiju?
- Jā, mūsu skriptā ir iekļauts rezerves variants, kas izmanto ja atbilstošā versija neizdodas, nodrošinot, ka ChromeDriver ir pieejams neatkarīgi no instalētās Chrome versijas.
- Kā izvairīties no ar Chrome atmiņu saistītām problēmām CI/CD konveijeros?
- Izmantojot novirza koplietoto atmiņu, novēršot Chrome avārijas ierobežotas /dev/shm vietas dēļ CI vidēs.
- Vai varu atkļūdot pārlūku Chrome bezgalvas režīmā?
- Jā, izmantojot un lokāli izpildot testu, varat atvērt Chrome DevTools atkļūdošanai bezgalvas režīmā.
- Vai WebDriverManager automātiski apstrādā ChromeDriver atjauninājumus?
- WebDriverManager vienkāršo draiveru atjaunināšanu lokāli, bet CI/CD konveijeros konkrētu versiju iestatīšana, kā parādīts attēlā, ir uzticamāka atkārtojamām versijām.
- Kāds ir mērķis scenārijā?
- Šī komanda atbrīvo resursus, aizverot Chrome un pabeidzot WebDriver sesiju, novēršot atmiņas noplūdes CI/CD vidēs.
- Kā pārbaudīt Selēna iestatījumu pakalpojumā GitHub Actions pirms apņemšanās?
- Veicot testus lokāli ar opcijas un CI konfigurācijas var novērst problēmas pirms pārsūtīšanas uz GitHub, tādējādi atvieglojot atkļūdošanu.
- Kādas atļaujas man ir vajadzīgas ChromeDriver in CI?
- ChromeDriver pieprasa izpildes atļaujas, ko iestatījis , lai veiksmīgi izpildītu pārbaudes pakalpojumā GitHub Actions.
Pareizas Selēna testu iestatīšanas nodrošināšana, izmantojot pārlūku Chrome bez galvas, izmantojot GitHub Actions, ietaupa laiku un palielina uzticamību. Pievēršoties kļūdām, piemēram, “DevToolsActivePort fails neeksistē”, CI/CD testēšana var kļūt nevainojama un izstrādātājiem mazāk nomākta.
Izlīdzinot un Chrome versijām un konfigurējot atmiņu taupošas opcijas, šī pieeja palīdz efektīvi veikt testus ierobežotās vidēs. Tas ir praktisks risinājums, kas ļauj izstrādātājiem koncentrēties uz saviem pamatuzdevumiem, neuztraucoties par testēšanas traucējumiem 🚀.
- Detalizēts problēmu novēršanas ceļvedis par DevToolsActivePort problēmu risināšanu pārlūkprogrammā Chrome CI/CD vidēs bez galvas. Selēna tīmekļa draivera dokumentācija
- Visaptverošas instalēšanas un konfigurācijas instrukcijas Chrome un ChromeDriver versijām nepārtrauktās integrācijas iestatījumos, ko nodrošina GitHub darbību dokumentācija
- Soli pa solim pieejams ChromeDriver iestatīšanas, saderības un konfigurācijas opciju risinājums WebDriverManager dokumentācija
- Atsauce uz paraugpraksi bezgalvu pārlūka Chrome konfigurēšanai atmiņas efektivitātei CI/CD, īpaši ierobežotā vidē. Vairāk lasiet vietnē Google Chrome izstrādātāja rokasgrāmata