diff --git a/tests/run-browser.mjs b/tests/run-browser.mjs index 52cf1235..043cd6aa 100644 --- a/tests/run-browser.mjs +++ b/tests/run-browser.mjs @@ -1,8 +1,11 @@ #! /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 {logInfo, logError, printHelp, runTest} from "./helper.mjs"; @@ -12,7 +15,6 @@ const optionDefinitions = [ { name: "help", alias: "h", description: "Print this help text." }, ]; - const options = commandLineArgs(optionDefinitions); if ("help" in options) @@ -26,6 +28,7 @@ let capabilities; switch (BROWSER) { case "safari": capabilities = Capabilities.safari(); + capabilities.set("safari:diagnose", true); break; case "firefox": { @@ -78,6 +81,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 +89,7 @@ async function testEnd2End(params) { iterationCount: 3 }, params); let results; + let success = true; try { const url = new URL(`http://localhost:${PORT}/index.html`); url.search = new URLSearchParams(urlParams).toString(); @@ -102,9 +107,13 @@ async function testEnd2End(params) { results = await benchmarkResults(driver); // FIXME: validate results; } catch(e) { + success = false; throw e; } finally { - driver.quit(); + await driver.quit(); + if (!success) { + await printLogs(sessionId); + } } } @@ -128,7 +137,6 @@ class JetStreamTestError extends Error { super(`Tests failed: ${errors.map(e => e.stack).join(", ")}`); this.errors = errors; } - } const UPDATE_INTERVAL = 250; @@ -163,4 +171,28 @@ 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);