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:
parent
954d202c04
commit
75bb96cfed
4 changed files with 547 additions and 10 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -74,8 +74,7 @@ export const sharedConfig = {
|
|||
if (db.shouldSkip(specFile, test.title)) {
|
||||
const stats = db.getCacheStats();
|
||||
console.log(`Skipping (3+ consecutive passes): ${test.title} [${stats.skippable}/${stats.total} skippable]`);
|
||||
// this.skip() works in Mocha non-arrow context — safe for both protocols
|
||||
this.skip();
|
||||
test.pending = true;
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue