Odpravljanje neuspešnih preizkusov Chroma v cevovodih CI/CD
Izvajanje testov Selenium v na mora biti brezhibno. Kljub temu se mnogi razvijalci soočajo z frustrirajočo napako »Datoteka DevToolsActivePort ne obstaja«. To se zgodi, ko se Chrome iz enega ali drugega razloga ne zažene pravilno v okolju CI.
Sporočilo o napaki običajno sporoča, da se Chrome nepričakovano zruši, kar je pogosto posledica neusklajenega in različice ali napačno konfigurirane možnosti v preskusni nastavitvi. Tako kot mnogi razvijalci sem se tudi sam srečal s tem izzivom, zlasti pri uvajanju avtomatiziranih testov v okolju.
Pri tej nastavitvi lahko že najmanjša neusklajenost, kot je neujemanje različice gonilnika ChromeDriver, zaustavi izvajanje testa, kar stane dragocen čas in vire. Na srečo je z razumevanjem temeljnih težav reševanje veliko lažje 🛠️.
V tem priročniku se bomo poglobili v praktične korake za preprečevanje in odpravljanje te pogoste napake. Od posebnosti namestitve Chroma do pravilne inicializacije gonilnika boste našli postopek po korakih, ki bo vsakič zagotovil nemoteno testiranje. Lotimo se te težave in vrnimo vaše teste na pravo pot!
Ukaz | Primer uporabe |
---|---|
CHROME_VERSION="117.0.5938.62" | Nastavi določeno različico Chroma, ki je bistvenega pomena za zagotavljanje združljivosti gonilnika ChromeDriver med preskusi CI, da se preprečijo neujemanja med Chromom in gonilnikom ChromeDriver. |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | Izvleče glavno številko različice iz polne različice Chroma. To se uporablja za prenos ustrezne različice gonilnika ChromeDriver, kar zagotavlja združljivost. |
LATEST_DRIVER=$(wget -qO- ...) | Pridobi najnovejšo združljivo različico gonilnika ChromeDriver za določeno različico Chroma, kar je bistveno za izogibanje napakam »DevToolsActivePort« v skriptih za avtomatizacijo. |
if [ -z "$LATEST_DRIVER" ] | Preveri, ali je spremenljivka različice ChromeDriver prazna, kar bi pomenilo napako pri pridobivanju združljive različice. Ta pogoj pomaga pri uporabi nadomestne možnosti za preprečevanje neuspešnih testov. |
sudo dpkg -i $CHROME_DEB | Namesti preneseni paket Chrome s pomočjo dpkg, ki je še posebej uporaben v okoljih Linux, kot je GitHub Actions. |
sudo rm -f /usr/local/bin/chromedriver | Izbriše vse predhodno nameščene ChromeDriver. To zagotavlja, da med novo namestitvijo ne pride do konflikta različic. |
options.addArguments("--no-sandbox") | Onemogoči Chromovo funkcijo peskovnika. To je še posebej pomembno v okoljih CI, saj lahko peskovnik prepreči zagon Chroma v brezglavem načinu. |
options.addArguments("--disable-dev-shm-usage") | Poveča razpoložljivi skupni pomnilnik tako, da onemogoči uporabo /dev/shm, kar lahko prepreči zrušitve Chroma v okoljih z omejenim pomnilnikom, kot so vsebniki. |
options.addArguments("--remote-debugging-port=9222") | Omogoča oddaljeno odpravljanje napak na določenih vratih. To je pogoj za pravilno delovanje brezglavega Chroma v nekaterih okoljih, kar preprečuje napake »DevToolsActivePort«. |
driver.quit() | Zapre vsa okna Chroma in konča sejo WebDriver ter sprosti vire. To je bistvenega pomena pri cevovodih CI/CD, da preprečimo uhajanje virov in preprečimo, da bi zmanjkalo razpoložljivega pomnilnika. |
Podrobna rešitev za Chrome in namestitev ChromeDriver v CI
Zgornji skripti so zasnovani za namestitev in konfiguracijo Chroma in ChromeDriverja okolij, posebej obravnava napako »Datoteka DevToolsActivePort ne obstaja«. Ta težava se običajno pojavi, ko se Chrome, ki deluje v brezglavem načinu, ne more pravilno zagnati zaradi neujemanja ali pomnilniških omejitev. Prvi skript se tega loti tako, da določi različico Chroma in zagotovi njegovo združljivost z gonilnikom ChromeDriver, ki je ključnega pomena za izvajanje testi. Začetni ukazi izvedejo posodobitev paketov apt in uporabijo wget za pridobitev določene različice Google Chroma iz ogledala. Uporaba zrcala zagotavlja, da je nameščena prava različica, še posebej, če privzeto skladišče nima te različice. Ta pristop zagotavlja uporabo konsistentne različice Chroma v različnih preizkusih.
Nato skript nadaljuje z namestitvijo gonilnika ChromeDriver, ki je združljiv z različico, tako da izolira glavno različico iz Chroma (npr. »117« iz »117.0.5938.62«) z ukazom za njeno razčlenitev. To omogoča skriptu, da pridobi natančen gonilnik ChromeDriver, ki je potreben za določeno glavno različico, z uporabo vzorca URL-ja, zasnovanega za izdaje gonilnika ChromeDriver. Če poskrbite, da so te različice usklajene, nastavitev prepreči, da bi neujemajoče se različice povzročile napako inicializacije gonilnika ChromeDriver, ki pogosto sproži napako DevTools. Če ChromeDriverju ne uspe prenesti določene različice, skript vključuje nadomestno možnost za prenos najnovejše izdaje, s čimer ohranja prilagodljivost. Ti koraki so še posebej uporabni pri avtomatiziranih cevovodih CI/CD, kjer so hitre in zanesljive rešitve prednostna naloga 🔧.
Po prenosu skript izbriše vse predhodno nameščene ChromeDriver iz sistema z uporabo »sudo rm -f«, da se izogne konfliktom s starejšimi gonilniki. To zagotavlja, da je na mestu samo pravilna različica, kar zmanjšuje tveganja za navzkrižje različic, ki lahko motijo stabilnost preskusa. Dovoljenja za ChromeDriver so prav tako nastavljena tako, da so izvršljiva, kar je nujen korak za zagon gonilnika v okoljih CI/CD. Uporaba Chroma v "brezglavem" načinu z možnostmi, kot sta "--no-sandbox" in "--disable-dev-shm-usage", prav tako zmanjša odtis Chroma v virih. Te možnosti omogočajo izvajanje testov v okoljih z omejenimi viri (npr. strežniki v oblaku ali cevovodi CI), ne da bi povzročili zrušitev Chroma, kar je eden od pogostih vzrokov za napako DevToolsActivePort.
Nazadnje, v nastavitvi WebDriverja možnosti, kot sta »--disable-gpu« in »--remote-debugging-port=9222«, zagotavljajo stabilnejše delovanje Chroma v brezglavem načinu. Zastavica »--disable-gpu« onemogoči upodabljanje GPU, ki je v brezglavem načinu nepotrebno in včasih problematično. Medtem pa možnost »--remote-debugging-port« omogoča Chromu, da odpre vrata za odpravljanje napak, ki so bistvena za povezavo Seleniuma z njim v CI. Če povzamemo, ta nastavitev preprečuje pogosta ozka grla pri avtomatizaciji in omogoča bolj zanesljivo in robustno testno okolje. Posledično ti skripti naredijo brezglavo izvajanje Chroma v sistemih CI/CD veliko bolj gladko izkušnjo, kar zagotavlja dosledno izvajanje samodejnih testov brez kolcanja 🚀.
Razreševanje napake »Datoteka DevToolsActivePort ne obstaja« v testih Selenium na GitHub Actions
1. rešitev: Namestitveni in konfiguracijski skript za Chrome in 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
Nastavitev WebDriverja z Javo za dejanja GitHub v brezglavem načinu
2. rešitev: Konfiguriranje možnosti Chroma in inicializacija WebDriverja v Javi
// 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();
Dodajanje testov enote za preverjanje združljivosti Chroma in WebDriverja
Rešitev 3: Testi enote za zagotavljanje združljivosti in preprečevanje napak med izvajanjem 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();
}
}
Optimiziranje testov Selenium z GitHub Actions in Headless Chrome
En pomemben vidik teka s selenom v cevovodih CI/CD, kot je GitHub Actions, pomeni razumevanje okoljskih omejitev. Zagon Chroma v brezglavem načinu pomeni, da deluje brez grafičnega vmesnika, zaradi česar je popoln za okolja CI. Vendar pa je brezglavi Chrome lahko bolj občutljiv na sistemske konfiguracije in zahteva dodatno nastavitev v primerjavi z lokalnim okoljem. Napaka »Datoteka DevToolsActivePort ne obstaja« je običajno povezana z napako pri inicializaciji Chroma, pogosto zaradi omejitev pomnilnika ali neujemanja konfiguracije. Izvajanje pomnilniško učinkovitih konfiguracij, kot je in pomaga premagati te težave in lahko znatno stabilizira teste v okoljih CI/CD z omejenim pomnilnikom.
Za zagotovitev združljivosti je bistveno, da sta različici Chroma in ChromeDriver usklajeni. Nekonsistentne različice so pogost vir napak v GitHub Actions, saj lahko izvajalec privzame najnovejšo različico, ki morda ne ustreza zahtevam ChromeDriver. Da bi rešili to težavo, naša rešitev vključuje razčlenjevanje glavne različice Chroma za pridobitev natančne različice gonilnika ChromeDriver, ki ustreza, s čimer se izboljša stabilnost. Poleg tega nastavitev omogoča ChromeDriverju bolj zanesljivo interakcijo z brskalnikom z omogočanjem komunikacijskih vrat. Ta nastavitev je bistvena pri uporabi GitHub Actions ali podobnih orodij za samodejno izvajanje na virtualnem stroju.
Te konfiguracije naredijo veliko razliko v učinkovitosti, zmanjšajo napake in izboljšajo zanesljivost preskusnih voženj. Z zagotavljanjem možnosti, ki so učinkovite z viri, in uporabo pravilnih različic je veliko večja verjetnost, da se bodo brezglavi zagoni Chroma uspešno izvedli, s čimer bodo razvijalci prihranjeni pred frustrirajočimi napakami med testiranjem. Navsezadnje robustne konfiguracije in združljive odvisnosti naredijo izkušnjo testiranja CI/CD bolj gladko, kar razvijalcem omogoča, da se osredotočijo na ustvarjanje in izboljšanje svojih aplikacij brez motenj zaradi stalnih težav pri namestitvi 🚀.
- Kaj pomeni napaka »Datoteka DevToolsActivePort ne obstaja«?
- Do te napake pride, ko se Chrome ne zažene pravilno v brezglavem načinu, običajno zaradi neujemanja nastavitev ali pomanjkanja sistemskih virov. Prilagajanje možnosti pomnilnika, kot je pogosto reši.
- Zakaj je ujemanje različic Chroma in ChromeDriver pomembno?
- Ujemanje različic se izogne napakam združljivosti. Uporaba in pridobivanje določenega gonilnika ChromeDriver zagotavlja nemoteno skupno delovanje.
- Kako pomoč pri brezglavem testiranju?
- Omogoča, da vrata za Chrome nadzira ChromeDriver, kar omogoča, da se testi učinkoviteje povežejo s primerkom brskalnika in preprečujejo napake DevTools.
- Kaj počne narediti?
- To onemogoči Chromovo peskovnik, ki Chromu pomaga pri zagonu v okoljih CI, saj lahko peskovnik včasih povzroči, da se Chrome brez glave zruši v omejenih okoljih.
- Ali obstaja nadomestna možnost, če se različica ChromeDriver ne prenese?
- Da, naš skript vključuje nadomestno možnost, ki uporablja če ujemajoča se različica ne uspe, zagotovite, da je ChromeDriver na voljo ne glede na nameščeno različico Chroma.
- Kako se izognem težavam, povezanim s pomnilnikom Chrome v cevovodih CI/CD?
- Uporaba preusmeri skupni pomnilnik in prepreči zrušitve Chroma zaradi omejenega prostora /dev/shm v okoljih CI.
- Ali lahko odpravljam napake v Chromu v brezglavem načinu?
- Da, z uporabo lokalno izvajanje preizkusa pa vam omogoča, da odprete Chrome DevTools za odpravljanje napak v brezglavem načinu.
- Ali WebDriverManager samodejno obravnava posodobitve ChromeDriver?
- WebDriverManager lokalno poenostavi posodobitve gonilnikov, vendar je v cevovodih CI/CD nastavitev določenih različic, kot je prikazano, bolj zanesljiva za ponovljive gradnje.
- Kaj je namen v scenariju?
- Ta ukaz sprosti vire tako, da zapre Chrome in konča sejo WebDriver, s čimer prepreči uhajanje pomnilnika v okoljih CI/CD.
- Kako preizkusim svojo nastavitev Selenium na GitHub Actions, preden se zavežem?
- Lokalno izvajanje testov z možnosti in konfiguracije CI lahko odkrijejo težave, preden jih potisnejo na GitHub, kar olajša odpravljanje napak.
- Kakšna dovoljenja potrebujem za ChromeDriver v CI?
- ChromeDriver zahteva dovoljenja za izvajanje, ki jih nastavi , za uspešno izvajanje preizkusov v GitHub Actions.
Zagotavljanje pravilne nastavitve za teste Selenium z brezglavim Chromom na GitHub Actions prihrani čas in poveča zanesljivost. Odpravljanje napak, kot je »Datoteka DevToolsActivePort ne obstaja«, lahko naredi testiranje CI/CD bolj gladko in manj frustrirajoče za razvijalce.
Z poravnavo in različice Chroma ter konfiguracijo možnosti, ki učinkovito porabljajo pomnilnik, ta pristop pomaga pri učinkovitem izvajanju testov v omejenih okoljih. To je praktična rešitev, ki razvijalcem omogoča, da se osredotočijo na svoje osnovne naloge, ne da bi jih skrbelo motnje pri testiranju 🚀.
- Podroben vodnik za odpravljanje težav pri obravnavanju težav DevToolsActivePort v brezglavih okoljih Chrome za CI/CD. Dokumentacija Selenium WebDriver
- Izčrpna navodila za namestitev in konfiguracijo za različice Chroma in ChromeDriver v nastavitvah stalne integracije, ki jih zagotavlja Dokumentacija o dejanjih GitHub
- Rešitev po korakih za možnosti nastavitve, združljivosti in konfiguracije gonilnika ChromeDriver, ki so na voljo v Dokumentacija WebDriverManager
- Referenca najboljših praks za konfiguracijo brezglavega Chroma za učinkovitost pomnilnika v CI/CD, zlasti v omejenih okoljih. Preberite več na Priročnik za razvijalce za Google Chrome