fix(e2e): switch Electrobun to ChromeDriver + debuggerAddress attach

- devtools protocol kills Electrobun's CEF browser on attach (navigates)
- ChromeDriver with debuggerAddress connects WITHOUT navigating
- Added Vite dev server auto-start (Electrobun dev mode requires it)
- Fixed this.skip() → test.pending for cross-protocol compat
- chromedriver@145 matches CEF Chrome 145
This commit is contained in:
Hibryda 2026-03-22 07:19:57 +01:00
parent 954d202c04
commit 75bb96cfed
4 changed files with 547 additions and 10 deletions

View file

@ -39,6 +39,8 @@ process.env.AGOR_CEF = '1';
process.env.AGOR_TEST_DATA_DIR = fixture.dataDir;
process.env.AGOR_TEST_CONFIG_DIR = fixture.configDir;
let viteProcess;
console.log(`[electrobun-cdp] Test fixture at ${fixture.rootDir ?? fixture.configDir}`);
let appProcess;
@ -46,17 +48,20 @@ let appProcess;
export const config = {
...sharedConfig,
// Use devtools protocol (CDP) instead of WebDriver
automationProtocol: 'devtools',
// Use ChromeDriver to attach to existing CEF via debuggerAddress
// ChromeDriver connects to the existing CDP port WITHOUT navigating/destroying the page
automationProtocol: 'webdriver',
services: [['chromedriver', { args: ['--verbose'] }]],
capabilities: [{
browserName: 'chromium',
browserName: 'chrome',
'goog:chromeOptions': {
debuggerAddress: `localhost:${CDP_PORT}`,
},
}],
onPrepare() {
async onPrepare() {
// Find existing binary or build
const candidates = [
resolve(electrobunRoot, 'build/dev-linux-x64/AgentOrchestrator-dev/AgentOrchestrator-dev'),
@ -80,8 +85,29 @@ export const config = {
// Kill any stale process on CDP port before launching
try { execSync(`fuser -k ${CDP_PORT}/tcp 2>/dev/null || true`); } catch {}
// Fall back to `electrobun dev` which builds + launches in one step
console.log('[electrobun-cdp] No binary found, launching via electrobun dev...');
// Start Vite dev server first (Electrobun dev mode loads JS from it)
console.log('[electrobun-cdp] Starting Vite dev server on port 9760...');
viteProcess = spawn('npx', ['vite', 'dev', '--port', '9760', '--host', 'localhost'], {
cwd: electrobunRoot,
env: { ...process.env },
stdio: 'pipe',
});
viteProcess.stdout?.on('data', (d) => {
const msg = d.toString();
if (msg.includes('ready') || msg.includes('Local:')) console.log(`[vite] ${msg.trim()}`);
});
viteProcess.stderr?.on('data', (d) => process.stderr.write(`[vite] ${d}`));
// Wait for Vite to be ready
const viteStart = Date.now();
while (Date.now() - viteStart < 15000) {
try { const r = await fetch('http://localhost:9760/'); if (r.ok) break; } catch {}
await new Promise(r => setTimeout(r, 500));
}
console.log('[electrobun-cdp] Vite dev server ready.');
// Launch Electrobun with CEF
console.log('[electrobun-cdp] Launching via electrobun dev...');
appProcess = spawn('npx', ['electrobun', 'dev'], {
cwd: electrobunRoot,
env: {
@ -137,6 +163,11 @@ export const config = {
appProcess.kill('SIGTERM');
appProcess = undefined;
}
if (viteProcess) {
console.log('[electrobun-cdp] Stopping Vite dev server...');
viteProcess.kill('SIGTERM');
viteProcess = undefined;
}
const cleanup = fixture.cleanup ?? (() => {
try {