Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 36 additions & 4 deletions tests/run-browser.mjs
Original file line number Diff line number Diff line change
@@ -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";

Expand All @@ -12,7 +15,6 @@ const optionDefinitions = [
{ name: "help", alias: "h", description: "Print this help text." },
];


const options = commandLineArgs(optionDefinitions);

if ("help" in options)
Expand All @@ -26,6 +28,7 @@ let capabilities;
switch (BROWSER) {
case "safari":
capabilities = Capabilities.safari();
capabilities.set("safari:diagnose", true);
break;

case "firefox": {
Expand Down Expand Up @@ -78,13 +81,15 @@ 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({
worstCaseCount: 2,
iterationCount: 3
}, params);
let results;
let success = true;
try {
const url = new URL(`http://localhost:${PORT}/index.html`);
url.search = new URLSearchParams(urlParams).toString();
Expand All @@ -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);
}
}
}

Expand All @@ -128,7 +137,6 @@ class JetStreamTestError extends Error {
super(`Tests failed: ${errors.map(e => e.stack).join(", ")}`);
this.errors = errors;
}

}

const UPDATE_INTERVAL = 250;
Expand Down Expand Up @@ -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);
Loading