„Chrome“ naudojimas norint ištaisyti „DevToolsActivePort“ failo klaidą „Selenium“ naudojant „GitHub“ veiksmus

ChromeDriver

„Chrome“ bandymo nesėkmių įveikimas CI / CD vamzdynuose

Atlikite seleno testus įjungta turėtų būti vientisa. Tačiau daugelis kūrėjų susiduria su varginančia klaida „DevToolsActivePort failas neegzistuoja“. Taip nutinka, kai „Chrome“ dėl vienos ar kitos priežasties nepavyksta tinkamai paleisti CI aplinkoje.

Klaidos pranešimas paprastai rodo, kad „Chrome“ netikėtai užstringa, o tai dažnai atsiranda dėl neatitikimo ir versijos arba neteisingai sukonfigūruotos parinktys bandymo sąrankoje. Kaip ir daugelis kūrėjų, aš susidūriau su šiuo iššūkiu, ypač diegdamas automatinius testus a aplinką.

Taikant šią sąranką, dėl mažiausių nesutapimų, pvz., „ChromeDriver“ versijos neatitikimo, bandymo vykdymas gali būti sustabdytas, o tai kainuotų brangų laiką ir išteklius. Laimei, supratus esmines problemas jas išspręsti daug lengviau 🛠️.

Šiame vadove apžvelgsime praktinius veiksmus, kaip išvengti šios dažnos klaidos ir ją pašalinti. Nuo „Chrome“ diegimo specifikos iki tinkamo tvarkyklės inicijavimo rasite nuoseklų procesą, kad kiekvieną kartą būtų užtikrintas sklandus bandymas. Išspręskime šią problemą ir sugrąžinkime testus į vėžes!

komandą Naudojimo pavyzdys
CHROME_VERSION="117.0.5938.62" Nustatoma konkreti „Chrome“ versija, būtina norint užtikrinti „ChromeDriver“ suderinamumą atliekant CI bandymus, kad būtų išvengta „Chrome“ ir „ChromeDriver“ neatitikimų.
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) Ištraukia pagrindinį versijos numerį iš visos „Chrome“ versijos. Tai naudojama norint atsisiųsti atitinkamą „ChromeDriver“ versiją, kad būtų užtikrintas suderinamumas.
LATEST_DRIVER=$(wget -qO- ...) Gauna naujausią suderinamą „ChromeDriver“ versiją, skirtą nurodytai „Chrome“ versijai, kuri būtina norint išvengti „DevToolsActivePort“ klaidų automatizavimo scenarijuose.
if [ -z "$LATEST_DRIVER" ] Patikrina, ar „ChromeDriver“ versijos kintamasis tuščias, o tai reikštų klaidą gaunant suderinamą versiją. Ši sąlyga padeda taikyti atsarginę priemonę, kad būtų išvengta bandymo nesėkmių.
sudo dpkg -i $CHROME_DEB Įdiegia atsisiųstą „Chrome“ paketą naudodamas dpkg, kuris ypač naudingas „Linux“ aplinkose, pvz., „GitHub Actions“.
sudo rm -f /usr/local/bin/chromedriver Ištrina visas anksčiau įdiegtas „Chrome“ tvarkykles. Tai užtikrina, kad naujo diegimo metu nebus versijos konflikto.
options.addArguments("--no-sandbox") Išjungiama „Chrome“ smėlio dėžės funkcija. Tai ypač svarbu CI aplinkoje, nes smėlio dėžė gali neleisti „Chrome“ paleisti be galvos režimo.
options.addArguments("--disable-dev-shm-usage") Padidina bendrinamą atmintį išjungus /dev/shm naudojimą, o tai gali užkirsti kelią „Chrome“ gedimams ribotos atminties aplinkoje, pvz., sudėtiniuose rodiniuose.
options.addArguments("--remote-debugging-port=9222") Įgalinamas nuotolinis derinimas nurodytame prievade. Tai yra reikalavimas, kad „Chrome“ be galvos tinkamai veiktų kai kuriose aplinkose ir išvengtų „DevToolsActivePort“ klaidų.
driver.quit() Uždaromi visi „Chrome“ langai ir baigiama „WebDriver“ sesija, atlaisvinama išteklių. Tai būtina CI / CD vamzdynuose, kad būtų išvengta išteklių nutekėjimo ir nepritrūktų laisvos atminties.

Išsamus „Chrome“ ir „Chrome“ tvarkyklės sąrankos sprendimas CI

Aukščiau pateikti scenarijai skirti įdiegti ir konfigūruoti „Chrome“ ir „ChromeDriver“. aplinkose, konkrečiai sprendžiant klaidą „DevToolsActivePort failas neegzistuoja“. Ši problema paprastai kyla, kai „Chrome“, veikianti be galvos režimu, negali tinkamai paleisti dėl neatitikimų arba atminties apribojimų. Pirmasis scenarijus tai išsprendžia, nurodydamas „Chrome“ versiją ir užtikrindamas jos suderinamumą su „ChromeDriver“, kuri yra labai svarbi norint paleisti bandymai. Pradinės komandos atnaujina apt paketus ir naudoja wget, kad gautų konkrečią „Google Chrome“ versiją iš veidrodžio. Naudojant veidrodį užtikrinama, kad įdiegta tinkama versija, ypač jei numatytojoje saugykloje šios versijos nėra. Šis metodas garantuoja, kad įvairiuose bandomuosiuose paleidimuose bus naudojama nuosekli „Chrome“ versija.

Tada scenarijus pradeda diegti su versija suderinamą „ChromeDriver“, išskiriant pagrindinę „Chrome“ versiją (pvz., „117“ nuo „117.0.5938.62“), naudojant komandą, skirtą jį analizuoti. Tai leidžia scenarijui gauti tikslią „ChromeDriver“, reikalingą tai konkrečiai pagrindinei versijai, naudojant URL šabloną, sukurtą „ChromeDriver“ leidimams. Įsitikinę, kad šios versijos sutampa, sąranka apsaugo nuo nesutampančių versijų „ChromeDriver“ inicijavimo gedimo, dėl kurio dažnai suaktyvinama „DevTools“ klaida. Jei „ChromeDriver“ nepavyksta atsisiųsti konkrečios versijos, scenarijuje yra atsarginė parinktis atsisiųsti naujausią leidimą, išlaikant lankstumą. Šie veiksmai yra ypač naudingi automatizuotuose CI / CD vamzdynuose, kur greiti ir patikimi sprendimai yra prioritetas 🔧.

Atsisiuntus scenarijus iš sistemos ištrina visas anksčiau įdiegtas „ChromeDriver“, naudodamas „sudo rm -f“, kad būtų išvengta konfliktų su senesnėmis tvarkyklėmis. Taip užtikrinama, kad būtų įdiegta tik tinkama versija, o tai sumažina versijų konfliktų, galinčių sutrikdyti testo stabilumą, riziką. „ChromeDriver“ leidimai taip pat nustatyti kaip vykdomieji, o tai yra būtinas veiksmas norint paleisti tvarkyklę CI / CD aplinkoje. Naudojant „Chrome“ režimą „be galvos“ su tokiomis parinktimis kaip „--no-sandbox“ ir „--disable-dev-shm-usage“, taip pat sumažėja „Chrome“ išteklių pėdsakas. Šios parinktys leidžia atlikti bandymus aplinkose su ribotais ištekliais (pvz., debesies serveriuose ar CI vamzdynuose), nesukeliant „Chrome“ strigimo, o tai yra viena iš dažniausiai pasitaikančių „DevToolsActivePort“ klaidos priežasčių.

Galiausiai, „WebDriver“ sąrankoje tokios parinktys kaip „--disable-gpu“ ir „--remote-debugging-port=9222“ užtikrina stabilesnį „Chrome“ veikimą be galvos režimu. Žyma „--disable-gpu“ išjungia GPU atvaizdavimą, kuris yra nereikalingas ir kartais problematiškas veikiant be galvos režimu. Tuo tarpu „--remote-debugging-port“ parinktis leidžia „Chrome“ atidaryti derinimo prievadą, būtiną „Selenium“ prisijungti prie jo per CI. Apibendrinant galima pasakyti, kad ši sąranka apsaugo nuo įprastų automatizavimo kliūčių, suteikdama patikimesnę ir patikimesnę testavimo aplinką. Dėl šių scenarijų „Chrome“ paleidimas be galvų CI / CD sistemose yra daug sklandesnis, todėl automatiniai bandymai atliekami nuosekliai ir be trikdžių 🚀.

Klaida „DevToolsActivePort failas neegzistuoja“ atliekant seleno testus „GitHub Actions“

1 sprendimas: „Chrome“ ir „ChromeDriver“ diegimo ir konfigūracijos scenarijus

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“ nustatymas su „Java“, skirtas „GitHub“ veiksmams be galvos režimu

2 sprendimas: „Chrome“ parinkčių konfigūravimas ir „WebDriver“ inicijavimas „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();

Pridedami vienetų testai, siekiant patikrinti „Chrome“ ir „WebDriver“ suderinamumą

3 sprendimas: vieneto testai, siekiant užtikrinti suderinamumą ir išvengti klaidų vykdant 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();
  }
}

Seleno testų optimizavimas naudojant „GitHub“ veiksmus ir „Chrome“ be galvos

Vienas svarbus bėgimo aspektas su Selenu CI / CD vamzdynuose, pvz., GitHub Actions, supranta aplinkos apribojimus. „Chrome“ paleidimas be galvos režimu reiškia, kad jis veikia be grafinės sąsajos, todėl puikiai tinka CI aplinkoje. Tačiau „Chrome“ be galvos gali būti jautresnė sistemos konfigūracijoms ir reikalauja papildomos sąrankos, palyginti su vietine aplinka. Klaida „DevToolsActivePort failas neegzistuoja“ dažniausiai siejama su „Chrome“ inicijavimo klaida, dažnai dėl atminties apribojimų arba konfigūracijos neatitikimų. Diegiant atmintį taupančias konfigūracijas, pvz ir padeda išspręsti šias problemas ir gali žymiai stabilizuoti bandymus ribotos atminties CI / CD aplinkoje.

Siekiant užtikrinti suderinamumą, būtina suderinti „Chrome“ ir „ChromeDriver“ versijas. Nenuoseklios versijos yra dažnas „GitHub Actions“ klaidų šaltinis, nes pagal numatytuosius nustatymus gali būti naudojama naujausia versija, kuri gali neatitikti „ChromeDriver“ reikalavimų. Kad tai išspręstume, mūsų sprendimas apima pagrindinės „Chrome“ versijos analizę, kad būtų galima gauti tikslią atitinkamą „ChromeDriver“ versiją, taip pagerinant stabilumą. Be to, nustatymas leidžia „ChromeDriver“ patikimiau sąveikauti su naršykle, įjungiant ryšio prievadą. Ši sąranka yra būtina, kai naudojate „GitHub Actions“ ar panašius įrankius automatiniam paleidimui virtualioje mašinoje.

Šios konfigūracijos labai pagerina efektyvumą, sumažina klaidų skaičių ir padidina bandomųjų paleidimų patikimumą. Užtikrinant efektyviai išteklius naudojančias parinktis ir naudojant tinkamas versijas, daug didesnė tikimybė, kad „Chrome“ paleidimai be galvos bus sėkmingi, todėl kūrėjai neteks susidurti su varginančiomis klaidomis atliekant bandymą. Galiausiai dėl tvirtos konfigūracijos ir suderinamos priklausomybės CI / CD testavimas tampa sklandesnis, todėl kūrėjai gali sutelkti dėmesį į programų kūrimą ir tobulinimą, netrikdant nuolatinių sąrankos problemų 🚀.

  1. Ką reiškia klaida „DevToolsActivePort failas neegzistuoja“?
  2. Ši klaida atsiranda, kai „Chrome“ nepavyksta tinkamai paleisti be galvos režimu, paprastai dėl sąrankos neatitikimo arba sistemos išteklių trūkumo. Atminties parinkčių reguliavimas, pvz dažnai tai išsprendžia.
  3. Kodėl svarbu suderinti „Chrome“ ir „ChromeDriver“ versijas?
  4. Suderinus versijas išvengiama suderinamumo klaidų. Naudojant ir gavus konkretų „ChromeDriver“ užtikrinamas sklandus jų veikimas.
  5. Kaip veikia padėti atliekant testavimą be galvos?
  6. Tai leidžia „Chrome“ tvarkyklei valdyti „Chrome“ prievadą, leidžiantį testams veiksmingiau prisijungti prie naršyklės egzemplioriaus ir užkirsti kelią „DevTools“ klaidoms.
  7. Ką daro daryti?
  8. Tai išjungia „Chrome“ smėlio dėžės funkciją, kuri padeda „Chrome“ paleisti CI aplinkoje, nes „smėlio dėžė“ kartais gali sukelti „Chrome“ be galvos strigtį ribotoje aplinkoje.
  9. Ar yra atsarginių priemonių, jei nepavyksta atsisiųsti „ChromeDriver“ versijos?
  10. Taip, mūsų scenarijuje yra atsarginis variantas, kuris naudoja jei atitinkama versija nepavyksta, užtikrinkite, kad „ChromeDriver“ būtų pasiekiama nepaisant įdiegtos „Chrome“ versijos.
  11. Kaip išvengti su „Chrome“ atminties susijusių problemų CI / CD vamzdynuose?
  12. Naudojant peradresuoja bendrinamą atmintį ir neleidžia „Chrome“ strigti dėl ribotos /dev/shm vietos CI aplinkoje.
  13. Ar galiu derinti „Chrome“ be galvos režimu?
  14. Taip, naudojant ir paleidę testą vietoje, galite atidaryti „Chrome DevTools“, kad būtų galima derinti be galvos režimu.
  15. Ar „WebDriverManager“ automatiškai apdoroja „ChromeDriver“ naujinius?
  16. „WebDriverManager“ supaprastina tvarkyklių naujinimus vietoje, tačiau CI / CD konvejeriuose konkrečių versijų nustatymas, kaip parodyta, yra patikimesnis kartotiniams kūrimams.
  17. Koks tikslas scenarijuje?
  18. Ši komanda išlaisvina išteklius uždarydama „Chrome“ ir „WebDriver“ seansą, taip užkertant kelią atminties nutekėjimui CI / CD aplinkoje.
  19. Kaip prieš įsipareigodamas išbandyti seleno sąranką „GitHub Actions“?
  20. Bandymai atliekami vietoje su parinktys ir CI konfigūracijos gali susidurti su problemomis prieš siunčiant į „GitHub“, todėl derinimas tampa lengvesnis.
  21. Kokių leidimų man reikia „ChromeDriver“ in CI?
  22. „ChromeDriver“ reikalauja vykdyti leidimų, nustatytų pagal , kad sėkmingai atliktumėte bandymus naudodami „GitHub Actions“.

Tinkamos seleno bandymų sąrankos užtikrinimas naudojant „Chrome“ be galvos, naudojant „GitHub Actions“, taupo laiką ir padidina patikimumą. Pašalinus tokias klaidas kaip „DevToolsActivePort failas neegzistuoja“, CI / CD testavimas gali būti sklandesnis ir mažiau varginantis kūrėjams.

Lygiuojant ir „Chrome“ versijose bei konfigūruojant atmintį tausojančias parinktis, šis metodas padeda efektyviai vykdyti bandymus ribotoje aplinkoje. Tai praktiškas sprendimas, leidžiantis kūrėjams sutelkti dėmesį į savo pagrindines užduotis, nesijaudinant dėl ​​bandymų trikdžių 🚀.

  1. Išsamus trikčių šalinimo vadovas, kaip tvarkyti „DevToolsActivePort“ problemas „Chrome“, skirtoje CI / CD aplinkoje. Seleno žiniatinklio tvarkyklės dokumentacija
  2. Išsamios „Chrome“ ir „ChromeDriver“ versijų diegimo ir konfigūravimo instrukcijos nuolatinio integravimo sąrankose, kurias teikia „GitHub“ veiksmų dokumentacija
  3. Žingsnis po žingsnio „ChromeDriver“ sąrankos, suderinamumo ir konfigūravimo parinkčių sprendimas WebDriverManager dokumentacija
  4. Nuoroda į geriausios praktikos pavyzdžius, kaip konfigūruoti „Chrome“ be galvučių, kad būtų efektyviau naudojama CI / CD, ypač ribotoje aplinkoje. Daugiau skaitykite adresu „Google Chrome“ kūrėjo vadovas