டெஸ்ட்ரன்னருடன் ஹெட்லெஸ் & Xvfb
இந்தப் பக்கம் WebdriverIO டெஸ்ட்ரன்னர் லினக்ஸில் Xvfb (X Virtual Framebuffer) பயன்படுத்தி ஹெட்லெஸ் இயக்கத்திற்கு எவ்வாறு ஆதரவளிக்கிறது என்பதை விளக்குகிறது. இது Xvfb எப்போது பயனுள்ளதாக இருக்கும், எவ்வாறு அதனை உள்ளமைக்க வேண்டும், மற்றும் CI மற்றும் Docker இல் அது எவ்வாறு செயல்படுகிறது என்பதை உள்ளடக்கியுள்ளது.
Xvfb-ஐ எப்போது பயன்படுத்த வேண்டும் vs இயல்பான ஹெட்லெஸ்
- சாத்தியமான போது இயல்பான ஹெட்லெஸ் (எ.கா., Chrome
--headless=...) பயன்படுத்தவும், குறைந்தபட்ச ஓவர்ஹெட் உள்ளது. - Xvfb-ஐ இந்த நிலைகளில் பயன்படுத்தவும்:
- எலெக்ட்ரான் அல்லது ஒரு விண்டோ மேனேஜர் அல்லது டெஸ்க்டாப் சூழல் தேவைப்படும் பயன்பாடுகளை சோதிக்கும் போது
- நீங்கள் GLX அல்லது விண்டோ-மேனேஜர் சார்ந்த செயல்பாடுகளை நம்பியிருக்கும் போது
- உங்கள் கருவிகள் ஒரு காட்சி சேவையகத்தை (
DISPLAY) எதிர்பார்க்கும் போது - நீங்கள் குரோமியம் பிழைகளை சந்திக்கும் போது:
session not created: probably user data directory is already in use ...Chrome failed to start: exited abnormally. (DevToolsActivePort file doesn't exist)பயனர் தரவு அடைவு மோதல் பிழை தவறாக வழிநடத்தக்கூடும், ஏனெனில் இது பெரும்பாலும் உலாவி செயலிழப்பு மற்றும் உடனடி மறுதொடக்கத்தின் விளைவாக, முந்தைய நிகழ்வில் இருந்து அதே சுயவிவர அடைவை மீண்டும் பயன்படுத்துவதாகும். ஒரு நிலையான காட்சியை உறுதிப்படுத்துவது (எ.கா., Xvfb மூலம்) பெரும்பாலும் இதைத் தீர்க்கிறது - இல்லையெனில், ஒவ்வொரு தொழிலாளிக்கும் தனிப்பட்ட--user-data-dirகொடுக்க வேண்டும்.
உள்ளமைவு
நான்கு ரன்னர் விருப்பங்கள் Xvfb நடத்தையை கட்டுப்படுத்துகின்றன:
-
autoXvfb(boolean, இயல்புநிலை: true)- பயன்பாட்டிற்கான அதிகாரபூர்வ டாகிள்.
falseஎனில், ரன்னர் ஒருபோதும் Xvfb ஐப் பயன்படுத்தாது. trueஎனில், தேவைப்படும்போது ரன்னர் Xvfb ஐப் பயன்படுத்தலாம்.
- பயன்பாட்டிற்கான அதிகாரபூர்வ டாகிள்.
-
xvfbAutoInstall(boolean, இயல்புநிலை: false)xvfb-runகாணவில்லை எனில் தானியங்கி நிறுவலை இயக்கவும்- false எனில், ரன்னர் எச்சரித்து நிறுவாமல் தொடரும்
-
xvfbAutoInstallMode('root' | 'sudo', இயல்புநிலை: 'sudo')- 'root': ரூட்டாக இயங்கும் போது மட்டுமே நிறுவவும் (sudo இல்லாமல்)
- 'sudo': ரூட் இல்லாவிட்டால் ஊடாட்டமற்ற sudo (
sudo -n) அனுமதிக்கவும்; sudo இல்லை எனில் தவிர்க்கவும்
-
xvfbAutoInstallCommand(string | string[], விருப்பத்தேர்வு)- உள்ளமைக்கப்பட்ட தொகுப்பு மேலாளர் கண்டறிதலுக்குப் பதிலாக நிறுவலுக்குப் பயன்படுத்த தனிப்பயன் கட்டளை
- வழங்கப்பட்டால், இந்த கட்டளை அப்படியே செயல்படுத்தப்படுகிறது மற்றும் உள்ளமைக்கப்பட்ட நிறுவல் தர்க்கத்தை மீறுகிறது
-
xvfbMaxRetries(number, இயல்புநிலை: 3)- xvfb செயல்முறை தோல்விகளுக்கான மறுமுயற்சி முயற்சிகளின் எண்ணிக்கை.
- Xvfb தொடக்கம் அவ்வப்போது தோல்வியடையக்கூடிய நிலையற்ற CI சூழல்களுக்கு பயனுள்ளதாக இருக்கும்.
-
xvfbRetryDelay(number, இயல்புநிலை: 1000)- xvfb செயல்முறை தோல்விகளுக்கான மறுமுயற்சிகளுக்கு இடையேயான அடிப்படை தாமதம் மில்லிவினாடிகளில்.
- முற்போக்கு தாமதத்தைப் பயன்படுத்துகிறது: தாமதம் × முயற்சி எண் (எ.கா., 1000ms, 2000ms, 3000ms, போன்றவை).
எடுத்துக்காட்டுகள்:
export const config: WebdriverIO.Config = {
// தேவைப்படும்போது Xvfb ஐப் பயன்படுத்துக
autoXvfb: true,
// sudo பயன்படுத்தி Xvfb தொகுப்புகளை தானாக நிறுவுக
xvfbAutoInstall: true,
xvfbAutoInstallMode: 'sudo',
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': { args: ['--headless=new', '--no-sandbox'] }
}]
}
export const config: WebdriverIO.Config = {
// தேவைப்படும்போது Xvfb ஐப் பயன்படுத்துக
autoXvfb: true,
// தனிப்பயன் கட்டளை மற்றும் sudo பயன்படுத்தி Xvfb தொகுப்புகளை தானாக நிறுவுக
xvfbAutoInstall: true,
xvfbAutoInstallMode: 'sudo',
xvfbAutoInstallCommand: 'curl -L https://github.com/X11/xvfb/releases/download/v1.20.14/xvfb-linux-x64.tar.gz | tar -xz -C /usr/local/bin/',
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': { args: ['--headless=new', '--no-sandbox'] }
}]
}
export const config: WebdriverIO.Config = {
// தேவைப்படும்போது Xvfb ஐப் பயன்படுத்துக
autoXvfb: true,
// sudo பயன்படுத்தி Xvfb தொகுப்புகளை தானாக நிறுவுக
xvfbAutoInstall: true,
xvfbAutoInstallMode: 'sudo',
// நிலையற்ற CI ச ூழல்களுக்கான மறுமுயற்சி நடத்தையை உள்ளமைக்கவும்
xvfbMaxRetries: 5,
xvfbRetryDelay: 1500,
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': { args: ['--headless=new', '--no-sandbox'] }
}]
}
கண்டறிதல் தர்க்கம்
-
ரன்னர் Xvfb ஐ கருத்தில் கொள்ளும் போது:
- லினக்ஸில் இயங்குகிறது
DISPLAYஅமைக்கப்படவில்லை (ஹெட்லெஸ் சூழல்), அல்லது ஹெட்லெஸ் உலாவி கொடிகள் அனுப் பப்படுகின்றன
-
DISPLAYஅமைக்கப்பட்டிருந்தால், ரன்னர் இயல்பாக Xvfb ஐ கட்டாயப்படுத்தாது மற்றும் உங்கள் தற்போதைய X சேவையகம்/விண்டோ மேலாளரை மதிக்கும்.
குறிப்புகள்:
autoXvfb: falseXvfb பயன்பாட்டை முற்றிலும் முடக்குகிறது (xvfb-runமூலம் சுற்றுதல் இல்லை).xvfbAutoInstallxvfb-runகாணவில்லை எனில் நிறுவலை மட்டுமே பாதிக்கிறது; இது பயன்பாட்டை ஆன்/ஆஃப் செய்யாது.xvfbAutoInstallModeநிறுவல் முறையை கட்டுப்படுத்துகிறது: 'root' என்பது ரூட் மட்டும் நிறுவல்களுக்கு, 'sudo' என்பது sudo அடிப்படையிலான நிறுவல்களுக்கு (இயல்புநிலை: 'sudo').- உள்ளமைக்கப்பட்ட தொகுப்பு நிறுவல்கள் எப்போதும் ஊடாட்டமற்றவை. நீங்கள் 'sudo' முறையில் விருப்பத்தேர்வு செய்யாவிட்டால் ரூட் மட்டுமே.
- மறுமுயற்சி பொறிமுறை முற்போக்கு தாமதங்களைப் பயன்படுத்துகிறது:
xvfbRetryDelay × முயற்ச ி எண்(எ.கா., 1000ms, 2000ms, 3000ms, போன்றவை).
CI இல் இருக்கும் DISPLAY ஐப் பயன்படுத்துதல்
உங்கள் CI அதன் சொந்த X சேவையகம்/விண்டோ மேலாளரை அமைத்தால் (எ.கா., Xvfb :99 மற்றும் WM மூலம்), ஒன்று:
autoXvfb: trueவிட்டுவிட்டுDISPLAYஏற்றுமதி செய்யப்பட்டுள்ளதை உறுதிப்படுத்தவும்; ரன்னர் அதை மதித்து சுற்றுவதைத் தவிர்க்கும்.- அல்லது
autoXvfb: falseஅமைக்கவும், ரன்னரில் இருந்து எந்த Xvfb நடத்தையையும் வெளிப்படையாக முடக்க.
CI மற்றும் Docker ரெசிப்பிகள்
GitHub Actions (இயல்பான ஹெட்லெஸ் பயன்படுத்தி):
- name: Run tests
run: npx wdio run ./wdio.conf.ts
GitHub Actions (Xvfb காணவில்லை எனில் மெய்நிகர் காட்சி மற்றும் விருப்பத்தேர்வு செய்யப்பட்டால்):
// wdio.conf.ts
export const config = {
autoXvfb: true,
xvfbAutoInstall: true
}
Docker (Ubuntu/Debian எடுத்துக்காட்டு – முன்கூட்டியே xvfb நிறுவுக):
RUN apt-get update -qq && apt-get install -y xvfb
மற்ற விநியோகங்களுக்கு, தொகுப ்பு மேலாளர் மற்றும் தொகுப்பு பெயரை அதற்கேற்ப சரிசெய்யவும் (எ.கா., dnf install xorg-x11-server-Xvfb Fedora/RHEL-அடிப்படையிலானவற்றில், zypper install xvfb-run openSUSE/SLE இல்).
தானியங்கி நிறுவல் ஆதரவு (xvfbAutoInstall)
xvfbAutoInstall இயக்கப்படும்போது, WebdriverIO உங்கள் கணினி தொகுப்பு மேலாளரைப் பயன்படுத்தி xvfb ஐ நிறுவ முயற்சிக்கும். பின்வரும் மேலாளர்கள் மற்றும் தொகுப்புகள் ஆதரிக்கப்படுகின்றன:
| தொகுப்பு மேலாளர் | கட்டளை | விநியோகங்கள் (எடுத்துக்காட்டுகள்) | தொகுப்பு பெயர்(கள்) |
|---|---|---|---|
| apt | apt-get | Ubuntu, Debian, Pop!_OS, Mint, Elementary, Zorin, போன்றவை | xvfb |
| dnf | dnf | Fedora, Rocky Linux, AlmaLinux, Nobara, Bazzite, போன்றவை | xorg-x11-server-Xvfb |
| yum | yum | CentOS, RHEL (பழைய) | xorg-x11-server-Xvfb |
| zypper | zypper | openSUSE, SUSE Linux Enterprise | xvfb-run |
| pacman | pacman | Arch Linux, Manjaro, EndeavourOS, CachyOS, போன்றவை | xorg-server-xvfb |
| apk | apk | Alpine Linux, PostmarketOS | xvfb-run |
| xbps-install | xbps-install | Void Linux | xvfb |
குறிப்புகள்:
- உங்கள் சூழல் வேறு தொகுப்பு மேலாளரைப் பயன்படுத்தினால், நிறுவல் ஒரு பிழையுடன் தோல்வியடையும்;
xvfbஐ கைமுறையாக நிறுவவும். - தொகுப்பு பெயர்கள் விநியோக-குறிப்பிட்டவை; அட்டவணை ஒவ்வொரு குடும்பத்திற்கும் பொதுவான பெயர்களைக் காட்டுகிறது.
பிழை நிவர்த்தி
-
"xvfb-run failed to start"
- ரன்னர் தானாகவே Xvfb தொடர்பான தோல்விகளை முற்போக்கு பின்வாங்கலுடன் மீண்டும் முயற்சிக்கிறது. தோல்விகள் தொடர்ந்தால், நிலையற்ற சூழல்களுக்காக
xvfbMaxRetriesமற்றும்xvfbRetryDelayஐ அதிகரிக்கவும்.
- ரன்னர் தானாகவே Xvfb தொடர்பான தோல்விகளை முற்போக்கு பின்வாங்கலுடன் மீண்டும் முயற்சிக்கிறது. தோல்விகள் தொடர்ந்தால், நிலையற்ற சூழல்களுக்காக
-
CI இல் எதிர்பாராத விதமாக Xvfb சுற்றப்பட்டது
- உங்களிடம் தனிப்பயன்
DISPLAY/ WM அமைப்பு இருந்தால்,autoXvfb: falseஅமைக்கவும் அல்லது ரன்னர் தொடங்குவதற்கு முன்DISPLAYஏற்றுமதி செய்யப்படுவதை உறுதிசெய்யவும்.
- உங்களிடம் தனிப்பயன்
-
xvfb-runகாணவில்லை- சூழலை மாற்றுவதைத் தவிர்க்க
xvfbAutoInstall: falseவைத்திருக்கவும்; உங்கள் அடிப்படை படத்தின் மூலம் நிறுவவும் அல்லது விருப்பத்தேர்வு செய்யxvfbAutoInstall: trueஅமைக்கவும்.
- சூழலை மாற்றுவதைத் தவிர்க்க
-
CI இல் அடிக்கடி Xvfb தொடக்க தோல்விகள்
- நிலையற்ற சூழல்களில் அதிக நெகிழ்வான நடத்தைக்கு
xvfbMaxRetries(எ.கா., 5-10 வரை) மற்றும்xvfbRetryDelay(எ.கா., 2000ms வரை) அதிகரிக்கவும்.
- நிலையற்ற சூழல்களில் அதிக நெகிழ்வான நடத்தைக்கு
மேம்பட் டது
- ரன்னர் ஒரு தொழிற்சாலை மூலம் செயல்முறைகளை உருவாக்குகிறது, இது Xvfb தேவைப்பட்டால் மற்றும் கிடைக்கும் போது
xvfb-runமூலம் நோட் தொழிலாளியை சுற்றுகிறது. - ஹெட்லெஸ் உலாவி கொடிகள் (Chrome/Edge/Firefox) ஹெட்லெஸ் பயன்பாட்டைக் குறிக்கின்றன மற்றும்
DISPLAYஇல்லாத சூழல்களில் Xvfb ஐத் தூண்டலாம்.