From d953c521cfccbbaf598c14b3ef6a54f8438d28f6 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:37:59 +0200 Subject: [PATCH 1/8] full cleanup --- tests/run-browser.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 52cf1235..d959df54 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -104,7 +104,7 @@ async function testEnd2End(params) { } catch(e) { throw e; } finally { - driver.quit(); + await driver.quit(); } } From 403147a08302b958422bdba775f2d32385ccdcdc Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:42:29 +0200 Subject: [PATCH 2/8] re-add logging again --- tests/run-browser.mjs | 45 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index d959df54..6f53f802 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -1,8 +1,12 @@ #! /usr/bin/env node /* eslint-disable-next-line no-unused-vars */ import serve from "./server.mjs"; -import { Builder, Capabilities } from "selenium-webdriver"; +import { Builder, Capabilities, logging } from "selenium-webdriver"; import commandLineArgs from "command-line-args"; +import { promises as fs } from "fs"; +import path from "path"; +import os from "os"; +import { glob } from "glob"; import {logInfo, logError, printHelp, runTest} from "./helper.mjs"; @@ -26,6 +30,7 @@ let capabilities; switch (BROWSER) { case "safari": capabilities = Capabilities.safari(); + capabilities.set("safari:diagnose", true); break; case "firefox": { @@ -54,9 +59,11 @@ process.once("uncaughtException", (err) => { process.exit(1); }); + const PORT = options.port; const server = await serve(PORT); + async function runTests() { let success = true; try { @@ -78,6 +85,7 @@ async function runEnd2EndTest(name, params) { async function testEnd2End(params) { const driver = await new Builder().withCapabilities(capabilities).build(); + const sessionId = (await driver.getSession()).getId(); const driverCapabilities = await driver.getCapabilities(); logInfo(`Browser: ${driverCapabilities.getBrowserName()} ${driverCapabilities.getBrowserVersion()}`); const urlParams = Object.assign({ @@ -85,6 +93,7 @@ async function testEnd2End(params) { iterationCount: 3 }, params); let results; + let success = false; try { const url = new URL(`http://localhost:${PORT}/index.html`); url.search = new URLSearchParams(urlParams).toString(); @@ -100,11 +109,13 @@ async function testEnd2End(params) { callback(); }); results = await benchmarkResults(driver); + success = true; // FIXME: validate results; - } catch(e) { - throw e; } finally { await driver.quit(); + if (!success) { + await printLogs(sessionId); + } } } @@ -115,7 +126,6 @@ async function benchmarkResults(driver) { globalThis.JetStream.start(); callback(); }); - await new Promise((resolve, reject) => pollResultsUntilDone(driver, resolve, reject)); const resultsJSON = await driver.executeScript(() => { return globalThis.JetStream.resultsJSON(); @@ -128,7 +138,6 @@ class JetStreamTestError extends Error { super(`Tests failed: ${errors.map(e => e.stack).join(", ")}`); this.errors = errors; } - } const UPDATE_INTERVAL = 250; @@ -163,4 +172,30 @@ function logIncrementalResult(previousResults, benchmarkResults) { } } + +function printLogs(sessionId) { + if (BROWSER === "safari" && sessionId) + return printSafariLogs(sessionId); + +} + +async function printSafariLogs(sessionId) { + const sessionLogDir = path.join(os.homedir(), "Library", "Logs", "com.apple.WebDriver", sessionId); + try { + const files = await fs.readdir(sessionLogDir); + const logFiles = files.filter(f => f.startsWith("safaridriver.") && f.endsWith(".txt")); + if (logFiles.length === 0) { + logInfo(`No safaridriver log files found in session directory: ${sessionLogDir}`); + return; + } + for (const file of logFiles) { + const logPath = path.join(sessionLogDir, file); + const logContent = await fs.readFile(logPath, "utf8"); + logGroup(`SafariDriver Log: ${file}`, () => console.log(logContent)); + } + } catch (err) { + logError("Error reading SafariDriver logs:", err); + } +} + setImmediate(runTests); From 53af3b9802c7db1c436f80150d993a9dc6f58070 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:42:44 +0200 Subject: [PATCH 3/8] fix --- tests/run-browser.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 6f53f802..1fa9e064 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -6,7 +6,6 @@ import commandLineArgs from "command-line-args"; import { promises as fs } from "fs"; import path from "path"; import os from "os"; -import { glob } from "glob"; import {logInfo, logError, printHelp, runTest} from "./helper.mjs"; From ca9d895042d6fbf2103a256eb00ad67f301b90a5 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:43:34 +0200 Subject: [PATCH 4/8] cleanup --- tests/run-browser.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 1fa9e064..b4716664 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -125,10 +125,12 @@ async function benchmarkResults(driver) { globalThis.JetStream.start(); callback(); }); + await new Promise((resolve, reject) => pollResultsUntilDone(driver, resolve, reject)); const resultsJSON = await driver.executeScript(() => { return globalThis.JetStream.resultsJSON(); }); + return JSON.parse(resultsJSON); } From bde4b71f2fd50fba3d89514c9e20369edd47620e Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:44:26 +0200 Subject: [PATCH 5/8] partial rever --- tests/run-browser.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index b4716664..4bea0d56 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -110,6 +110,8 @@ async function testEnd2End(params) { results = await benchmarkResults(driver); success = true; // FIXME: validate results; + } catch(e) { + throw e; } finally { await driver.quit(); if (!success) { From cb502e25cb88ef4057da5dca8b142d80e26b69f7 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:44:43 +0200 Subject: [PATCH 6/8] reuse code --- tests/run-browser.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 4bea0d56..38ea7660 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -92,7 +92,7 @@ async function testEnd2End(params) { iterationCount: 3 }, params); let results; - let success = false; + let success = true; try { const url = new URL(`http://localhost:${PORT}/index.html`); url.search = new URLSearchParams(urlParams).toString(); @@ -108,9 +108,9 @@ async function testEnd2End(params) { callback(); }); results = await benchmarkResults(driver); - success = true; // FIXME: validate results; } catch(e) { + success = false; throw e; } finally { await driver.quit(); From 827cb6b4dac1507567bf7edde47416bb9bfdce6a Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 14:45:04 +0200 Subject: [PATCH 7/8] cleanup --- tests/run-browser.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 38ea7660..72d17171 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -132,7 +132,6 @@ async function benchmarkResults(driver) { const resultsJSON = await driver.executeScript(() => { return globalThis.JetStream.resultsJSON(); }); - return JSON.parse(resultsJSON); } From 4b0f46c03bfbf8857081a90c14d536a79357a2e2 Mon Sep 17 00:00:00 2001 From: Camillo Bruni Date: Wed, 22 Oct 2025 17:35:29 +0200 Subject: [PATCH 8/8] address comments --- tests/run-browser.mjs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 72d17171..043cd6aa 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -15,7 +15,6 @@ const optionDefinitions = [ { name: "help", alias: "h", description: "Print this help text." }, ]; - const options = commandLineArgs(optionDefinitions); if ("help" in options) @@ -58,11 +57,9 @@ process.once("uncaughtException", (err) => { process.exit(1); }); - const PORT = options.port; const server = await serve(PORT); - async function runTests() { let success = true; try { @@ -174,11 +171,9 @@ function logIncrementalResult(previousResults, benchmarkResults) { } } - function printLogs(sessionId) { if (BROWSER === "safari" && sessionId) return printSafariLogs(sessionId); - } async function printSafariLogs(sessionId) {