Chrome'i testi tõrgete ületamine CI/CD torujuhtmetes
Seleenitestide läbiviimine sisse peaks olema sujuv. Siiski seisavad paljud arendajad silmitsi masendava veaga "DevToolsActivePort-faili pole olemas". See juhtub siis, kui Chrome ühel või teisel põhjusel ei käivitu CI-keskkonnas korralikult.
Veateade annab tavaliselt märku, et Chrome jookseb ootamatult kokku, mis on sageli mittevastavuse tagajärg ja versioonid või valesti konfigureeritud valikud testi seadistuses. Nagu paljud arendajad, olen ka mina selle väljakutsega kokku puutunud, eriti automatiseeritud testide juurutamisel a keskkond.
Selles seadistuses võivad väikseimgi kõrvalekalded, nagu ChromeDriveri versiooni mittevastavus, peatada testimise, mis läheb maksma väärtuslikku aega ja ressursse. Õnneks muudab põhiprobleemide mõistmine selle lahendamise palju lihtsamaks 🛠️.
Selles juhendis käsitleme praktilisi samme selle levinud vea vältimiseks ja tõrkeotsinguks. Alates Chrome'i installispetsiifikast kuni draiveri õige lähtestamiseni leiate samm-sammult protsessi, mis tagab iga kord sujuva testimise. Tegeleme selle probleemiga ja viige testid õigele teele!
Käsk | Kasutusnäide |
---|---|
CHROME_VERSION="117.0.5938.62" | Määrab konkreetse Chrome'i versiooni, mis on oluline ChromeDriveri ühilduvuse tagamiseks CI-testide ajal, et vältida Chrome'i ja ChromeDriveri mittevastavust. |
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) | Eraldab peamise versiooni numbri Chrome'i täisversioonist. Seda kasutatakse ChromeDriveri sobiva versiooni allalaadimiseks, tagades ühilduvuse. |
LATEST_DRIVER=$(wget -qO- ...) | Toob määratud Chrome'i versiooni jaoks uusima ühilduva ChromeDriveri versiooni, mis on oluline automatiseerimisskriptides „DevToolsActivePorti” vigade vältimiseks. |
if [ -z "$LATEST_DRIVER" ] | Kontrollib, kas ChromeDriveri versioonimuutuja on tühi, mis viitab veale ühilduva versiooni toomisel. See tingimus aitab rakendada varundamist, et vältida testi ebaõnnestumisi. |
sudo dpkg -i $CHROME_DEB | Installib allalaaditud Chrome'i paketi dpkg abil, mis on eriti kasulik Linuxi keskkondades, nagu GitHub Actions. |
sudo rm -f /usr/local/bin/chromedriver | Kustutab kõik varem installitud ChromeDriveri. See tagab, et uue installi ajal ei teki versioonikonflikte. |
options.addArguments("--no-sandbox") | Keelab Chrome'i liivakasti funktsiooni. See on eriti oluline CI-keskkondades, kuna liivakast võib takistada Chrome'i käivitumist peata režiimis. |
options.addArguments("--disable-dev-shm-usage") | Suurendab saadaolevat ühismälu, keelates funktsiooni /dev/shm kasutuse, mis võib takistada Chrome'i kokkujooksmisi piiratud mäluga keskkondades, näiteks konteinerites. |
options.addArguments("--remote-debugging-port=9222") | Lubab kaugsilumise määratud pordis. See on nõue, et peata Chrome töötaks mõnes keskkonnas õigesti, vältides DevToolsActivePorti vigu. |
driver.quit() | Sulgeb kõik Chrome'i aknad ja WebDriveri seansi, vabastades ressursse. See on CI/CD torujuhtmete puhul hädavajalik, et vältida ressursside lekkeid ja vaba mälu tühjenemist. |
Üksikasjalik lahendus Chrome'i ja ChromeDriveri seadistamiseks CI-s
Ülaltoodud skriptid on loodud nii Chrome'i kui ka ChromeDriveri installimiseks ja konfigureerimiseks keskkondades, käsitledes konkreetselt tõrke "DevToolsActivePort-faili ei eksisteeri". See probleem ilmneb tavaliselt siis, kui peata režiimis töötav Chrome ei saa mittevastavuse või mälupiirangute tõttu korralikult käivituda. Esimene skript lahendab selle, määrates Chrome'i versiooni ja tagades selle ühilduvuse ChromeDriveriga, mis on töötamise jaoks ülioluline testid. Esialgsed käsud värskendavad apt-pakette ja kasutavad peegelpildist Google Chrome'i konkreetse versiooni toomiseks wget-i. Peegli kasutamine tagab õige versiooni installimise, eriti kui vaikehoidlas see versioon puudub. See lähenemine tagab, et Chrome'i ühtset versiooni kasutatakse erinevatel katsetel.
Järgmisena installib skript versiooniga ühilduva ChromeDriveri, eraldades põhiversiooni Chrome'ist (nt "117" versioonist "117.0.5938.62"), kasutades selle sõelumiskäsku. See võimaldab skriptil tuua selle konkreetse põhiversiooni jaoks vajaliku ChromeDriveri, kasutades ChromeDriveri versioonide jaoks loodud URL-i mustrit. Veendudes, et need versioonid ühtivad, väldib seadistus mittevastavate versioonide põhjustamast ChromeDriveri initsialiseerimise tõrget, mis sageli käivitab DevToolsi vea. Kui ChromeDriveril ei õnnestu konkreetset versiooni alla laadida, sisaldab skript varuvalikut uusima versiooni allalaadimiseks, säilitades paindlikkuse. Need sammud on eriti kasulikud automatiseeritud CI/CD torujuhtmetes, kus kiired ja usaldusväärsed lahendused on esmatähtis 🔧.
Pärast allalaadimist kustutab skript süsteemist kõik varem installitud ChromeDriverid, kasutades käsku „sudo rm -f”, et vältida konflikte vanemate draiveritega. See tagab, et paigas on ainult õige versioon, minimeerides versioonikonfliktide riski, mis võivad testi stabiilsust häirida. ChromeDriveri load on samuti seatud käivitatavateks, mis on vajalik samm draiveri käivitamiseks CI/CD keskkondades. Chrome'i kasutamine "peata" režiimis koos suvanditega "--no-sandbox" ja "--disable-dev-shm-usage" vähendab ka Chrome'i ressursi jalajälge. Need valikud võimaldavad teste käitada piiratud ressurssidega keskkondades (nt pilveserverid või CI torujuhtmed), põhjustamata Chrome'i kokkujooksmist, mis on üks levinumaid DevToolsActivePorti vea põhjuseid.
Lõpuks tagavad WebDriveri seadistuses sellised valikud nagu „--disable-gpu” ja „--remote-debugging-port=9222”, et Chrome töötab peata režiimis stabiilsemalt. Lipp „--disable-gpu” keelab GPU renderdamise, mis on peata režiimis tarbetu ja mõnikord problemaatiline. Vahepeal võimaldab suvand „--remote-debugging-port” Chrome'il avada silumispordi, mis on Seleeniumi jaoks oluline sellega CI-s ühenduse loomiseks. Kokkuvõttes hoiab see seadistus ära tavalised automatiseerimise kitsaskohad, võimaldades usaldusväärsemat ja töökindlamat testimiskeskkonda. Selle tulemusel muudavad need skriptid ilma peata Chrome'i käitamise CI-/CD-süsteemides palju sujuvamaks, tagades automaattestide järjepideva ja ilma luksumisteta toimimise 🚀.
Vea "DevToolsActivePort-faili ei eksisteeri" lahendamine GitHubi toimingute Seleeni testides
Lahendus 1: installi- ja konfiguratsiooniskript Chrome'i ja ChromeDriveri jaoks
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
WebDriveri seadistamine Javaga GitHubi toimingute jaoks peata režiimis
Lahendus 2: Chrome'i valikute konfigureerimine ja WebDriveri lähtestamine Javas
// 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();
Seadmetestide lisamine Chrome'i ja WebDriveri ühilduvuse kontrollimiseks
Lahendus 3: üksuse testid, et tagada ühilduvus ja vältida vigu CI täitmise ajal
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();
}
}
Seleenitestide optimeerimine GitHubi toimingute ja peata Chrome'iga
Jooksmise üks oluline aspekt Seleeniga CI/CD torujuhtmetes, nagu GitHub Actions, mõistab keskkonnapiiranguid. Chrome'i käitamine peata režiimis tähendab, et see töötab ilma graafilise liideseta, mistõttu on see ideaalne CI-keskkondade jaoks. Peata Chrome võib aga olla süsteemikonfiguratsioonide suhtes tundlikum ja nõuab kohaliku keskkonnaga võrreldes täiendavat seadistamist. Viga "DevToolsActivePort-faili ei eksisteeri" on tavaliselt seotud Chrome'i initsialiseerimise tõrkega, mis on sageli tingitud mälupiirangutest või konfiguratsiooni mittevastavusest. Mälutõhusate konfiguratsioonide rakendamine nagu ja aitab neist probleemidest üle saada ja võib märkimisväärselt stabiliseerida katseid piiratud mäluga CI/CD keskkondades.
Ühilduvuse tagamiseks on oluline hoida nii Chrome'i kui ka ChromeDriveri versioonid joondatud. Ebajärjekindlad versioonid on GitHub Actionsi sagedane vigade allikas, kuna jooksja võib vaikimisi kasutada uusimat versiooni, mis ei pruugi vastata ChromeDriveri nõuetele. Selle probleemi lahendamiseks hõlmab meie lahendus Chrome'i peamise versiooni sõelumist, et hankida täpne ChromeDriveri versioon, mis parandab stabiilsust. Lisaks seadistamine võimaldab ChromeDriveril sidepordi lubamise kaudu brauseriga usaldusväärsemalt suhelda. See seadistus on oluline, kui kasutate GitHubi toiminguid või sarnaseid tööriistu automaatseks käitamiseks virtuaalses masinas.
Need konfiguratsioonid muudavad tõhususe oluliselt, vähendades vigu ja parandades katsekäikude usaldusväärsust. Ressursitõhusate valikute tagamisel ja õigete versioonide kasutamisel toimivad peata Chrome'i käitamised palju tõenäolisemalt edukalt, säästes arendajaid testimise ajal tekkivate pettumust tekitavate vigade eest. Lõppkokkuvõttes muudavad tugevad konfiguratsioonid ja ühilduvad sõltuvused CI/CD testimise kogemuse sujuvamaks, võimaldades arendajatel keskenduda oma rakenduste loomisele ja täiustamisele ilma püsivate seadistusprobleemideta 🚀.
- Mida tähendab tõrge "DevToolsActivePort-faili pole olemas"?
- See viga ilmneb siis, kui Chrome ei käivitu korralikult peata režiimis, tavaliselt seadistuse mittevastavuse või süsteemiressursside puudumise tõttu. Mälu valikute reguleerimine nagu sageli lahendab selle.
- Miks on Chrome'i ja ChromeDriveri versioonide sobitamine oluline?
- Versioonide sobitamine väldib ühilduvusvigu. Kasutades ja konkreetse ChromeDriveri toomine tagab nende sujuva koostöö.
- Kuidas teeb abi peata testimisel?
- See võimaldab ChromeDriveril juhtida Chrome'i porti, võimaldades testidel brauseri eksemplariga tõhusamalt ühendust luua ja vältida DevToolsi vigu.
- Mis teeb teha?
- See keelab Chrome'i liivakasti, mis aitab Chrome'il CI-keskkondades käivituda, kuna liivakasti kasutamine võib mõnikord põhjustada peata Chrome'i kokkujooksmist piiratud keskkondades.
- Kas ChromeDriveri versiooni allalaadimine ebaõnnestub?
- Jah, meie skript sisaldab varu, mis kasutab kui sobiv versioon ebaõnnestub, tagades ChromeDriveri kättesaadavuse sõltumata installitud Chrome'i versioonist.
- Kuidas vältida Chrome'i mäluga seotud probleeme CI/CD torujuhtmetes?
- Kasutades suunab ümber jagatud mälu, vältides Chrome'i kokkujooksmisi piiratud /dev/shm ruumi tõttu CI-keskkondades.
- Kas ma saan Chrome'i peata režiimis siluda?
- Jah, kasutades ja kohapeal testi käivitamine võimaldab teil avada peata režiimis silumiseks Chrome DevTools.
- Kas WebDriverManager töötleb ChromeDriveri värskendusi automaatselt?
- WebDriverManager lihtsustab draiverite värskendamist kohapeal, kuid CI/CD torujuhtmetes on konkreetsete versioonide seadistamine, nagu näidatud, korduvate ehituste puhul usaldusväärsem.
- Mis on eesmärk stsenaariumis?
- See käsk vabastab ressursid, sulgedes Chrome'i ja lõpetades WebDriveri seansi, vältides mälulekkeid CI/CD keskkondades.
- Kuidas testida oma Seleniumi seadistust GitHubi toimingutes enne kohustuse võtmist?
- Testide käivitamine kohapeal rakendusega suvandid ja CI konfiguratsioonid võivad enne GitHubile tõukamist probleeme tabada, muutes silumise lihtsamaks.
- Milliseid õigusi ma vajan ChromeDriveri jaoks CI-s?
- ChromeDriver nõuab täitmisõigusi, mille on määranud , et GitHub Actionsis teste edukalt käitada.
Seleeni testide õige seadistuse tagamine GitHub Actionsi peata Chrome'iga säästab aega ja suurendab töökindlust. Vigade (nt "DevToolsActivePort-faili ei eksisteeri") kõrvaldamine võib muuta CI/CD testimise sujuvamaks ja arendajatele vähem masendavaks.
Joondades ja Chrome'i versioonid ning mälutõhusate valikute konfigureerimine aitab see lähenemisviis piiratud keskkondades teste tõhusalt läbi viia. See on praktiline lahendus, mis võimaldab arendajatel keskenduda oma põhiülesannetele, muretsemata testimishäirete pärast 🚀.
- Üksikasjalik veaotsingu juhend DevToolsActivePorti probleemide lahendamiseks peata Chrome'i CI-/CD-le keskkondades. Seleeni veebidraiveri dokumentatsioon
- Põhjalikud installi- ja konfigureerimisjuhised Chrome'i ja ChromeDriveri versioonide jaoks pideva integratsiooni seadistustes, pakub GitHubi toimingute dokumentatsioon
- Samm-sammuline lahendus ChromeDriveri seadistamiseks, ühilduvuseks ja konfiguratsioonivalikuteks, mis on saadaval WebDriverManageri dokumentatsioon
- Viide heade tavade kohta peata Chrome'i konfigureerimiseks CI/CD mälu tõhustamiseks, eriti piiratud keskkondades. Loe lähemalt aadressilt Google Chrome'i arendaja juhend