Chrome-testivirheiden voittaminen CI/CD-putkissa
Seleenitestien suorittaminen päätön Chrome päällä GitHub-toiminnot pitäisi olla saumaton. Silti monet kehittäjät kohtaavat turhauttavan "DevToolsActivePort-tiedostoa ei ole olemassa" -virheen. Näin tapahtuu, kun Chrome ei syystä tai toisesta käynnisty kunnolla CI-ympäristössä.
Virheilmoitus ilmoittaa yleensä, että Chrome kaatuu odottamatta, mikä johtuu usein yhteensopimattomuudesta Kromi ja ChromeDriver versiot tai väärin määritetyt asetukset testiasetuksissa. Kuten monet kehittäjät, olen kohdannut tämän haasteen, etenkin kun otan käyttöön automaattisia testejä a jatkuva integraatio ympäristöön.
Tässä asetuksessa pieninkin virhe, kuten ChromeDriver-version epäsopivuus, voi pysäyttää testin suorittamisen, mikä maksaa arvokasta aikaa ja resursseja. Onneksi taustalla olevien ongelmien ymmärtäminen helpottaa sen ratkaisemista huomattavasti 🛠️.
Tässä oppaassa sukeltamme käytännön vaiheisiin tämän yleisen virheen ehkäisemiseksi ja vianmäärittämiseksi. Löydät vaiheittaisen prosessin Chromen asennustiedoista oikeaan ohjaimen alustukseen, joka varmistaa sujuvan testiajon joka kerta. Tartutaan tähän ongelmaan ja laitetaan testit takaisin raiteilleen!
Komento | Käyttöesimerkki |
---|---|
CHROME_VERSION="117.0.5938.62" | Asettaa tietyn Chrome-version, joka on välttämätön ChromeDriver-yhteensopivuuden varmistamiseksi CI-testien aikana, jotta vältetään ristiriidat Chromen ja ChromeDriverin välillä. |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | Poimii pääversionumeron täydellisestä Chrome-versiosta. Tätä käytetään lataamaan vastaava versio ChromeDriverista, mikä varmistaa yhteensopivuuden. |
LATEST_DRIVER=$(wget -qO- ...) | Hakee uusimman yhteensopivan ChromeDriver-version määritetylle Chrome-versiolle, mikä on välttämätöntä "DevToolsActivePort"-virheiden välttämiseksi automaatiokomentosarjassa. |
if [ -z "$LATEST_DRIVER" ] | Tarkistaa, onko ChromeDriver-versiomuuttuja tyhjä, mikä viittaa virheeseen yhteensopivan version noutamisessa. Tämä ehto auttaa ottamaan käyttöön varaosan testivirheiden estämiseksi. |
sudo dpkg -i $CHROME_DEB | Asentaa ladatun Chrome-paketin dpkg:lla, joka on erityisen hyödyllinen Linux-ympäristöissä, kuten GitHub Actions. |
sudo rm -f /usr/local/bin/chromedriver | Poistaa kaikki aiemmin asennetut ChromeDriverit. Tämä varmistaa, että uuden asennuksen aikana ei esiinny versioristiriitoja. |
options.addArguments("--no-sandbox") | Poistaa käytöstä Chromen hiekkalaatikkoominaisuuden. Tämä on erityisen tärkeää CI-ympäristöissä, koska hiekkalaatikko voi estää Chromea käynnistymästä päättömässä tilassa. |
options.addArguments("--disable-dev-shm-usage") | Lisää käytettävissä olevaa jaettua muistia poistamalla käytöstä /dev/shm-käytön, mikä voi estää Chromen kaatumisen ympäristöissä, joissa on rajoitettu muisti, kuten säilöissä. |
options.addArguments("--remote-debugging-port=9222") | Ottaa käyttöön etävirheenkorjauksen tietyssä portissa. Tämä on vaatimus, jotta päätön Chrome toimii oikein joissakin ympäristöissä, mikä estää DevToolsActivePort-virheet. |
driver.quit() | Sulkee kaikki Chrome-ikkunat ja päättää WebDriver-istunnon vapauttaen resursseja. Tämä on välttämätöntä CI/CD-putkissa, jotta estetään resurssivuodot ja vapaan muistin loppuminen. |
Yksityiskohtainen ratkaisu Chrome- ja ChromeDriver-asetuksiin CI:ssä
Yllä olevat komentosarjat on suunniteltu asentamaan ja määrittämään sekä Chrome että ChromeDriver GitHub-toiminnot ympäristöissä, jotka koskevat erityisesti "DevToolsActivePort-tiedostoa ei ole olemassa" -virhettä. Tämä ongelma ilmenee yleensä silloin, kun päättömässä tilassa toimiva Chrome ei voi käynnistyä oikein yhteensopivuusvirheiden tai muistirajoitusten vuoksi. Ensimmäinen komentosarja ratkaisee tämän määrittämällä Chrome-version ja varmistamalla sen yhteensopivuuden ChromeDriverin kanssa, mikä on ratkaisevan tärkeää toiminnan kannalta. Seleeni testit. Alkukomennot suorittavat apt-pakettien päivityksen ja hakevat tietyn Google Chromen version peilistä käyttämällä wget:tä. Peilin käyttö varmistaa, että oikea versio asennetaan, varsinkin jos oletusarkistosta puuttuu tämä versio. Tämä lähestymistapa takaa, että Chromen yhdenmukaista versiota käytetään eri testiajoissa.
Seuraavaksi komentosarja asentaa versioyhteensopivan ChromeDriverin eristämällä pääversion Chromesta (esim. "117" ja "117.0.5938.62") komentoa sen jäsentämiseksi. Tämän ansiosta komentosarja voi noutaa juuri kyseiselle pääversiolle tarvittavan ChromeDriverin käyttämällä ChromeDriver-julkaisuja varten suunniteltua URL-osoitemallia. Varmistamalla, että nämä versiot ovat kohdakkain, asennus estää yhteensopimattomia versioita aiheuttamasta ChromeDriverin alustusvirhettä, joka usein laukaisee DevTools-virheen. Jos ChromeDriver ei pysty lataamaan tiettyä versiota, skripti sisältää varavaihtoehdon uusimman julkaisun lataamiseksi, mikä säilyttää joustavuuden. Nämä vaiheet ovat erityisen hyödyllisiä automatisoiduissa CI/CD-putkissa, joissa nopeat ja luotettavat ratkaisut ovat etusijalla 🔧.
Latauksen jälkeen komentosarja poistaa kaikki aiemmin asennetut ChromeDriverit järjestelmästä komennolla "sudo rm -f", jotta vältetään ristiriidat vanhempien ohjaimien kanssa. Tämä varmistaa, että vain oikea versio on käytössä, minimoiden versioristiriitojen riskit, jotka voivat häiritä testin vakautta. ChromeDriverin käyttöoikeudet on myös asetettu suoritettaviksi, mikä on välttämätön vaihe ohjaimen käynnistämiseksi CI-/CD-ympäristöissä. Chromen käyttäminen "headless"-tilassa vaihtoehtojen kuten "--no-sandbox" ja "--disable-dev-shm-usage" kanssa vähentää myös Chromen resurssien jalanjälkeä. Nämä vaihtoehdot mahdollistavat testien suorittamisen ympäristöissä, joissa on rajalliset resurssit (esim. pilvipalvelimet tai CI-putket) aiheuttamatta Chromen kaatumista, mikä on yksi yleisimmistä DevToolsActivePort-virheen syistä.
Lopuksi WebDriver-asetuksissa vaihtoehdot, kuten "--disable-gpu" ja "--remote-debugging-port=9222", varmistavat vakaamman Chromen käytön päättömässä tilassa. "--disable-gpu" -lippu poistaa käytöstä GPU-renderöinnin, mikä on tarpeetonta ja joskus ongelmallista päättömässä tilassa. Sillä välin "--remote-debugging-port" -vaihtoehdon avulla Chrome voi avata virheenkorjausportin, joka on välttämätön, jotta Selenium voi muodostaa yhteyden siihen CI:ssä. Yhteenvetona voidaan todeta, että tämä asennus estää yleisiä automaation pullonkauloja ja mahdollistaa luotettavamman ja kestävämmän testausympäristön. Tämän seurauksena nämä skriptit tekevät päättömästä Chromesta CI-/CD-järjestelmissä paljon sujuvamman kokemuksen, mikä varmistaa, että automaattiset testit toimivat johdonmukaisesti ilman hikkaa 🚀.
"DevToolsActivePort-tiedostoa ei ole olemassa" -virheen ratkaiseminen GitHub Actionsin Selenium-testeissä
Ratkaisu 1: Asennus- ja määritysskripti Chromelle ja ChromeDriverille
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
WebDriverin määrittäminen Javalla GitHub Actionsille päättömässä tilassa
Ratkaisu 2: Chrome-asetusten määrittäminen ja WebDriverin alustaminen Javassa
// 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();
Yksikkötestien lisääminen Chromen ja WebDriverin yhteensopivuuden varmistamiseksi
Ratkaisu 3: Yksikkötestaukset varmistaakseen yhteensopivuuden ja estääkseen virheet CI:n suorittamisen aikana
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();
}
}
Seleenitestien optimointi GitHub-toimintojen ja päättömän Chromen avulla
Yksi tärkeä osa juoksua päätön Chrome Seleenin kanssa CI/CD-putkissa, kuten GitHub Actions, ymmärtää ympäristörajoitteet. Chromen käyttäminen päättömässä tilassa tarkoittaa, että se toimii ilman graafista käyttöliittymää, joten se sopii täydellisesti CI-ympäristöihin. Päätön Chrome voi kuitenkin olla herkempi järjestelmän määrityksille ja vaatii lisäasetuksia paikalliseen ympäristöön verrattuna. Virhe "DevToolsActivePort-tiedostoa ei ole olemassa", linkitetään yleensä Chromen alustusvirheeseen, joka johtuu usein muistin rajoituksista tai asetusten yhteensopimattomuudesta. Muistitehokkaiden kokoonpanojen toteuttaminen, kuten --disable-dev-shm-usage ja --ei hiekkalaatikkoa auttaa voittamaan nämä ongelmat ja voi merkittävästi vakauttaa testejä muistirajoitteisissa CI/CD-ympäristöissä.
Yhteensopivuuden varmistamiseksi on tärkeää pitää sekä Chrome- että ChromeDriver-versiot linjassa. Epäjohdonmukaiset versiot aiheuttavat usein virheitä GitHub Actionsissa, koska suoritin saattaa käyttää oletuksena uusinta versiota, joka ei välttämättä vastaa ChromeDriverin vaatimuksia. Tämän ratkaisemiseksi ratkaisumme sisältää tärkeimmän Chrome-version jäsentämisen, jotta saadaan täsmälleen vastaava ChromeDriver-versio, mikä parantaa vakautta. Lisäksi asetus kauko-debuggaus-portti mahdollistaa ChromeDriverin vuorovaikutuksen selaimen kanssa luotettavammin ottamalla käyttöön viestintäportin. Tämä asennus on välttämätöntä käytettäessä GitHub Actionsia tai vastaavia työkaluja automaattiseen suorittamiseen selaintestejä virtuaalikoneessa.
Näillä kokoonpanoilla on suuri ero tehokkuudessa, mikä vähentää virheitä ja parantaa testiajojen luotettavuutta. Varmistamalla resurssitehokkaat vaihtoehdot ja käyttämällä oikeita versioita, päättömät Chrome-ajot onnistuvat paljon todennäköisemmin, mikä säästää kehittäjät turhauttavilta virheiltä kesken testauksen. Lopulta kestävät kokoonpanot ja yhteensopivat riippuvuudet tekevät CI/CD-testauskokemuksesta sujuvamman, jolloin kehittäjät voivat keskittyä sovellusten luomiseen ja parantamiseen ilman jatkuvia asennusongelmia 🚀.
Yleisiä kysymyksiä ja ratkaisuja Seleenin käyttämiseen Chromen kanssa GitHub Actionsissa
- Mitä virhe "DevToolsActivePort-tiedostoa ei ole olemassa" tarkoittaa?
- Tämä virhe ilmenee, kun Chrome ei käynnisty kunnolla päättömässä tilassa, mikä johtuu tyypillisesti asetusten yhteensopimattomuudesta tai järjestelmäresurssien puutteesta. Muistivaihtoehtojen säätäminen, esim --disable-dev-shm-usage usein ratkaisee sen.
- Miksi Chrome- ja ChromeDriver-versioiden yhteensovittaminen on tärkeää?
- Versioiden yhteensopivuus välttää yhteensopivuusvirheet. Käyttämällä MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) ja tietyn ChromeDriverin hakeminen varmistaa, että ne toimivat sujuvasti yhdessä.
- Miten --remote-debugging-port=9222 apua päättömässä testissä?
- Sen avulla ChromeDriver voi ohjata porttia Chromelle, jolloin testit voivat muodostaa yhteyden selainesiintymään tehokkaammin ja estää DevTools-virheet.
- Mitä tekee --no-sandbox tehdä?
- Tämä poistaa Chromen hiekkalaatikon käytöstä, mikä auttaa Chromea käynnistymään CI-ympäristöissä, koska hiekkalaatikko voi joskus aiheuttaa päättömän Chromen kaatumisen rajoitetuissa ympäristöissä.
- Onko olemassa varavaihtoehtoa, jos ChromeDriver-versio ei lataudu?
- Kyllä, skriptimme sisältää varaosan, joka käyttää --latest_release jos vastaava versio epäonnistuu, varmista, että ChromeDriver on saatavilla asennetusta Chrome-versiosta riippumatta.
- Miten vältän Chromen muistiin liittyvät ongelmat CI/CD-putkissa?
- Käyttämällä --disable-dev-shm-usage uudelleenohjaa jaetun muistin ja estää Chromen kaatumisen rajoitetun /dev/shm-tilan vuoksi CI-ympäristöissä.
- Voinko tehdä Chromen virheenkorjauksen päättömässä tilassa?
- Kyllä, käyttää --remote-debugging-port ja suoritamalla testin paikallisesti voit avata Chrome DevToolsin virheenkorjausta varten päättömässä tilassa.
- Hoitaako WebDriverManager ChromeDriver-päivitykset automaattisesti?
- WebDriverManager yksinkertaistaa ohjainpäivityksiä paikallisesti, mutta CI/CD-putkissa tiettyjen versioiden määrittäminen, kuten kuvassa, on luotettavampaa toistettavissa koontiversioissa.
- Mikä on tarkoitus driver.quit() käsikirjoituksessa?
- Tämä komento vapauttaa resursseja sulkemalla Chromen ja päättämällä WebDriver-istunnon, mikä estää muistivuodot CI-/CD-ympäristöissä.
- Kuinka testaan Selenium-asetuksiani GitHub Actionsissa ennen sitoutumista?
- Testien suorittaminen paikallisesti headless vaihtoehdot ja CI-kokoonpanot voivat havaita ongelmia ennen GitHubiin siirtymistä, mikä helpottaa virheenkorjausta.
- Mitä oikeuksia tarvitsen ChromeDriveriin CI:ssä?
- ChromeDriver vaatii suoritusoikeudet, jonka on määrittänyt sudo chmod +x /usr/local/bin/chromedriver, suorittaaksesi testit onnistuneesti GitHub Actionsissa.
Viimeisiä ajatuksia päättömän Chromen määrittämisestä CI-/CD-testejä varten
Seleenitestien oikean asennuksen varmistaminen päättömällä Chromella GitHub Actionsissa säästää aikaa ja lisää luotettavuutta. Virheiden, kuten "DevToolsActivePort-tiedostoa ei ole olemassa", korjaaminen voi tehdä CI/CD-testauksesta saumattomampaa ja vähemmän turhauttavaa kehittäjille.
Tasaamalla ChromeDriver ja Chrome-versiot ja määrittämällä muistia säästäviä vaihtoehtoja, tämä lähestymistapa auttaa suorittamaan testit tehokkaasti rajoitetuissa ympäristöissä. Se on käytännöllinen ratkaisu, jonka avulla kehittäjät voivat keskittyä ydintehtäviinsä huolehtimatta testihäiriöistä 🚀.
Viitteitä ja lähdemateriaaleja seleeni- ja ChromeDriver-ongelmien vianmääritystä varten
- Yksityiskohtainen vianetsintäopas DevToolsActivePort-ongelmien käsittelemiseen päättömässä Chrome CI-/CD-ympäristöissä. Selenium WebDriver -dokumentaatio
- Kattavat asennus- ja määritysohjeet Chrome- ja ChromeDriver-versioille jatkuvassa integraatioasetuksissa, tarjoaa GitHub-toimintojen dokumentaatio
- Vaiheittainen ratkaisu ChromeDriver-asennus-, yhteensopivuus- ja määritysvaihtoehtoihin WebDriverManager-dokumentaatio
- Viittaus parhaisiin käytäntöihin päättömän Chromen määrittämiseksi muistin tehokkuuden parantamiseksi CI/CD:ssä, erityisesti rajoitetuissa ympäristöissä. Lue lisää osoitteessa Google Chrome -kehittäjäopas